Forum: FPGA, VHDL & Co. DFT im FPGA für ADC abtastung


von Tim S. (Gast)


Lesenswert?

Ich brauche mal generelle Hilfe. Ich möchte in sehr beschränkten fpgas 
mit nur 16 18x18 multifliern eine 256 Punkt DFT bauen. Das möglichst 
direkt beim abtasten mit 20MHz.

Die Formel für DFT ist ja recht simpel, aber: wie komme ich an den sinus 
und cosinus term? Macht man das mit lookup table? Könnte  man in dieser 
lookup table auch das windowing unterbringen, also direkt verrechnet?

Außerdem ist die Frage welches zahlenformat ich nutzen soll. Fixed point 
Arithmetik?

von Fpgakuechle K. (Gast)


Angehängte Dateien:

Lesenswert?

Tim S. schrieb:
> Ich brauche mal generelle Hilfe.

Das ist nicht generell, das ist schon sehr speziell. Und für generelle 
Fragen zur FT im suboptimalen Forum; unter 
https://www.mikrocontroller.net/forum/dsp finden sich eher die Antworter 
zu Fenster und signal processing.


> Ich möchte
> mit  16 18x18 multifliern eine 256 Punkt DFT bauen. Das möglichst
> direkt beim abtasten mit 20MHz.
>
> Die Formel für DFT ist ja recht simpel, aber: wie komme ich an den sinus
> und cosinus term? Macht man das mit lookup table?
Klar mit ROM-Tabelle, da sollte genug BRAM als ROM auf dem FPGA nutzbar 
sein und natürlich genügt auch eine Tabelle für eine Viertelperiode plus 
etwas offsetrechnerei.

> Könnte  man in dieser
> lookup table auch das windowing unterbringen, also direkt verrechnet?
Also ein Einheitsrechteck-Fenster sicher ;-) andere m.E. eher nicht.

> Außerdem ist die Frage welches zahlenformat ich nutzen soll.

Na das was du im Vorfeld durch numerische Experimente als das Beste für 
Deine Anwendung ermittelt hast. Natürlich Fixpoint, Genauigkeit im 
wesentlichen durch die  (doppelte?) Wortbreite des ADC bestimmt plus ein 
paar Extrabits und  gelegentlichen Skalieren. Es gibt einige Toolpakete 
für die FPGA-Implementierung von solchen Algos, beispielsweise simulink 
oder http://notes-application.abcelectronique.com/056/56-39978.pdf
Man kann sich aber auch den Algo in C runterhacken, natürlich nicht mit 
dem intrinsischen '+'-Operator sondern mit einem überladenen der den 
18x18 multiplier entspricht. Statt simulink kann man sich heute auch 
GNU-SDR auf seine Eignung zur Algosimulation anschauen: 
https://wiki.gnuradio.org/index.php/FFT

Anbei ein Auszug zur DFT-Implementierung aus ISBN:3-519-06157-0. 
Allerdings sollte man IMHO gleich eine FFT implementieren. Oder Goertzel 
wenn nur bestimmte Spektrallinien interessieren: 
https://de.slideshare.net/iaeme/implementation-of-modified-goertzel-algorithm-using-fpga

Beitrag "FFT Algorithmus in FPGA umsetzen"
Beitrag "8192-FFT aufteilen"
Beitrag "fft analyse mit Frequenzspektrum"
Beitrag "FFT IP Core von Xilinx"

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.