Forum: Digitale Signalverarbeitung / DSP / Machine Learning FFT Analyse


von Gerhard Gunzelmann (Gast)


Lesenswert?

Hallo

ich versuche eine FFT-Anaylse mit einem Microcontroller (PIC) zu
realisieren. Aufgabe: AD-Wandler digitalisiert ein Signal, das dann
analysiert werden soll (Frequenzen). Ich habe schon einiges dazu
gelesen, auch im Internet, aber ich verstehe immer noch Bahnhof. Wer
hat schon mal ne FFt programmiert ( in C oder Assembler) ? Wer hat ne
gute verständliche Anleitung oder ien Beispielprogram ?

Gruß
Gerhard

von Esam Calgesi (Gast)


Lesenswert?

Bei dem uC-Compiler fuer 8051 ist eine komplette FFT (in C) dabei. Die
läuft auf PC (Borland) und 8051. Quellcodes in SRC\DFHT.
Esam. (Link: www.wickenhaeuser.com)

von Chris (Gast)


Lesenswert?

Hallo,

gerade bei Microchip auf der Homepage ist ein Beispiel einer FFT zu
finden mit Code. Rechenzeit dauert aber je nach Auflösung bis 1
Sekunde.

Gruß

von Gerhard Gunzelmann (Gast)


Lesenswert?

Hallo Chris
danke, die habe ich schon gesehen, die funkt aber nicht.


Hallo Esam
danke für den Link. Den Compiler muß mwan wohl kaufen, oder gibts den
wo umsonst ?

Gerhard

von Chris (Gast)


Lesenswert?

"die funkt aber nicht."

Hallo,

mich würde mal interessieren, was an dem Microchip-Beispiel falsch ist,
da ich mich mit solchen Beispielen mal befassen wollte und nicht
unnötig Zeit mit einem fehlerhaften Beispiel verbringen möchte.

Gruß

von Gerhard Gunzelmann (Gast)


Lesenswert?

Hallo Chris

http://www.piclist.com/techref/microchip/fft/picspect.htm

ich weiß es nicht, ich verlasse mich hier auf das, was unter dem Link
steht.

Wenn Du den Link liest, findest Du ein Projekt zu einer FFT. Hab ich
auch gelesen. Aber nix verstanden. Ich suche was für Dummies. Ich hab
zwar schon mal was von Fourier gehört, aber alle Beispiele die ich
bisher gefunden habe verlassen sich darauf, daß die Leute schon
Spezialisten sind. Schaus mal an, vielleicht kannst Du mir sagen was
das Prog macht: z.B. wo hinterher das Ergebnis steht.


Gehrhard

von Chris (Gast)


Lesenswert?

Hallo,

na ja, also die FFT wird im Unterprogramm "Real FTT" ausgerechnet.
Der C-Code wurde dann wohl compiliert und der daraus entstandene
Assembler ist etwas abstrakt. Ausgabe erfolgt in Data[1] und Data[2]
vermute ich mal. Letztendlich produziert das Programm eine grafische
Ausgabe auf einem VGA-Display. Schaltbild fehlt, oder?

Gruß

"Algorithm from "Numerical recipes in C", manually compiled in
assembler
; and adapted...
;
; Calculate FFT of a set of 256 real values stored in data[0..511]
; (2 bytes per value, MSB first).
;
; Replace these data by the positive frequency half of the FFT
; (128 frequencies, complex values). First and last frequencies (which
are
; real) are in data[1] and data[2] respectively."

" This project is a complete audio spectrum analyser with output on a
; standard VGA display, done entirely with a PIC17C756 microcontroler"

von Gerhard Gunzelmann (Gast)


Lesenswert?

In diesem beispiel, aber auch in so manchen anderen, vermisse ich eine
Doku, was das Programm macht, und wo die Ergebnisse stehen. das gilt
auch für dieses Beispiel. Eine FFT-Analyse liefert doch ne Menge
Informationen: Frequenz1+zugehörige Größe, Frequen2+zugehörige Größe...
Wo steht das ? Ich kapiers nicht.


Gerhard

von Chris (Gast)


Lesenswert?

Hallo,

stimmt schon, was Du bemängelst, geht mir nicht anders. Was denn genau
in data[1] und data[2] steht, habe ich auf die Schnelle auch nicht
heraus gefunden. Die Erklärung müßte bei der C-Quelle zu finden sein,
die da angegeben ist:
"Algorithm from "Numerical recipes in C"
Die gibt's irgendwo im Internet zum Download, sind aber auf Englisch
und wie immer nicht einfach zu verstehen, da es eine mathematische
Abhandlung ist mit Umsetzung in C-Code. Meistens sind das weiter
entwickelte Algorithmen, die Rechenzeit sparen gegenüber dem Standard.

Gruß

von Esam Calgesi (Gast)


Lesenswert?

Betreff obigem Link,

Ne, kaufen musste da nix, ist alles in der demo dabei (v.a.D
C-Quellcodes).

Kannste sogar laufen lassen, da die FFT nur ein paar kB belegt, Demo
geht aber bis 8k. Du brauchst lediglich 'ne 8051 mit etwas externem
RAM... Ist aber nicht besonder Echtzeitfaehig.

Esam

von Uwe (Gast)


Lesenswert?


von Gerhard Gunzelmann (Gast)


Lesenswert?

Hallo Uwe

danke

vielleicht hilft mir das weiter.

Gerhard

von Uwe (Gast)


Lesenswert?

Hallo Gerhard!

Schau Dir den Quelltext in Ruhe an, es ist alles genau erklärt:

http://www.piclist.com/techref/microchip/fft/picspect.htm

<i>;==================================================================== 
========
; PROJECT     : PIC'SPECTRUM
;
; FILE        : FFT.INC
;
; VERSION     : 1.0
;
; DESCRIPTION :
;
; 256 points FFT routines, using s/2/13 format for numeric
computations
; (through the fixed.inc library). All data are stored in the internal
; registers of the 17C756 (array DATA).
;
; Execution time on a PIC17C756/32MHz : around 50ms without concurrent
; video generation (resulting in a 90-100ms refresh time with spectrum
; power calculation, analog acquisition and video refresh)
;
;======================================================================= 
=====
;                Developped & Copyrighted by Robert LACOSTE
;======================================================================= 
=====

;----------------------------------------------------------------------- 
-----
; Complex FFT, radix-1, decimation in place, 128 points
;
; Algorithm from "Numerical recipes in C", manually compiled in
assembler
; and adapted...
;
; <b>Input : 128 complex values (each on 4 bytes), stored in
data[0..511]
;         For each data : byte 0 = MSB of real part
;                         byte 1 = LSB of real part
;                         byte 2 = MSB of complex part
;                         byte 3 = LSB of complex part
;
; Replace data[0..511] by its FFT (128 frequencies, complex
values)</b>
;----------------------------------------------------------------------- 
-----</i>

und:

<i>;-------------------------------------------------------------------- 
--------
; Real FFT
;
; Algorithm from "Numerical recipes in C", manually compiled in
assembler
; and adapted...
;
; <b>Calculate FFT of a set of 256 real values stored in data[0..511]
; (2 bytes per value, MSB first).
;
; Replace these data by the positive frequency half of the FFT
; (128 frequencies, complex values). First and last frequencies (which
are
; real) are in data[1] and data[2] respectively.</b></i>

Gruß
Uwe

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.