Wir haben ein mit dem FPGA-Modul aufgenommenes Signal welches FFT transformiert wird.
Wie kann ich aus dem Ergebnis der FPGA-FFT die Wertepaare Amplitude/Frequenz erhalten? Die Dokumentation über die Ergebnisse des VIs ist bei Labview recht dürftig.
Ziel der ganzen Sache ist eine Frequenzverschiebung des Signals
Vielen Dank für eure Hilfe, Martin
Ich kenne das Modul nicht.
Wie werden die Daten ausgegeben? Liegen die in einem Array vor? Kriegst du nur ein Diagramm?
Ein Bild von dem VI bzw Teil des VIs wo die Daten ankommen, wäre da denke ich hilfreich.
die Daten werden leider nicht in einem Array sondern Punkt für Punkt ausgegeben, zusammen mit einem Zählindex.
Dann versteh ich dein Problem eigentlich nicht: Du willst die Wertepaare haben und diese werden Punkt für Punkt ausgegeben.
Problem gelöst? Wahrscheinlich eher nicht, aber nach den bisherigen Infos hört es sich so an. Ein VI wäre immernoch hilfreich.
Es geht nicht um mein spezielles VI sondern um die generelle Funktionsweise des FPGA-FFT-Vis bzw. die Interpretation der Ergebnisse.
Das FPGA-VI verlangt am Eingang lediglich Einzelwerte, die kann ich also z.B. in einer Schleife über einen Fifo reinschieben.
Da man mit einem Einzelwert keine FFT machen kann sammelt das VI eine definierte Anzahl Punkte die sich in den Optionen einstellen lassen. Hat es alle punkte zusammen, gibt es bei jedem weiteren Schleifendurchlauf einen Index und einen Wert aus, bei beiden weiß ich nicht was sie bedeuten und worauf sie sich beziehen.
Hallo macoio,
Zitat:Die Dokumentation über die Ergebnisse des VIs ist bei Labview recht dürftig.
Echt? Ich finde sie
recht aussagekräftig...
Da steht dann z.B. "data index = Indicates which FFT bin the VI is outputting.". Was willst du noch mehr wissen?
("
bin" = Lagerort oder auch Gruppierung...)
ok das bedeutet der Index gibt mir an um welches Frequenzband es sich handelt? Wenn der Index von 1 bis 10 hochläuft und ich bis 20 kHz abgetastet hab steht Index 1 dann für 1 - 1000 Hz und der zweite Ausgang am FFT für die Amplitude? (wenn ich Real+Imag zusammensetze)
Warum bekomme ich dann diese Werte einzeln, da muss ich ja nochmal einen kompletten Gesamtdurchlauf warten bis ich alle Werte zusammengesammelt bekomme?
Das hieße für dieses Bsp. nach 10 Durchläufen hat der FPGA genug Infos um die FFT zu machen, danach braucht er weitere 10 Durchläufe das ganze wieder rauszugeben.
Aber woher weiß er dann den Frequenzbereich?
Hallo macaio,
Zitat:Aber woher weiß er dann den Frequenzbereich?
Das ist dem FFT-Block prinzipiell egal. Wichtig ist der Parameter "Transform Parameters.Length", der die Blocksize beschreibt. Die Frequenz weißt du ja selbst und kannst somit aus Fmax und Blocksize selbst die BinSize ausrechnen! Außerdem verweist die Hilfe ja auf die Funktion "FFT to Spectrum", der du ebenfalls die Samplerate mitteilen sollst...
Zitat:da muss ich ja nochmal einen kompletten Gesamtdurchlauf warten bis ich alle Werte zusammengesammelt bekomme?
So sieht es aus, wenn man die Bilder in der Hilfe betrachtet. Aber die Hilfe erwähnt ja auch einen FIFO...
Zitat:Warum bekomme ich dann diese Werte einzeln
Weil diese Funktion nunmal so programmiert wurde. Es steht dir frei, einen eigenen FFT-Algorithmus für den FPGA zu programmieren, der dann (evtl.) ganze Datenblöcke am Stück verarbeitet...
Kannst du das mit den Frequenzbändern nochmal kurz etwas genauer erläutern?
Beispiel:
Wir haben das Labview-Windowed-FFT-Beispiel genutzt und schauen uns im Anschluss den Inhalt des Block-memory an wo die Ergebnisse der FFT abgelegt werden.
Dabei steht immer nur im ersten Feld eine größere Zahl (in den anderen 0 oder eine vergleichsweise sehr kleine Zahl), unabhängig davon wie ich die Frequenz, Samplerate usw. wähle.
Ich hatte das ganze so verstanden:
Ich möchte z.B. Signale im Bereich von 0 bis 1600 Hz messen.
Deshalb wähle ich:
- als Samplerate 12500 Ticks was bei 40MHz-clock ja 3200 Hz entspricht
- Frequenzbänder im FFT-VI - 16 -> ich hätte erwartet dass dies bedeutet, dass der Frequenzbereich von 0 bis 1600Hz in 16 gleich große Frequenzbänder aufgeteilt wird (0-100Hz, 100-200 Hz usw.)
- Als Testfrequenz im Frequenzgenerator wähle ich verschiedene Werte zwischen 100 und 1600 Hz, das bedeutet Werte zwischen 0.0000025 und 0.00003 Perioden / Tick.
Dies führt aber nicht zum gewünschten Ergebnis.
Das gewählte Labview-beispiel (von mir ist nur die Ausgabeanzeige hinzugefügt) ist im Anhang nochmal angefügt.
Vielen Dank für deine Hilfe.
[
attachment=34430] , labview2009
ok ich glaube das Problem ist gelöst. Die FFT funktioniert genau so wie ich es oben geschrieben habe. Mein Eingangssignal war beim Testen nur falsch (Mulitisinus statt Single Sinus), ich hab den Fehler also an der falschen Stelle gesucht.