Forum: FPGA, VHDL & Co. Implementierung der XILINX FFT-Core


von Cihan K. (lazoboy61)


Angehängte Dateien:

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

von Cihan K. (lazoboy61)


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

von Franz (Gast)


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.

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.