Xilinx FFT hard core

OP #1129294
Lesenswert?

Hi,

hat schon mal jemand mit einem Xilinx FFT hard core gearbeitet?

Ich hab damit folgendes Problem:
Egal was für Signale ich in die FFT hineingeben, das Ausgangssignal im 
Frequenzbereich ist immer verdreht.

Hier ein Beispiel:
Das Eingangssignal ist ein Sinus mit einer Frequenz von 2 Hz. Als 
Ausgang der FFT erwarte ich folgendes Signal:
-> f(0)=0; f(1)=0; f(2)=1; f(3)=0; …; f(N-3)=0; f(N-2)=-1; f(N-1)=0; 
f(N)=0;

Die FFT liefert allerdings folgendes Ausgangssignal:
-> f(0)=0; f(1)=0; f(2)=-1; f(3)=0; …; f(N-3)=0; f(N-2)=1; f(N-1)=0; 
f(N)=0;

Ich verstehe nicht wieso das Ausgangssignal verdreht ist. Hat jemand von 
euch eine Idee? Ist es möglich das Ausgangssignal zu verdrehen?

Gruß,
Kristian
OP #1129682
Lesenswert?

Klar verbietet es einem keiner den rückwärts auszulesen, aber was ist 
der Grund dafür?

Will eine Autokorrelation mit einem FFT und invers FFT realisieren. Da 
nun der erste FFT die Daten verkehrt herum ausgibt muss ich die ganzen 
Daten zwischenspeichern. Kostet nur unnötig Resourcen.
#1133006
Lesenswert?

Bei radix-2 FFT sind je die Daten normalerweise bit-reversed, nicht 
einfach verdreht. Schau doch mal im Datenblatt von dem core nach den du 
nutzt.

Wenn du FFT/IFFT machst, kann es sinnvoll sein für die FFT einen 
Decimation In Frequency (DIF) und für die IFFT einen Decimation In Time 
(DIT) cores zu nutzen. Dann sind zwar die Daten im Frequenzbereich 
verdreht, aber Ein- und Ausgang von dem System sind in normaler 
Anordnung.
OP #1134137
Lesenswert?

Da hatte ich mich vertan. Der Virtex hat natürlich keinen fft hard core 
sondern einen normalen soft core. Sorry!

Das stimmt, die Daten sind bei radix-2 FFT bit-reversed, verursacht 
durch die Butterfly-Operationen. Hab in den core-Optionen "Natural 
order" ausgewählt, sodass die durch die Butterfly verursachte 
bit-reversierung aufgehoben wird.

Bieten die Xilinx cores "Decimation in time" an? Hab da leider nichts 
auf Anhieb gefunden.
Gast #1134470
Lesenswert?

@Kris Maier:
> Bieten die Xilinx cores "Decimation in time" an? Hab da leider nichts
> auf Anhieb gefunden.

Suchst Du vielleicht den "CIC Compiler"?
(Core Generator -> Digital Signal Processing -> CIC Compiler)

Duke
Gast #1653610
Lesenswert?

Ich habe den FFT Core 7 instanziert, bekomme aber komische Werte. Die 
Architektur scheint zu laufen, aber die Werte sind seltsam. Die Indizes 
kommen nicht linear heraus sondern starten so 0,256,512,768, später 
kommen dann die fehlenden. Das habe ich in der Doku so nicht gesehen.

Ergo habe ich ein DP-RAM drangehängt und schreibe die Werte passend zu 
den Indizes in die Adressen. Dort kommen aber auch nur komische Werte 
raus. Später lese ich sie von der anderen Seite her aus.

Ich habe mal einen stark ausgesteuerten Sinus auf die FFT draufgegeben, 
aber sehe nur Rauschen in den Werten.

Hat jemand dazu eine Info?

Ich denke, ich habe einige Parameter falsch eingestellt oder nutze die 
FFT falsch.
1
component myFFT2048
2
  port (
3
  clk: IN std_logic;
4
  start: IN std_logic;
5
  xn_re: IN std_logic_VECTOR(15 downto 0);
6
  xn_im: IN std_logic_VECTOR(15 downto 0);
7
  fwd_inv: IN std_logic;
8
  fwd_inv_we: IN std_logic;
9
  scale_sch: IN std_logic_VECTOR(11 downto 0);
10
  scale_sch_we: IN std_logic;
11
  rfd: OUT std_logic;
12
  xn_index: OUT std_logic_VECTOR(10 downto 0);
13
  busy: OUT std_logic;
14
  edone: OUT std_logic;
15
  done: OUT std_logic;
16
  dv: OUT std_logic;
17
  xk_index: OUT std_logic_VECTOR(10 downto 0);
18
  xk_re: OUT std_logic_VECTOR(15 downto 0);
19
  xk_im: OUT std_logic_VECTOR(15 downto 0));
20
end component;

Wie müsste man die FFT parametrieren?
#1653653
Lesenswert?

Georgi schrieb:
> Ich habe den FFT Core 7 instanziert,

...

>
> Ich habe mal einen stark ausgesteuerten Sinus auf die FFT draufgegeben,
> aber sehe nur Rauschen in den Werten.
>

Das ist vielleicht nicht so sinnvoll, denn wenn du nicht richtig 
skalierst wirst du einen Überlauf erhalten und dann sind die 
Ausgangswerte ungültig.

Ein einfacher Test ist alle reellen Werte z.B. auf 1 zu setzen. Dann 
kommt erst mal nur der DC-Wert als Ausgang. Gut, zugegeben, dann hast du 
immer noch nicht Klarheit über die Indexierung, siehst aber erst mal 
grundsätzlich ob es überhaupt läuft.

> Hat jemand dazu eine Info?
>

Ich kenne den Core nicht, allgemein würde ich mit einer kleineren Größe 
anfangen, eine die noch nachvollziehbar ist. Achte darauf das du auch 
die FFT und nicht die IFFT berechnest. Nehme erst mal ein kleines Signal 
das keinen Überlauf erzeugt und setze die Skalierung so das nicht 
skaliert wird.

Gruß,

Günter
Gast #1653662
Lesenswert?

Vielleicht noch Folgendes: Ich gebe den Sinus auf den Realteil der FFT, 
den Imag belege ich mit Null. Das Timing fahre ich so wie in der 
Application note und gelange zu Folgendem:

Wenn ich ich die parametrierbare Tiefe der FFT auf "111...1" stelle, 
dann kommen nur ab und an Nadeln als -1 aus der FFT raus ansonsten 0

Wenn ich ich die parametrierbare Tiefe der FFT auf "10...0" stelle, also 
die Häfte, dann habe ich besagtes Rauschen.

Simuliert wird mit ps, wie es Xilinx vorschlägt.
#1654667
Lesenswert?

Georgi schrieb:
> Das kommt raus : 100kHz, bei einer 2048, jetzt lineare Ausgabe der Werte
> von 0...2047. Peaks sowohl im Re als auch Im bei 0 und 2027. Ich hätte
> eine einizge Linie im bereich der 100kHz Frequenz erwartet.

Nee, das stimmt schon, wenn ich mich recht entsinne, du bekommst einen 
Peak bei n und bei N-n. Für Sinus ist der eine positive, der andere 
negative. Für Cosinus beide positiv.
Gast #1655633
Lesenswert?

Ich weiss nicht so recht - die peaks mögen ja in Ordnung sein, ich 
interpretiere das so, dass dort alle restlichen unbehandelten Frequenzen 
kummulieren, aber ich hätte doch gerne mal einen einzigen ordentlichen 
peak inmitten meines Spektrums.

Ich haue da einen einzigen Sinus aus einer Tabelle drauf, der im 
Wesentlichen als Grundsignal auftauchen muss.

Nix iss...
Gast #1668021
Lesenswert?

Hallo,

wie gibst Du die Daten am XN_RE-Input ein ?
z.B. bei einem Sinus 0x00-0xff bei 8-Bit,
wobei 0x00 die negative Amplitude und 0xff die positive Amplitude ist ?

laut Datenblatt soll das im Zweierkomplement Format sein,
das Byte müßte also als signed betrachtet werden,
8.Bit wäre das Vorzeichen

Grüße,
Micha

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren