Fixed Point genauigkeit für DFT und Windowing

Gast #7108014
Lesenswert?

Wie bekomme ich heraus was übliche geforderte Genauigkeiten für die DFT 
im FPGA mittels Fixed point Berechnung ist. Es geht darum Sinussignale 
mit festern Frequenz zu sampeln und davon eine DFT zu berechnen. Davor 
findet noch eine Fensterung statt. Die Fensterung würde bei meinen 18x18 
Multiplizierern schon 36bits zurückgeben. Wenn ich nun damit 
weiterrechne kommt aus meinr DFT 71 bits heraus. Das kommt mir viel vor 
aber wo soll man abschneiden? Die Daten werden übrigens mit 14 bit ADCs 
aufgenommen.
Persönliche Seite #7355286
Lesenswert?

Holger F. schrieb:

Wie bekomme ich heraus was übliche geforderte Genauigkeiten für die DFT im FPGA mittels Fixed point Berechnung ist.

Das hat eigentlich mit VHDL wenig zu tun sondern mit der Genauigkeit der Daten. Rauschen, das in die FFT eingeht, wird sich entsprechend der Auflösung abbilden. Im Extremfall fordert ein schmalbandiges Signal, das sich nur in wenigen Stellen abbildet, die Auflösung, die das Signal selbst mitbringt, um unverfälscht prozessiert zu werden. Im Normalfaöö verteilt sich das Spektrum auf alle Frequenzen.

Um sicher zu sein, braucht die FFT daher theoretisch 1-2 Bit mehr an Y-Auflösung, als das Eingangssignal. Die gleiche Rechnung gilt das Fenstern.

Theorie: 14 Bit ADC, 28 Bit MUL -> 18 Bit Ergebnis -> 20 Bit DFT. Real: 12 Bit Signalqualität, 16 Bit Mul-Ergebnis, 16 Bit DFT.

Persönliche Seite #7441748
Lesenswert?

Die Betragsbildung bei der Berechnung der FFT-Werte erfordert jeweils Quadrierungen. Brutto betrachtet, kommt aus einem 14 Bit Vektor zwischenzeitlich immer ein 28er raus. Praktisch (und mit etwas genauem Hinschauen) sind es 26, wovon das Bit 1 immer Null ist. Wenn man das noch veränderliche Bit 0 absorbiert, hat man real 24 Bit, mit denen man weiterrechnen kann, ohne irgendetwas an Genauigkeit zu verlieren. Ab dann gilt die Betrachtung oben zum Rauschen, Fenstern und eben der physikalischen Genauigkeit.

#7442010
Lesenswert?

Hi,

https://de.wikipedia.org/wiki/Satz_von_Parseval sagt aus, dass die Energie im Zeit- und Frequenzbereich gleich sind. Damit wird die Dynamikanforderung an die FFT datenabhängig: transformiert man eine einzelne Sinuswelle der Amplitude 1 in einem 1024er Fenster dann hat die FFT die maximale Amplitude von 512. Das ist der worst-case, für Breitband wird das besser. Die FFT von 1024 samples hat 9stages, in jedem 'gewinnst' Du im schlechtesten Fall ein Bit.

Für integer Rechnung sieht das also so aus: 1024er Fenster sind 10Bit plus die Bit des ADC, z.B.14 macht 24Bit. Dein Multiplizierer kann 18Bit für die Koeffizienten und 18Bit für die Daten. Die Daten muss Du also um 6Bit abschneiden, dann bleiben von Deinem ADC noch 8 Bit übrig. Das will und tut man nicht.

Die Profis, z.B. DSL-Chips mit mehreren 10^9 multiply/add per sec., machen dynamische Skalierung. Die merken sich in jeder Stage der FFT das Maximum und skalieren ggf. runter.

Cheers Detlef

Gast #7443999
Lesenswert?

Detlef _. schrieb:

transformiert man eine einzelne Sinuswelle der Amplitude 1 in einem 1024er Fenster dann hat die FFT die maximale Amplitude von 512.

"Fenster" heißt bei dir wohl "Anzahl der FFT-Punkte", nehme ich an. Das ist aber nur die Zeitachse. Was ist mit der Amplitudenachse? Die muss sicher auch mindestens bei 1024 sein, oder?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren