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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.