DFT im FPGA für ADC abtastung

Gast #6959621
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?
Gast #6960437
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"
Angehängte Dateien:

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 4 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.