Forum: Digitale Signalverarbeitung / DSP / Machine Learning Fast Fourier Transform


von tuddel (Gast)


Lesenswert?

hi @ all

ich brauchte da mal etwas hilfe. ich will eine audioquelle auf ihre
frequenz hin untersuchen...
die fft methode (hab ich mir sagen lassen) ist hierfür ideal. nur...
ich habe keinen blassen schimmer, wie sie funktioniert. ich finde nur
immer irgend einen fortran code, den ich nicht lesen kann und so etwas
wie eine blanke "step by step" formel kann ich auch nicht (bei
google) finden :-(

kann mir da jemand helfen?

: Verschoben durch Admin
von tobias hofer (Gast)


Lesenswert?

hallo

grundsätzlich:

die fft ist ein effizienter algorithmus um die dft (diskrete fourier
transformation) schnell auszuführen. den fft algorithmus musst du
sicherlich nicht selbst "neu programmieren" das gibt es hunderte bsp.
auf dem netz. einfach mal nach radix2 + fft suchen.

-es wäre noch interessant zu wissen wo du die analyse machen willst,
auf einem pc oder mikroprozessor?
-was für einen auflösung hat dein audio signal?
-wie viele punkte möchtest du analysieren?
-muss das "echtzeit" sein
-welche programmiersprache?

wenn du einfach ein array mit den werten deiner audioquelle hast und
das ganze auf einem pc analysieren willst, brauchst du nicht unbedingt
die fft. da kannst du auch einfach die dft programmieren und das wäre
dann mit ca 8 zeilen code geschafft. einfach mal nach
"dft" suchen.

ich habe für mich eine fft und dft für den pc progbrammiert aber visual
basic.

gruss tobias

von tuddel (Gast)


Lesenswert?

ok, es soll...

...auf einen x86 ca 500Mhz (C3 prozessor) laufen
...eine linux applikation werden
...mit einer auflösung von cd-qualität klar kommen
...in echtzeit ablaufen
...c/c++ (gcc syntax)
...als quelle dient der "line in" einer soundkarte

von tobias hofer (Gast)


Lesenswert?

dann würde ich auf jeden fall die fft benutzen. suchst am besten mal
nach "fft radix2" algorithmus. da findest du sicherlich was.

als eingangsparamter für die fft hast du dann ein array mit den
zeit-diskreten samples als retour wert bekommst du dann ein array mit
den realen und ein array mit dem imaginärenteil. daraus kannst du dann
die frequenzwerte und deren phase berechnen.

tobias

von Rufus T. Firefly (Gast)


Lesenswert?

Das ist zwar Code für Win32, aber das wesentliche solltest Du den
Sourcen dennoch entnehmen können:

http://www.codeproject.com/audio/waveInFFT.asp

Etliche weitere Links spuckt unser Freund google aus, wenn er mit
"win32 fft audio spectrum" gefüttert wird - statt win32 könnte man ja
auch "linux" eingeben und sich an noch mehr Links erfreuen.

Nu mach ma'

von Sebastian S. (Gast)


Lesenswert?

Da gibts schon was:
http://www.fftw.org

Das kann man benutzen und auch relativ sicher sien,d as was sinnvolles
raus kommt :)

Außerdem wird man es nie im Leben schneller hinbekommen. Ich zumindest
nicht -- die Jungs haben mehr drauf :)

von juniorone (Gast)


Lesenswert?

hallo, das würde mich auch interessieren.

bitte an tobias hofer, kannst du mit dein prog mit VB schicken.wäre
sehr dankbar.
mfg
juniorone

von tobias hofer (Gast)


Lesenswert?

falls dich nur die fft interessiert:

http://www.fullspectrum.com/deeth/programming/vb.html

ist nicht meine seite aber ein sehr gutes bsp. für einen audioanalyzer
in visual basic.

falls dich die dft interessiert musst dich halt nochmals melden.

gruss tobias

von juniorone (Gast)


Lesenswert?

die dft würde mich auch interessieren.
mfg
juniorone

von tobias hofer (Gast)


Lesenswert?

hier die dft funktion in vb. die dft erledigt das selbe wie die fft halt
nur viel langsamer.

'dft
Function dft(RealIn() As Double, n As Long)

Dim m As Integer
Dim z As Integer
Dim rsum As Double
Dim isum As Double
Dim spect(4096) As Double

    rsum = 0
    isum = 0
    For m = 0 To n / 2 - 1 Step 1
        For z = 0 To n - 1
            rsum = RealIn(z) * Cos(2  Pi  m * z / n) + rsum
            isum = RealIn(z) * Sin(2  Pi  m * z / n) + isum
        Next
        spect(m) = Sqr(rsum ^ 2 + isum ^ 2) 'betrag berechnen
        rsum = 0
        isum = 0
    Next

End Function

gruss tobias

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.