mikrocontroller.net

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


Autor: sihamile (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Mark Brandis (markbrandis)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: sihamile (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Mark Brandis (markbrandis)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: sihamile (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.