Implementierung der XILINX FFT-Core

OP #2963005
Lesenswert?
• ▲
▼
Hallo Leute,

hab mal da paar Fragen zu der FFT-Core von Xilinx. Ich will in meinem 
aktuellen Projekt eine FFT implementieren, die Beispieldaten (eines 
Bildes) aufnehmen und mir das Ergebnis rausschicken soll. Die gleichen 
Daten werden auch in Matlab berechnet, um eine Referenz zu erhalten.

Nun bin ich folgendermaßen vorgegangen. Habe die GUI für die FFT-Core 
angeschmissen und folgende Einstellungen übernommen:
Channel = 1
Transform Length = 8192
Target Clock Freq = 100 MHz
Radix-2, Burst I/O
Data Format = Fixed Point
(Precision Options) Input Data Width = 12
(Precision Options) Phase Factor Width = 16
Unscaled
Convergent Rounding
Natural Order
No Offset
etc.
(falls ich eine wichtige Angabe vergessen habe, bitte einfach bescheid 
sagen)

So wie ich verstanden habe müssen nun meine Daten im 2er Komplement (da 
Fixed Point und Zitat aus dem Datenblatt: "Input data bus: Real 
component (bxn = 8 - 34) in two’s complement or single precision 
floating-point format.") in die Core rein. Was ich erstmal habe sind 
8192 Pixeldaten in 12 Bit Auflösung. In Matlab habe ich diese Binärdaten 
in einem Array als Dezimalzahlen eingegeben und damit die FFT berechnet 
(siehe m-File). Nun habe ich in der von mir erstellten Core 12 Bit als 
Input Data für real und imaginär-Teil festgelegt. Den Imaginär-Teil habe 
ich auf Null gesetzt. Beim real-Teil, wo die Bilddaten hineinkommen 
sollen, weiss ich jetzt nicht genau wie ich das machen soll. Muss ich 
jetzt meine Daten ins 2er Komplement umwandeln oder direkt binär einfach 
so eingeben, zumindest haben beide Wege mir nicht das richtige Ergebnis 
gebracht. Das 2er Komplement habe ich einfach durch invertieren der 12 
Bit Daten + 1 realisiert (siehe auch vhd-File auf Zeile 778 ganz unten). 
Habe ich etwas falsch gemacht?

Außerdem bin ich mir auch nicht ganz sicher ob die Input Bit Breite von 
12 bits richtig sind in meinem Fall. Und was soll der Phase Factor 
bewirken? Kommastellen? Zumindest sind meine Daten alle ganze Zahlen. In 
dieser Hinsicht bräuchte ich mal euren Rat.

Hinweis: Die Output-Daten haben ich bewusst unscaled gemacht, damit ich 
hoffentlich so die gleichen Ergenisse wie in Matlab bekomme, um 
vergleichen zu können.

Als Dateianhang habe ich außer der m- und vhd-File noch das Datenblatt 
der FFT-Core angehangen.

Wäre über jeden Ratschlag sehr dankbar.

mfg Cihan
Angehängte Dateien:
OP #2964441
Lesenswert?
• ▲
▼
So, nun habe ich es selber gelöst, hoffe es ist auch richtig.
Würde mich freuen wenn jemand meine Erkenntnisse verifiziert.

Den Input muss ich mindestens auf 13 Bit einstellen, da ich 12 Bit Daten 
habe und er die Daten im 2er Komplement erwartet, ist warscheinlich der 
13. Bit -2^13, damit negative Zahlen intepretiert werden können. Da ich 
nur positive Zahlen habe, setze ich den 13. Bit auf 0. Das ist 
Erkenntnis 1 und der Output der FFT ist richtig.

Erkenntnis zwei ist der Phase Factor. Soweit ich das verstehe hat es mit 
den Kommastellen intern in der Core zu tun, d.h. mit wie vielen Stellen 
er intern rechnen soll. So bekommnt man dann genauere Ergebnisse 
(verglichen mit den Matlab-Ergebnissen), um so höher man ihn einstellt.

Wie gesagt, würde mich freuen wenn jemand meine Erkenntnisse verifiziert 
oder meinen Fehler mit mitteilt, fals ich falsch liege.

gruß Cihan
Gast #2968372
Lesenswert?
• ▲
▼
Cihan Kalayci schrieb:
> Den Input muss ich mindestens auf 13 Bit einstellen, da ich 12 Bit Daten
>
> habe und er die Daten im 2er Komplement erwartet, ist warscheinlich der
>
> 13. Bit -2^13, damit negative Zahlen intepretiert werden können.

So ist es.

Cihan Kalayci schrieb:
> Erkenntnis zwei ist der Phase Factor. Soweit ich das verstehe hat es mit
> den Kommastellen intern in der Core zu tun,
Der PP ist die Winkelauflösung mit der die Sin/Cos-Werte für die MUL mit 
dem Eingang gebildet werden und muss folglich um den bekannten Faktor 6 
grössen sein, als die Y-Auflösung.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.