mikrocontroller.net

Forum: Projekte & Code 128point FFT in ASM


Autor: niels laugwitz (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Fast Fourier Transformation
IN ASSEMBLER!
627 words code
352 word constants (incl. 128 words Beispiel Daten)
Timing: 86.1ms per MHz Taktfrequenz

getestet mit AVR-Studio4 und Zielhardware ATMega8. Andere MEGA-AVRs
sollten auch gehen. Wer eine Multiplikations-Rountine einbindet, kann
sicher auch auf kleineren AVRs damit arbeiten.

Programmstruktur und Variablennamen wurden dem FFT-Algorithmus in
"Numerical recipes in C" entlehnt.
Dort sind Theorie und die ganze Mathematik im Detail erklärt (dort
Programm: realft). Das Programm funktioniert mit FFT-Längen nn2=128 und
weniger (Länge ist immer Power of 2 !).
Input: nn2 reele Datenpunkte mit Wertebereich -16384 bis +16384.
Output: überschreibt input Daten und hat denselben Wertebereich (-2^14
... +2^14).
Das Output-array ist wie folgt aufgebaut:
f 0,f N/2),           *
Re(f 1),Im(f 1),
Re(f 2),Im(f 2),
Re(f 3),Im(f 3),
.
.
.
Re(f N/2-1),Im(f N/2-1)

*Anm.: Die ersten zwei Datenpunkte im Array sind bereits reelwertig!
Die DC-komponente hat natürlich keine Phaseninformation, und auch für
die Nyquist-frequenz gibt es grundsätzlich keine Phaseninformation.

Um den Code nicht unnötig aufzublähen wurde auf korrektes Runden
verzichtet. Daher ist die Genauigkeit der Ergebnisse etwa: +/-8. Bei
Ausnutzung des Wertebereichs ist damit immerhin eine bessere Auflösung
als die des ADC gegeben.

Längere FFTs würden 16bit Zählvariablen und ähnliche Unannehmlichkeiten
bedeuten. Vorerst reichen mir die 64 Frequenzen, die ich mit dieser
Version berehcnen kann.

Have fun!

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.