Forum: FPGA, VHDL & Co. Xilinx FFT Bit reversed


von Patrick B. (p51d)


Lesenswert?

Hallo allerseits

Ich plage mich gerade etwas mit dem Xilinx FFT Core 9.0 herum. Die 
Ausgabe kann normal oder bit reversed erfolgen (Pipelined streaming 
architektur). Weil ich hinterher noch einen FFT-Shift Block habe, möchte 
ich den unnötigen Speicher zum Reordering des FFT outputs vermeiden.

Wenn ich jetzt beim Index die Bits vertausche (der Index wird wieder 
eine normale Rampe von 0 bis NFFT-1), kommt nur noch unsinn raus. Sind 
entgegen dem Datenblatt die Datenwerte Im und Re auch anders codiert?

von Häh? (Gast)


Lesenswert?

Eigentlich nicht. Ich kenne die aktuelle Version nicht, habe aber den 
xilinx core schon mehrfach verwendet. Es kommt immer ein index_k raus, 
der die Nummer anbietet, so kann man die Daten per hand in 
Speicherzellen schieben. Egal, wie man den Core paramteriert, stimmen 
die werte immer mit k überein.

von Patrick B. (p51d)


Angehängte Dateien:

Lesenswert?

Ich habe mal ein paar Screenshots gemacht:
Gemäss dem Index (einmal vor und einmal nach meinem Reverse-Block) würde 
die korrekte Addresse ausgegeben.
Nur bei den Real- oder Imaginärwerten (umgerechnet in dB) ist das ganze 
sehr komisch (einmal mit Bit reversed ouput, einal normal).

Aber ich werde dem noch etwas nachgehen.

von Patrick B. (p51d)


Angehängte Dateien:

Lesenswert?

Ich habe den ersten Fehler gefunden:
Die Indexe habe ich wieder zurück-getausch. Wobei diese natürlich gleich 
der RAM-Adresse entsprechen würden...

Nur scheint irgendwie die Ausgabe noch nicht zu stimmen: Der Peak bei 
~500 sollte ganz am Anfang sein.
Die Indexe habe ich überprüft (0, 512, 256, 768, 128, 640...) entspricht 
der korrekten Reihenfolge über das ganze Frame hinweg.

von Frank B. (fbergemann)


Lesenswert?

Ich komme mit Deiner Beschreibung des Problems nicht klar.
Bit-reversed order heißt, daß die Daten im Ausgabe-Vektor nicht bei #0 
anfangenden fortlaufend gelisted sind, sondern daß der Ausgabe-Index 
"bit-reversed *verwürfelt*" ist.

Also wenn Du 8 Werte in einem Eingangsvektor hast, dann ergibt sich die 
Reihenfolge der Ausgangsdaten so:

Eingangsdaten        Ausgansgdaten
(dec  bin)           (dec  bin)
----------------------------------
 0    %000            0    %000
 1    %001            4    %100
 2    %010            2    %010
 3    %011            6    %110
 4    %100            1    %001
 5    %101            5    %101
 6    %110            3    %011
 7    %111            7    %111


Kann es sein, daß Du beim bit-reveral noch einen Fehler drin hast?
Nimm doch mal besser einen Rechteck-Impuls und schau Dir die Si-Funktion 
als Ergebnis an.

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.