Frage zu FFT -> Twiddle-Faktoren und Fensterberechnung

Fragestellungen die sonst nicht passen, z.B. Fragen zum Compiler etc.
RA1981
Beiträge: 38
Registriert: Do 23. Apr 2015, 07:54

Frage zu FFT -> Twiddle-Faktoren und Fensterberechnung

Beitragvon RA1981 » Mo 30. Nov 2015, 19:13

Hi Jungs,

kennt sich jemand mit FFT aus und kann mir hilfreich in die Seite treten?

Ich brauch ne FFT und wollte nicht "irgendwas" fertiges aus dem Web nehmen, das hilft dem Verständnis ja nicht. Also selber machen, nur "Literatur für Dummies" ist schwer aufzutreiben.

Was ich bisher implementiert hab:
- Bit-reverse Funktion, um die Eingangs- oder Ausgangswerte entsprechend neu zu ordnen
- Sinus-Tabelle für eine Viertelperiode, den Rest der Periode kann man ja daraus ableiten (implementiert als Double von 0 bis 1)

Fensterberechnung fehlt noch, hier komme ich mit den "kryptischen" Formeln nicht klar, wie sich diese Fenster berechnen (mal abgesehen von Dreieck *grins*), das ist aber nicht das Hauptproblem.
Wo ich gerade strauchle, sind die Twiddle-Faktoren. Nach meinem (aktuellen) Verständnis sind die Faktoren nichts anderes wie Cosinus/Sinus-Werte, mit denen die Real-/Imaginärwerte multipliziert werden - die Frage lautet: Ist es wirklich so einfach oder hab ich's doch nicht verstanden?

Ralf

Thomas Barth
Administrator
Beiträge: 85
Registriert: So 5. Apr 2015, 21:46
Wohnort: Frankfurt/M
Kontaktdaten:

Re: Frage zu FFT -> Twiddle-Faktoren und Fensterberechnung

Beitragvon Thomas Barth » Di 1. Dez 2015, 18:18

Habe dazu mal was geschrieben http://www.barth-dev.de/knowledge-corner/dsp/dftfft/

Kannst dir ja auch mal CMSIS angucken.

Code: Alles auswählen

P_M_DERIVE(T_ALG.E_BH) := UC_16S_EN_16NS (TDB.T_ENTIER_16S
                                   ((1.0/C_M_LSB_BH) *
                                   G_M_INFO_DERIVE(T_ALG.E_BH)))

RA1981
Beiträge: 38
Registriert: Do 23. Apr 2015, 07:54

Re: Frage zu FFT -> Twiddle-Faktoren und Fensterberechnung

Beitragvon RA1981 » So 6. Dez 2015, 22:04

Hi Thomas,

guter Artikel. Ich muss ehrlich gesagt gestehen, dass mir das ganze Formelgewühl zu schaffen macht (das ist aber offenbar auf jeder Seite zu dem Thema so), aber der Artikel hat doch ein bisschen geholfen.
Soweit ich es verstanden habe, bestätigt mich dein Artikel darin, dass mir die Viertel-Sinuswelle ausreicht, um die Twiddle-Faktoren zu berechnen.

CMSIS-DSP hab ich gesehen, aber ich bin nicht dahinter gekommen, wie man das im PSoC Creator "installiert/verwendet". Ich hab's bis hierhin einfach zu Fuss gemacht ^^
Allerdings muss ich das Programm noch fertig schreiben. Mal schauen, ob ich mit deinem Artikel auch hier weiterkomme :)

Ralf

Thomas Barth
Administrator
Beiträge: 85
Registriert: So 5. Apr 2015, 21:46
Wohnort: Frankfurt/M
Kontaktdaten:

Re: Frage zu FFT -> Twiddle-Faktoren und Fensterberechnung

Beitragvon Thomas Barth » Mo 7. Dez 2015, 15:03

RA1981 hat geschrieben:CMSIS-DSP hab ich gesehen, aber ich bin nicht dahinter gekommen, wie man das im PSoC Creator "installiert/verwendet". Ich hab's bis hierhin einfach zu Fuss gemacht ^^
Allerdings muss ich das Programm noch fertig schreiben. Mal schauen, ob ich mit deinem Artikel auch hier weiterkomme :)

Ralf


Hi Ralf,

ich habe es mit dieser Anleitung gemacht:
http://www.cypress.com/forum/psoc-creat ... oc-project

Es sind eigentlich garnicht so schwer (wenn man es mal verstanden hat).
Letztlich geht es um Kreuzkorrelation, deine Funktion wird mit verschiedenen reinen Frequenzen korreliert und jeweils geguckt inwieweit diese Frequenz darin vorkommt.

Normalerweise müssten wir vor dieser Korrelation aber den jeweiligen Sinoiden komplett neu berechnen-> dauert zu lange. Hier kommt der Twiddle-Factor ins Spiel. Aufgrund der Symetrie können wir uns viele Berechnungen schenken, wir führen dieTwiddle Faktoren ein, die wir upfront einmal berechnen und gut ist. Radix-2 nutzt dann auch wieder diese Symmetrieeigenschaften wodurch viele Ergebnisse wiederverwendet werden können.

Gruß
Thomas

Code: Alles auswählen

P_M_DERIVE(T_ALG.E_BH) := UC_16S_EN_16NS (TDB.T_ENTIER_16S
                                   ((1.0/C_M_LSB_BH) *
                                   G_M_INFO_DERIVE(T_ALG.E_BH)))


Zurück zu „andere“

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

cron