Forum: FPGA, VHDL & Co. Xilinx XFFT IP - IFFT - Skalierung


von Felix K. (pfiffiger_pfelix)


Lesenswert?

Hallo,

ich befasse mich gerade mit der Xilinx XFFT IP V9.1 (Vivado Version 
2019.1) und der zugehörigen Dokumentation.
Das Problem ist, bei einigen Dingen ist diese nicht so eindeutig, 
besonders, wenn es um den Invers-FFT Modus der IP geht.

Daher hätte ich an dieser Stelle ein paar Fragen an evtl. andere 
Xilinx/Vivado Mitstreiter.
Vielleicht war jemand schon mal mit diesen Fragen konfrontiert und kann 
die ein oder andere bejahen/verneinen/beantworten.

1.1) Ist es richtig, dass der IFFT-Modus der IP eine "intrinsische" 
(also mathematisch bedingte) Skalierung von 1/N zum Input hinzufügt, die 
nicht "deaktiviert" werden kann und die unabhängig von der 
Scaling-Konfiguration der IP und der optional konfigurierten Scaling 
Schedule auf dem axi_stream_config-Bus ist ?

1.2) In Bezug auf die vorherige Frage, ist es korrekt, dass wenn ich 
eine skalierte FFT durchführe (Also entsprechende Konfiguration mit 
Scaling Schedule oder Auto Scaling) und den Ergebnisvektor direkt wieder 
in die IFFT gebe (nachdem ich am axi_stream_config-Bus vom FFT-Modus in 
den IFFT-Modus umgeschaltet habe), ich nicht die ursprüngliche Amplitude 
des Zeitsignals zurückbekomme, weil [skalierte FFT + "intrinsisch" 
skalierte IFFT] zu einer Art doppelter Skalierung führt ?

1.3) Mit Bezug auf die vorhergehende Frage, wenn das Ziel wäre, das 
ursprüngliche Zeitsignal mit passender Amplitude nach FFT + IFFT wieder 
zu erhalten, müsste eine unskalierte FFT gewählt werden, sehe ich das 
richtig ?

2) Wenn ich die Einstellung "Natural Order" für das Output der FFT 
gewählt habe und dann den Ausgangsvektor wieder in die IFFT gebe 
(nachdem ich am axi_stream_config-Bus vom FFT-Modus in den IFFT-Modus 
umgeschaltet habe), muss ich dann zuerst die Indizes des Vektors vor der 
IFFT neu ordnen, um nach der IFFT wieder das ursprüngliche Zeitsignal zu 
erhalten, oder kann ich die Reihenfolge so lassen, wie sie ist (wenn die 
Konfiguration der IP unverändert bleibt, außer dass sie auf IFFT 
umgeschaltet wird) ?

3) Ist es normal, dass die IFFT die Frequenz des ursprünglichen 
Zeitsignals in ihrem Ausgangsvektor verdoppelt (so dass z.B., wenn der 
ursprüngliche FFT-Eingangsvektor genau 1 Periode des Zeitsignals 
beinhaltete, man genau 2 Perioden im Ausgangsvektor der IFFT erhält) 
oder ist dies noch ein Fehler in meiner Testanwendung (Ich denke eher 
Letzteres, aber zur Sicherheit die Nachfrage) ?

4) Muss die "scaling schedule" auf dem axi_stream_config bus (wenn die 
IP auf manuelle Skalierung konfiguriert ist) nur einmal vor Beginn des 
Einlesens eines Frames gesendet werden, oder muss diese während des 
Einlesens für jedes einzelne Sample wiederholt gesendet werden ?

5) Ist es nötig den Core über den optionalen "aresetn" Port zu resetten 
bevor oder nachdem eine neue Konfiguration über den axi_stream_config 
bus gesendet wurde ?

Gruß

: Bearbeitet durch User
von Michael W. (Gast)


Lesenswert?

Bei den 1) müsste ich jetzt auch nachsehen. Ich beantworte es mal aus 
dem Kopf heraus? (non AXI FFT der alten Art):

2) nein, bei "natural order" kommen sie doch in der sortierten 
Reihenfolge heraus. Oder vertue ich mich da?

3) nein, ist nicht normal. Du machst was falsch. Aus der FFT kommen alle 
Daten inklusive Spiegelfrequenzen heraus. Die müssen auch wieder hinein 
oder weggelassen werden. Die andere Möglichkeit, ist einen offset 
hineinzubauen. Das sollte aber kontrolliert passieren und einen Grund 
haben wie den hier:
Beitrag "bandlimitierte Rechtecksignale zielgenau erzeugen"

4) nein, "einmal" würde ich sagen. Noch nicht benutzt.

5) nein, einmal resetten und dann laufen lassen.

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.