Forum: Digitale Signalverarbeitung / DSP / Machine Learning FFT Split Radix Algorithmus mit Matlab


von sihamile (Gast)


Lesenswert?

Hallo zusammen,

im Rahmen eine Arbeit muss ich den FFT Radix 2, Radix 4 und Split Radix 
Algorithmen unter Matlab schreiben. Bis jetzt habe ich erfolgreich den 
Radix 2 und Radix 4 geschrieben. Da es unter Split Radix keine klar 
Regelmäßigkeit wie beim Radix 2 und 4 existiert, komme ich leider mit 
eine For Schleife nicht weiter, die diese Wiederholung gewährleisten 
musste.

Wenn jemanden schonmal den Split Radix unter Matlab programmiert hat, 
bitte ich ihn mir eine paare Tips zu geben oder gegebenfalls den Code 
zuschicken.

Danke im Vorraus.
sihamile

von Mark B. (markbrandis)


Lesenswert?

sihamile schrieb:
> Hallo zusammen,
>
> im Rahmen eine Arbeit muss ich den FFT Radix 2, Radix 4 und Split Radix
> Algorithmen unter Matlab schreiben. Bis jetzt habe ich erfolgreich den
> Radix 2 und Radix 4 geschrieben.

Hm, hätte jetzt gedacht dass sowas in Matlab schon eingebaut ist... aber 
ist auch schon ne Weile her dass ich das letzte Mal damit gearbeitet 
habe.

> Wenn jemanden schonmal den Split Radix unter Matlab programmiert hat,
> bitte ich ihn mir eine paare Tips zu geben oder gegebenfalls den Code
> zuschicken.

Mit der Suchmaschine Deiner Wahl findest Du Implementierungen des Split 
Radix Algorithmus in Fortran und in C. Die nach Matlab zu portieren 
sollte so schwer nicht sein. Ein bisschen witzlos erscheint mir die 
Aufgabe freilich schon.

von sihamile (Gast)


Lesenswert?

> Hm, hätte jetzt gedacht dass sowas in Matlab schon eingebaut ist

Ich brauche den Algorithmus, der damit gearbeitert wurde, da ich später 
auf ModSim weiterarbeiten werde.

Eine eingebaute Funktion (fft()) brauche ich nicht.

> Mit der Suchmaschine Deiner Wahl findest Du Implementierungen des Split
> Radix Algorithmus in Fortran und in C.

Das habe ich schon gemacht liefert aber mir leider keine sinnvolle 
Ergebnisse, wenn ich reine cos oder sin Signale als input eingebe. Als 
Output bekomme ich entweder eine richtige Real Anteil oder Imag Anteil 
im Vergleich zu fft vom Matlab. Nur wenn ich ein input eingeben, das aus 
einem Cos und Sin Anteil eingebe, bekomme ein richtiges Output Signal.

Leider habe ich unter C nicht passendes gefunden.

> Die nach Matlab zu portieren sollte so schwer nicht sein.

Es sollte kein Problem sein.

> Ein bisschen witzlos erscheint mir die Aufgabe freilich schon.

Wenn Du einen effizienten Algorithmus hast, würde ich ihn mir gern 
anschauen.
Danke
Ich freue mich auf Rückmeldungen.

von Mark B. (markbrandis)


Lesenswert?

sihamile schrieb:
> Wenn Du einen effizienten Algorithmus hast, würde ich ihn mir gern
> anschauen.

Eine Beschreibung des Algorithmus:
http://www.fftw.org/newsplit.pdf

Auf www.fftw.org findet man generell auch Implementierungen zum Thema 
FFT.

Eine mögliche Implementierung in C habe ich hier gefunden, die aber 
nicht direkt mit dem Artikel oben zusammenhängt. Verwendung auf eigene 
Gefahr und keine Gewährleistung für irgendwas:
http://www.hackchina.com/en/r/41001/MRELFFT.C__html

von sihamile (Gast)


Lesenswert?

Danke Mark,

hat sich jemanden schonmal mit den Gewichtungsfaktoren (Wn^(1*n) und 
Wn^(3*n)) beschäftigt. Bei den Radix 2 und Radix 4 lassen sie sich die 
Gewichtungsfaktoren (Wn^(2*k) bsw Wn^(4*k)) einfach einem Array 
speichern und jedesmal wenn ein entsprechnenden Gewichtungsfaktor 
gebraucht wird, wird aus dem Array (Gewichtung Array) mit dem 
entsprechenden Index geholt.

Diese Idee dient dazu, wenn man hardwarenah implementieren will, dass 
sich bei einem größeren Länge N die Anzahl der Operation mit den 
Gewichtungsfaktoren und den Speicherbedarf reduzieren lassen.

Da es keine lögische Regelmäßigkeit bei den Split Radix gibt, will ich 
wissen, ob diesen Fall auch für den Split Radix möglich ist.

Danke

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.