Forum: FPGA, VHDL & Co. fft analyse mit Frequenzspektrum


von Peter (Gast)


Angehängte Dateien:

Lesenswert?

Ich habe von opencores einen vhdl fft-code heruntergeldaen. Leider gibt 
es hierzu keine Dokumentation, zumindest habe ich keine gefunden. 
Deshalb die Fragen: warum gibt es 2 Dateneingänge und 2 Datenausgänge? 
Wofür sind die anderen Eingänge, vor allem i3? Und das allerwichtigste: 
Wie interpretiere ich die Ausgänge, wenn ich z.B. an einem Eingang ein 
Sinussignalanlege, dann bekomme ich an beiden  Datenausgängen der fft 
das selbe Sinussignal wieder raus, nur zeitlich etwas nach hinten 
verschoben, dabei möchte ich doch eigentlich ein Frequenzspetrum. Gibt 
es eine Möglichkeit, ein Frequenzspektrum vom Eingangssignal zu 
bekommen?
MfG

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Hast du dir schon mal grundlegend das Thema FFT angesehen?

> Deshalb die Fragen: warum gibt es 2 Dateneingänge und 2 Datenausgänge?
Ich wage sogar die Frage zu stellen: warum nur 2 Eingänge und 2 
Ausgänge?
Wenn ich mir den Code so ansehe, dann ist der komplett unleserlich und 
ohne Dokumentation unbrauchbar.

Zudem möchte ich einige der Konstrukte in Frage stellen:
1
  signal n23 : unsigned(15 downto 0);
2
  :
3
  :
4
  n23 <= n22(30 downto 30) &
5
  n22(29 downto 29) &
6
  n22(28 downto 28) &
7
  n22(27 downto 27) &
8
  n22(26 downto 26) &
9
  n22(25 downto 25) &
10
  n22(24 downto 24) &
11
  n22(23 downto 23) &
12
  n22(22 downto 22) &
13
  n22(21 downto 21) &
14
  n22(20 downto 20) &
15
  n22(19 downto 19) &
16
  n22(18 downto 18) &
17
  n22(17 downto 17) &
18
  n22(16 downto 16) &
19
  n22(15 downto 15);
Warum schreibt er nicht:
1
  signal n23 : unsigned(15 downto 0);
2
  :
3
  :
4
  n23 <= n22(30 downto 15);

Der Code sieht für mich irgendwie automatisch generiert aus, weil 
jeglicher sinnvoller Kommentar fehlt und die Signalnamen eigentlich 
unbrauchbar sind... :-/

von Peter (Gast)


Lesenswert?

Ja kann gut sein dass der Code unbrauchbar ist, nichtsdestotrotz würde 
ich gerne wissen, wie ich aus dem Ausgangssignal einer fft in vhdl das 
Frequenzspektrum herausbekomme, das normale ausgangssignal ist ja auch 
zeitabhängig...

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

>  Ausgangssignal einer fft ...
Das Ausgangssignal einer FFT ist ein Feld mit Werten. Und darin sind die 
einzelnen Frequenzen einfach über einen Index anzusprechen...

von Peter (Gast)


Lesenswert?

was heißt "über einen Index anzusprechen"? wie spreche ich das 
ausgangssignal an um werte mit entsprechenden werten zu bekommen?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Die grundlegende Theorie zur FFT ist dir geläufig?
Eine FFT mit z.B. 16 Punkten hat 16 Eingangsdatenworte aus dem 
Zeitbereich.
Das Ergebnis der FFT sind 16 Datenworte im Frequenzbereich.

Du speicherst für eine 1024er FFT also 1024 analoge Werte in ein Feld. 
Dann lässt du die FFT draus los. Und bekommst nach Beendigung der 
Berechnung ein Feld, in dem das Spektrum abgelegt ist.
Du brauchst also (grob gesagt) zum Einspeichern der Werte einen Index 
und zum Auslesen des Spektrums auch einen...

von Peter (Gast)


Lesenswert?

Ja ok jetzt hab ich am Ausgang einen Index mit Werten, aber wie bekomme 
ich daraus jetzt Frquenzabhängige Werte, mein ausgang sieht ja jetzt so 
aus: Zum zeitpunkt x ist mein ausgang y, aber ich möchte ja bei der 
Frequenz f einen zugehörigen wert x, also mein Frequenzspektrum. zum 
Beispiel bei 1 khz ist mein zugehöriger wert 4 für eine bestimmte 
funktion.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

>> Die grundlegende Theorie zur FFT ist dir geläufig?
Du hast ein Eingangsfeld und ein Ausgangsfeld. Das Eingangsfeld enthält 
Zahlenwerte im Zeitbereich, das Ausgangsfeld enthält Zahlenwerte im 
Frequenzbereich.

>> Die grundlegende Theorie zur FFT ist dir geläufig?
Ich möchte sogar noch eins weitergehen:
Die grundlegende Theorie zur Umwandlung vom Zeit- in den Frequenzbereich 
ist dir geläufig. Und vor allem, was die entsprechenden Werte dann 
darstellen?

> Zum zeitpunkt x ist mein ausgang y, aber ich möchte ja bei der
> Frequenz f einen zugehörigen wert x, also mein Frequenzspektrum. zum
> Beispiel bei 1 khz ist mein zugehöriger wert 4 für eine bestimmte
> funktion.
Kapier ich nicht  :-/
Zeichne doch mal ein Bild dazu...

von Peter (Gast)


Angehängte Dateien:

Lesenswert?

Ok mir ist nicht ganz klar was im Ausgangsbereuch meiner FFT in VHDL 
angezeigt wird, ich will ein Frequenzspektrum haben wie in der ersten 
Datei(Matlabfft), wo ich einen 50 Hz sinus angelegt habe und mir das 
Frequenzspektrum  auch eine Amplitude bei 50 Hz anzeigt.wie komme ich 
nun von dem Ergebnis der VHDLFFT( 2. Datei, VHDLfft, imaginär und 
realteil des Ausganges sind angezeigt)bei der ich als Realteil eine 
Sinus aufgelegt habe und den imaginärteil leergelassen habe, auf so ein 
Frequenzspektrum wie in Datei 1?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Zeig dir doch einfach mal die Zahlenwerte in Modelsim als Analogkurven 
an
(so wie hier der Ausgang einer DDFS: 
http://www.lothar-miller.de/s9y/uploads/Bilder/DDFS.gif)
dann erkennst du leicht, ob da überhaupt irgendwas Sinnvolles rauskommt.

von Peter (Gast)


Angehängte Dateien:

Lesenswert?

sieht glaub ich nicht so sinnvoll aus oder kann man damit was anfangen? 
die sinuswelle ist der eingang der fft (imaginärteil leer) und reaus und 
imraus die ausgänge.

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

Das Matlab-Spektrum scheint auf jeden Fall auf Daten im Zeitbereich zu 
basieren, auf die schon eine Fensterfunktion angewandt wurde. Ansonsten 
sähe man keinen endlich breiten Peak, sondern nur eine diskrete Linie 
bei der Grundfrequenz 50Hz.

Ist die Breite des Abtastzeitfensters nicht exakt ein Vielfaches aller 
im Signal enthaltenen Schwingungen, hat das berechnete Spektrum nicht 
allzu viel mit dem Eingangssignal zu tun, sondern besteht aus einer 
Vielzahl von Frequenzen. Aus diesem Grunde wendet man vor der 
Fouriertransformation eine Fensterfunktion (z.B. Hamming, Hanning, usw.) 
an.

Leider vergessen nämlich viele Leute, dass die Fouriertransformation nur 
dann ein korrektes Spektrum handelt, wenn das Eingangssignal eine 
Periodizität mit exakt der Breite des Abtastfensters besitzt!

von Johann (Gast)


Lesenswert?

Du must doch den Realteil mit dem Imaginärteil verrechnen.

z.B.  Wurzel aus(Re^2 + Im^2) das Ergebnis kann man dann noch in db 
umrechnen

Außerdem mus man das Testsignal noch fenstern. (siehe Wikipedia 
Fensterfunktion http://de.wikipedia.org/wiki/Fensterfunktion)

Dort ist z.B. das Hamming-Fenster beschrieben.

Man berechnet anhand der angegebenen Formel die Parameter für das 
Hamming-Fenster. Wenn Dein Testsignal z.B. aus 512 Werten besteht, dann 
benötigst Du aich 512 Koeffizienten für die Fensterung. Diese errechnet 
man mit Hilfe der Funktion die auf Wikipedia steht z.B. mit Exel aus. 
Kann dann aus den Werten einen Graphen erzeugen um das Ergebnis zu 
überprüfen. Diese Koeffizienten speichert man in einem Excel File ab.

Anschließend verwendet man das Xilinx Tool "mem_edit" damit kann man ein 
Excel-File importieren und dieses dann als ein BlockRAM 
Konfigurationsfile abspeichern.

Somit kannst Du dann im ISE ein BlockRAM mit Hilfe des IP-Core-Wizeard 
erstellen und das Konfigurationsfile für den Block-RAM benutzen. Somit 
stehen im FPGA die Koeffizienten für die Fensterfunktion zur Verfügung.

Die Fensterfunktion ist dann wieder ganz einfach. Du must nur Dein 
Testsignalvektor mit dem Koeffizientenvektor multiplizieren. Das heist 
Testsignalwert 0 mit Koeffizient 0 dann Testsignalwert 1 mit Koeffizient 
1 usw.

Somit hast Du das Testsignal mit einer Fensterfunktion versehen.

von Johann (Gast)


Lesenswert?

Sorry für meine schreibweise, aber ich hatte es eilig.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> Außerdem mus man das Testsignal noch fenstern.
Warum denn MÜSSEN? Man kann auch ein Rechteckfenster nehmen, nur 
sollte man dann auch wissen, wie man das Ergebnis zu interpretieren 
hat...

Aber aus dem Ergebnis oben kann irgendwie nichts Sinnvolles abgelesen 
werden...

von Johann (Gast)


Lesenswert?

Als ein Rechteckfenster ist nun wirklich nicht die beste Wahl. Der 
Aufwand für die Implementierung eines Rechteckfensters und eines 
Hamming-Fensters bleibt gleich.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> Als ein Rechteckfenster ist nun wirklich nicht die beste Wahl.
Trotzdem sollte auch mit einem Rechteckfenster nicht so etwas 
undefiniertes rauskommen wie im Screenshot...

> Der Aufwand für die Implementierung eines Rechteckfensters und eines
> Hamming-Fensters bleibt gleich.
Diese Aussage solltest du dir aber nochmal grundlegend genau 
überdenken  :-o

von Johann (Gast)


Lesenswert?

Es kommt immer darauf an wie man es implementiert :-)

Du hast ja Recht ein Rechteckfenster ist sehr einfach zu implementieren.

Das was dort rauskommt ist auf jedenfall falsch.

von Johann (Gast)


Lesenswert?

Jedoch muß man sagen das er gebreits einiges geschafft hat. Mach weiter 
so und es wird noch etwas. Nie den Kopf hängen lassen. ich habe auch 
überlegt ob ich die FFT auf dem FPGA mache, jedoch habe ich deutlich 
mehr Daten.

Ich habe ein Board gebaut, mit 14Bit 800Msps digitalisiert. Da kommt 
schon richtig was zusammen. Vielleicht werde ich auch mal so eine FFT 
auf der Grafikkarte probieren.

von Johann (Gast)


Lesenswert?

Wieso nimmt denn keiner die FFT die im ISE vorhanden ist? Muß man dafür 
Lizenzgebühren bezahlen?

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

Johann schrieb:
> Wieso nimmt denn keiner die FFT die im ISE vorhanden ist? Muß man dafür
> Lizenzgebühren bezahlen?

Es geht bei so etwas nicht nur um die Lizenzkosten, sondern ggf. auch 
darum, eine Mischung von Quellen, die unter verschiedenen und ggf. 
inkompatiblen Lizenzen stehen, zu vermeiden.

Gerade auch bei Bibliotheken, die von Prozessorherstellern 
bereitgestellt werden, kann man doch erhebliche Probleme bekommen, wenn 
man sie für ein Projekt verwendet, das z.B. unter die GPL gestellt wird.

Zwar sind solche Bibliotheken zwar meist kostenlos erhältlich, aber an 
die Auflage gebunden, sie ausschließlich auf Bausteinen des betreffenden 
Herstellers einzusetzen. Die Anforderung halte ich auch für 
ausgesprochen legitim.

Verwendet man in einem FPGA einen Picoblaze, Microblaze oder NIOS, ist 
man ja lizenzmäßig auch an die jeweiligen FPGAs von Xilinx bzw. Altera 
gebunden, unabhängig davon, ob man es durch irgendwelche technischen 
Kniffe schaffen würde, den jeweiligen Core auf einem Fremd-FPGA zum 
Laufen zu bringen.

Und von Tool-Herstellern bekommt man ja auch Softcores, andere IP-Blöcke 
und Softwarebibliotheken bereitgestellt, die man eben auch nur zusammen 
mit den jeweiligen Tools einsetzen darf, z.B. den MIPS-kompatiblen 
TSK3000 von Altium/Tasking.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> Wieso nimmt denn keiner die FFT die im ISE vorhanden ist?
Schwenk dann mal dein Design auf Altera oder Lattice über...

> Wieso nimmt denn keiner die FFT die im ISE vorhanden ist?
Ziemliche Verallgemeinerung, nicht wahr?
Wer nimmt sie deines Wissens nach sonst noch nicht?

von Johann (Gast)


Lesenswert?

Bevor ich ein Projekt umsetze, lege ich mich bereits auf einen FPGA 
Hersteller fest und nach Möglichkeit auf den Type (Virtex 5 Spartan 3 
oder Spartan 6)

Viel schlimmer ist es open Cores zu verwenden die dann nicht gehen und 
man hoffen muß das jemand einem dann weiter helfen kann. Ich denke mal 
die die meisten hier einen engen Zeitplan haben und es sich nicht 
leisten können Module zu debuggen. Deshalb würde ich NUR Cores verwenden 
die von Xilinx oder Drittanbieter sind.

von Peter (Gast)


Lesenswert?

Danke für die Tips, die Fensterung soll auch noch kommen wenn die FFT 
erstmal richtig durchgeführt und interpretiert ist, auch wenn ich altera 
nutze und nich xilinx aber egal. Wenn ich auf meine FFT eine clock von 
100ps lege, habe ich doch eine Abtastfrequenz von 10 GHz, am Ende 
bekomme ich ein Feld mit Daten, die mir nacheinander ausgegeben werden. 
Wenn ich als Ausgang 64 Felder habe, ist es dann richtig, dass das 6. 
Feld mir den Ausgangswert des Bereiches 781 bis 937 Mhz anzeigt?
((10 Ghz/ 64) *5 = 781Mhz, (10 Ghz/64)*6= 937Mhz)
Die 2. Hälfte( 5-10Ghz) kann ich verwerfen, wegen Spiegelung oder?

von Dennis (Gast)


Lesenswert?

Muss die Welchmethode nach der FFT angweandt werden? Wie implementiere 
ich sie am Besten?
MfG

von Christoph L. (clauer)


Lesenswert?

@Dennis --> Welch ist ein Fenster, wenn dann muss es vor der FFT 
angewandt werden.
@Peter --> Um von deinen Ausgangswerten das sog. Powerspektrum zu 
bekommen musst Du den Betrag der beiden Komplexen Ausngangsvektoren 
bilden mit sqrt( RE[i]^2 +IM[i]^2 ).

Wenn Du eine Sample-Rate von 10GS hast ist die Nyquistfrequenz 5GHz die 
Du in 64 Quantisierungsblöcken vorliegen hast. Nach der 
Unschärferelation ist deine Frequenzauflösung 5GHz/64=78,125MHz, das 
Spektrum sieht nun so aus:

0 Bandenergie von 0MHz...78,125MHz
1 ...
2 ...
3 ...
4 ...
5 Bandenergie von 390,625MHz...468,75MHz ( = 6. Feld im Spektrum)
...
...
...
63 Bandenergie von 4,921,785GHz.....5GHz

von Michael (Gast)



Lesenswert?

hier sieht man 3 zusammengemischte Frequenzen im input datenstrom

und die analyze im output: 3 frequenzen und ihre gespiegelten pendants

von pedro (Gast)


Lesenswert?

mit welchen programmen ist das gemacht?

von Michael (Gast)


Lesenswert?

>Nach der Unschärferelation ist deine Frequenzauflösung 5GHz
Seit wann ist das eine "Unschärferelation "???

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.