Forum: Digitale Signalverarbeitung / DSP / Machine Learning probleme mit fourieranalyse =(


von zero_gravity (Gast)


Lesenswert?

frohen ersten advent erstmal an alle ^^

ich hoffe mal, hier gibts nen paar experten, die sich ein wenig mit 
fourieranalysen auskennen - ich steh nämlich im moment nen bisschen aufm 
schlauch... =(

ich bin dabei mir so einen 'spektrumanalyser' für meinen (jaha, 
selbstgebauten!!! ;) ) mp3-player zu basteln... doch wollt ich den code 
für die fft (oder dft??) nich einfach kopieren, sondern selber schreiben 
- vielleicht bleibt ja so was hängen ;)


doch nun mal zu meinem problem:

man braucht doch für die berechnung der amplitude der einzelnen 
harmonischen die genaue periodendauer der grundfrequenz des signals. 
aber wie komm ich an die?? muss ich die selber messen oder tu ich für 
die berechnung einfach so, als wär sie z.b. 50hz??????


und wenn ich die dann habe, wie kommt man dann an die amplitude einer 
harmonischen? ich hab mir da mal ne formel aus meinem physikbuch 
zusammengestückelt:

amplitude der x-ten harmonischen =
[sin(2*pi*f*x*t1) * F(t1)  +  sin(2*pi*f*x*t2) * F(t2)  + .... + 
sin(2*pi*f*x*tn) * F(tn)] / n    (ja sorry, hab kein formelprogramm)

x is dabei die so-und-so-vielte harmonische, n die gespeicherte anzahl 
der "momentanamplituden" des signals, F(t) ist die gespeicherte 
"momentanamplitude" des signals zum zeitpunkt t und f ist die 
grundfrequenz...


so, ich brauch jetzt erstmal nen kaffee ^^

lg - zero_gravity

von Niels H. (monarch35)


Lesenswert?

Naja, eine echte Transformation wirst du auf Grund der begrenzten 
Resourcen vermutlich eh nicht hinbekommen.

Ich habe mal eine möchte-gern-spektrum-analyser implementiert, der 
einfach nur die Anzahl der Richtungsänderrungen pro Sekunde des 
Ausgangssignales grafisch Dargestellt hat. Das ist natürlich in keinster 
Weise mit einer Fourieranalyse zu vergleichen, brachte aber einigermaßen 
logische Resultate, sah schick aus und war somit für meine Zwecke völlig 
ausreichend.

Leider finde ich dazu keine Quellen mehr, aber vom Prinzip her wars 
recht simpel.

von Uhu U. (uhu)


Lesenswert?

Der Frequenzbereich ergibt sich aus Abtastzeit und Fenstergröße.

von Düsentrieb (Gast)


Lesenswert?

welche cpu? wieviele punkte/bins?

von zero_gravity (Gast)


Lesenswert?

@ niels:
sieht bestimmt auch ziemlich cool aus, aber ich hätte schon gern ne 
komplette auflösung des spektrums ^^ trotzdem danke =)

@ uhu:
was meinst du genau mit frequenzbereich?? die grundfrequenz????
fenstergröße ist - nehm ich mal an - die menge der gemessenen 
stützpunkte des signals... wie viel passen da so ins ram? ich dachte da 
so an etwa 256

und die abtastzeit hängt doch auch irgendwie mit der samplingfrequenz 
zusammen, oder??? bahnhof


is denn meine formel ansatzweise richtig??

ich hätte echt bei analysis in mathe besser aufpassen sollen ;)


schönen abend noch udn danke soweit
- zero_gravity

von zero_gravity (Gast)


Lesenswert?

oh hey düsentrieb, hab dich eben ganz überlesen ;)

wollt das ganze auf nem mega avr laufen lassen... irgendwas richtung 
mega8 oder mega32 ^^ und dann das ganze bei maximalen 16mhz

wenn du mit punkten die einzelen messungen des adc vom signal pro 
messdurchgang meinst, dann sollten das so um die 256 sein
- bei mehr wirds ram langsam knapp

von Uhu U. (uhu)


Lesenswert?

zero_gravity wrote:
> @ uhu:
> was meinst du genau mit frequenzbereich?? die grundfrequenz????

Die niedrigste Frequenz, die die FFT auflösen kann ergibt sich aus 
Samplingfrequenz (= 1/Abtastzeit) und der Anzahl Sampels, über die 
analysiert wird (= Fenstergröße). Die höchste auflösbare Frequenz ergibt 
sich nach dem Abtasttheorem aus der halben Samplingfrequenz.

> fenstergröße ist - nehm ich mal an - die menge der gemessenen
> stützpunkte des signals... wie viel passen da so ins ram? ich dachte da
> so an etwa 256

Ja. Allerdings wählt man die Fenstergröße nicht nach der vorhandenen 
Speichermenge aus, sondern die Auflösungsansprüche ergeben eine 
notwendige Fensterbreite und die bestimmt die Menge Speicher, die 
benötigt wird.

von zero_gravity (Gast)


Lesenswert?

hmmm... auflösungsansprüche, was?
keine ahnung, was nimmt man da für ne auflösung??

bei ner linearen skala vielleicht immer so den
mittelwert von frequenzbändern á 400hz??

lg - zero_gravity

von Uhu U. (uhu)


Lesenswert?

Beispiel:

Man will das Spektrum des Signals in 25 Frequenzbänder auflösen. Dann 
braucht man eine Fensterbreite von 50 Sampels.

Angenommen, man wählt eine Abtastzeit von 500 µs, dann ergibt sich eine 
maximal auflösbare Frequenz von 1000 Hz.

von zero_gravity (Gast)


Lesenswert?

ok, das mit den frequenzbändern hab ich jetzt glaub ich verstanden ^^

also braucht man nur 50 messwerte um 25 bänder zu "analysieren"...
das würd ja schon reichen =)

und wenn man diese 50 messwerte in einer zeit von 500µs gespeichert 
kriegt, liegt die höchste noch erfassbare harmonische, also der höchste 
ton des signals, bei 1khz?????


vielleicht such ich mal bei amazon nach nem buch "fft für dummies" ;)

danke soweit und gute nacht
- zero_gravity

von Düsentrieb (Gast)


Lesenswert?

zb du sampelst mit 10khz, 256 pkte, dann wird fmax 5khz und fmin 39hz
du brauchst wohl: fft in place, real data

ne anspruchsvolle aufgabe...muddu wohl noch etwas lernen... :-)

von zero_gravity (Gast)


Lesenswert?

hey düsentrieb,
hab mir schon gedacht, dass das nich so ganz einfach wird ;)  aber ich 
glaube ich hab jetzt zumindest schonmal die sache mit der 
samplingfrequenz und den einzelnen bins verstanden ^^

aber wenn ich jetzt meine signal-stützpunkte vom adc im ram liegen hab, 
wie läuft dann die fft ab? ich muss doch irgendwie die gespeicherten 
werte mit diesem schmetterlingsgraphen 
(http://www.fh-augsburg.de/~horschem/IngMatherial2/fastfourier.html)
berechnen, um die phase und die amplitude der einzelnen oberwellen zu 
bestimmen, oder?????


lg
zero_gravity

von Düsentrieb (Gast)


Lesenswert?

right ! butterfly is your friend...  :-)

fft in place + real :
in place: in+out benutzt selben ram...für mini-ram-cpu ideal
real: es werden nur reale inputs benutzt...komplexe haste ja bei realen 
daten eh nicht; dadurch kann 50% platz gespart werden...zb 2*128 input 
für 256 adc-werte; 256 byte ram reichen somit;  die bit-verwurschtelung 
is allerdings etwas komplexer...man bekommt eben nie was geschenkt...

bei avr-freaks gibts ein projekt, da hat einer wohl genau sowas mit avr 
gemacht...:-)))

von Jens (Gast)


Lesenswert?

Hallo  zero_gravity,

Zur Theoretischen Erklärung kann ich dier folgendes Vorlesungsskript 
sehr ans Herz legen:
http://www.tfh-berlin.de/~rudolph/signale/skripte/index.html
Besonders Teil 5 und die Blätter zur DFT.

Schönen Tag noch

von zero_gravity (Gast)


Lesenswert?

hey forum-leutz :)

ich hab mich jetzt mal duch dutzende seiten und dokumente gearbeitet 
(danke an jens & düsentrieb) und ich denke, dass auch so halbwegs was 
hängen geblieben ist ;)

allerding verwirrt mich da eine sache total:
seht euch bitte mal die zweite sinusoid-rechnung im jeweils 2ten level 
der beiden butterfly-graphen an...

http://www.ece.ucsb.edu/~kastner/ece15b/project1/fft_description_files/image032.jpg

und

http://www.larguesa.kit.net/MPS/projet50.gif

bei dem ersten ist der sinusoid da W^2 und bei dem zweiten graphen ist 
er W^1!?! wie müsste der denn nun aussehen? eigentlich doch W^1... oder 
hab ich
wiedermal was nicht mitgekriegt?!


schöne nacht noch ^^
zero_gravity

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.