Fast Fourier Transform

Gast #199235
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?
Gast #199236
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
Gast #199237
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
Gast #199238
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
Gast #199244
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren