Forum: Digitale Signalverarbeitung / DSP / Machine Learning genaue signalanalyse - unbedingt fft?


von alex (Gast)


Lesenswert?

nabend allerseits :)

ich hab nich so wirklich ne ahnung von höherer mathematik in assembler 
und daher wollt ich hier mal nachfragen, ob es nicht noch eine andere 
lösung für mein problem gibt...

ich brauche eine genaue analyse eines "audio"-signals zwischen 0,1hz und 
100hz... also wie stark welche frequenz vertreten ist...

aber brauche ich dafür wirklich unbedingt eine fft oder kann ich mir 
dieses trigonometrische monster irgendwie ersparen??

lg
alex

von Kai G. (runtimeterror)


Lesenswert?

>ich brauche eine genaue analyse eines "audio"-signals zwischen 0,1hz und
>100hz... also wie stark welche frequenz vertreten ist...

Was verstehst du unter "genau"?

Die höhere Mathematik in Assembler beschränkt sich bei der 
Fourier-Analyse auf einen Sinus, der aus einer (interpolierten) 
Wertetabelle kommt. Ein bisschen Multiplikation und eine Wurzel, für die 
es im Wiki auch Codebeispiele gibt. Die Frage ist eher, welche 
Informationen du über das Eingangssignal benötigst und mit welcher 
zeitlichen Auflösung.

Ein paar Eckdaten wären nicht schlecht:
- gibt es bestimmte Frequenzen, die du prüfen möchtest?
- ansonsten: welche Frequenzauflösung und Verteilung (logarithmisch oder 
linear)?
- welche Genauigkeit (in bit)?
- welche Sampling-Rate?
- Was passiert mit den Messwerten?
- Warum unter 20 Hz bei Audio?
- Welche zeitliche Auflösung
- Welche Plattform?

Es gibt diverse Alternativen zur Fourier-Analyse.

Schöne Grüße

Kai

von alex (Gast)


Lesenswert?

hey kai, danke für die schnelle antwort :)

erstmal ne korrektur vorweg: meinte eben 1hz bis 100hz

- gibt es bestimmte Frequenzen, die du prüfen möchtest?
am luxoriösten wäre natürlich, wenn ich alle vielfachen frequenzen von 
1hz prüfen könnte ^^ aber ich würd mich da auch mit weniger begnügen ;)

- ansonsten: welche Frequenzauflösung und Verteilung (logarithmisch oder
linear)?
linear :)

- welche Genauigkeit (in bit)?
die genauigkeit sollte dabei bei so +-0,5hz (bei 8bit auflösung) 
liegen...

- welche Sampling-Rate?
realtime!? also so schnell wie möglich ^^

- Was passiert mit den Messwerten?
-> so ne art spectrum-analyser

- Warum unter 20 Hz bei Audio?
ist keine echtes 'audiosignal', ist aber genauso aufgebaut (überlagerung 
verschiedener frequenzen und amplituden)

- Welche zeitliche Auflösung
was meinst du damit genau? tschuldige... hab heut nacht ne lange 
leitung..

- Welche Plattform?
avr (irgendwas richtung mega...) und in assembler


lg
alex

von Kai G. (runtimeterror)


Lesenswert?

Schau mal hier, ob da was bei ist:
Beitrag "Schnelle FFT in Assembler"

>- gibt es bestimmte Frequenzen, die du prüfen möchtest?
>am luxoriösten wäre natürlich, wenn ich alle vielfachen frequenzen von
>1hz prüfen könnte ^^ aber ich würd mich da auch mit weniger begnügen ;)

Ergibt also eine Analyse von 100 Bändern - ist schonmal nicht gerade 
wenig. Je mehr Frequenzen du unterscheiden willst, desto schlechter wird 
die zeitliche Auflösung - also um so mehr Samples musst du aufzeichnen 
und auswerten.

>- ansonsten: welche Frequenzauflösung und Verteilung (logarithmisch oder
>linear)?
>linear :)

Das menschliche Gehör kann tiefe Frequenzen deutlich besser 
unterscheiden als hohe, weshalb die Frequenzen normaler Weise 
exponentiell notiert werden. Eine lineare Verteilung spräche für die 
Fourier-Analyse.

>- welche Genauigkeit (in bit)?
>die genauigkeit sollte dabei bei so +-0,5hz (bei 8bit auflösung)
>liegen...

Missverständnis. Mit wie vielen Stufen soll die Amplitude jeder Frequenz 
wiedergegeben werden? Für rein grafische Geschichten reichen 8 Bits 
dicke.

>- welche Sampling-Rate?
>realtime!? also so schnell wie möglich ^^

Ich meinte, wie schnell kommen die Daten rein? Bei 100 Hz 
Maximalfrequenz macht eine Sampling-Rate größer als ca. 400 Hz nicht 
viel Sinn. 200 Hz reichen hier meist schon.

>- Warum unter 20 Hz bei Audio?
>ist keine echtes 'audiosignal', ist aber genauso aufgebaut (überlagerung
>verschiedener frequenzen und amplituden)

Was ist es denn?

>- Welche zeitliche Auflösung
>was meinst du damit genau? tschuldige... hab heut nacht ne lange
>leitung..

Wir oft pro Sekunde soll das Programm die neuen Pegel ausgeben? Das 
steht dem Frequenzauflösungsvermögen diametral entgegen!
Siehe auch:
http://de.wikipedia.org/wiki/Heisenbergsche_Unsch%C3%A4rferelation
ab "Folgende Analogie verdeutlicht die Unbestimmtheit:"

>- Welche Plattform?
>avr (irgendwas richtung mega...) und in assembler

Wird auf möglichst viel SRAM hinauslaufen.


Benötigst du nur die Amplituden oder auch die Phasen?

Im Moment spricht alles für eine FFT.
- Fenstergröße: 256 8-bit Samples.
- Sample Rate 256 Hz
- Auflösung 1 Hz
Ob das von der Rechenleistung her hinhaut weiß ich noch nicht.
Die Trennung der Frequenzen im unteren Bereich wird recht mies.
Zeitliche Auflösung liegt bei 1 Hz (Jede Sekunde ein neues Spektrum), 
lässt sich aber mit genügend Rechenleistung unter Verwendung eines 
Ringpuffers interpolieren.

Wenn das von der Rechenzeit her nicht passt, kann man den Puffer 
halbieren, dadurch ergibt sich eine Frequenzauflösung von 2 Hz und eine 
zeitliche Auflösung von 2 Hz. Das Spielchen kannst du so lange 
fortsetzen, bis die Rechenzeit reicht oder die das Ergebnis nicht mehr 
gefällt ;)

Ein bisschen im Forum suchen schadet übrigens nicht - Spektralanalysen 
werden hier recht oft diskutiert.

Gruß und gute Nacht

Kai

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.