www.mikrocontroller.net

Forum: Digitale Signalverarbeitung / DSP FFT Analyse


Autor: Gerhard Gunzelmann (Gast)
Datum:

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

Autor: Esam Calgesi (Gast)
Datum:

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

Autor: Chris (Gast)
Datum:

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

Autor: Gerhard Gunzelmann (Gast)
Datum:

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

Autor: Chris (Gast)
Datum:

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

Autor: Gerhard Gunzelmann (Gast)
Datum:

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

Autor: Chris (Gast)
Datum:

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

Autor: Gerhard Gunzelmann (Gast)
Datum:

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

Autor: Chris (Gast)
Datum:

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

Autor: Esam Calgesi (Gast)
Datum:

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

Autor: Uwe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
U.a. das Schaltbild ist hier zu finden:
http://www.circuitcellar.com/pastissues/articles/L...

Autor: Gerhard Gunzelmann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Uwe

danke

vielleicht hilft mir das weiter.

Gerhard

Autor: Uwe (Gast)
Datum:

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

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.