Frequenzen / Audio
-
mal noch ein kleiner tip am rande:
in der dsv hat sich eigentlich die FFT (fast fourier transform) eingebürgert - ausserdem solltest du dich, wenn du eine solche transformation benutzen willst, auch mit dem sog. windowing befassen, um (hörbare) pegelsprünge an den blockgrenzen bei der rücktransformation zu vermeiden.
alternativ kannst du dein signal natürlich auch mit einer filterbank "zerlegen" und die bänder einzeln gewichten. stichworte FIR/IIR filter
FIR : keine phasenverzerrung, aber unterschiedliche länge (taps) bei verschiedenen frequenzen - schlecht zu programmieren
IIR : filter haben gleiche länge, da kaskadiert - dafür aber phasenverzerrungen (naja, hat ein analoger eq ja auch)
rocknix ///
-
alternativ kannst du dein signal natürlich auch mit einer filterbank "zerlegen" und die bänder einzeln gewichten. stichworte FIR/IIR filter
Für jemanden, der keine Ahnung von Fourier hat ist das Wohl leichter. Und ich hab ihm doch ne Filterfunktion gegeben.
-
Ok, danke! Mein FFT funktioniert jetzt, genauso die Wave-ein- und -ausgabe...
Das Problem ist jetzt nur noch das von euch erwähnte "knacksen" zwischen zwei blöcken. kannst du zufällig kurz erklären, wie das "windowing" funktioniert? ist das sehr kompliziert... ?
-
Hui, ich bin zwar c++-DAU, aber was windowing ist, weiß ich.
Du nimmst ja einen Ausschnitt aus Deiner Wave-Datei, um die FFT zu machen. Dummerweise überlagerst Du damit automatisch Deinem Signal ein Rechteck-Signal, was sich massiv in der FFT niederschlägt. Die FFT eines Rechtecks ist sin(x)/x, auch si(x) genannt. Das macht Dir Deine schöne FFT kaputt. Abhilfe schafft es dann, Dein Signal im Zeitbereich vor der FFT zu "fenstern". Fensterfunktionen sind Funktionen, die an den Rändern sanft auslaufen, so daß Dein Signal nicht plötzlich aufhört. Man kann natürlich nicht jede Funktion, die diese Vorgabe erfüllt nehmen, da dies natürlich ebenfalls Einfluß auf die FFT hat. Es gibt da verschiedene Ansätze, die als Fensterfunktion tauglich sind, such mal mit Google nach folgenden Begriffen:
Hanning
Hamming
BlackmanDie Herren haben taugliche Fensterfunktionen entwickelt.
Matze
-
ok, danke
mal gucken, wann ich mal wieder zu viel zeit habe und daran weiterbastel
-
Vor allem habt Ihr übersehen, daß auf meiner Seite dazu eine schöne PDF-Datei steht:
http://marcus.baeckmann.de/DFT.pdf
Fourier-Analyse war und ist neben C++ nämlich mein weiteres Steckenpferd.
Da finden sich auch einige Bilder zum Windowing.
[ Dieser Beitrag wurde am 23.11.2002 um 13:05 Uhr von Marc++us editiert. ]
-
Ich muss hier mal diesen alten thread wieder aufleben lassen.
Ich hab mir gerade Marc++us' Arbeit vorgenommen und finde da mal so schnell eine Frage.
Hab nämlich so allgemein das Problem, dass ich bei Integralformeln (die ich schon seit 4 Jahren nicht mehr gebraucht hab) ne Weile brauche..
ich versuch das mal per Hand nachzustellen:(allgemeine (Auslenkung ( eulersche Konstante hoch |Was ist j?| Auslenkung der Welle mal 2 PI * frequenz * Zeit einer zum Zeitpunkt Teilfrequenz) t) unendlich / -j*2*pi*f*t X(f) = | x(t) * e dt (t ist der veränderliche wert) / -unendlich
ist doch so weit korrekt, oder hab ich schon zu lange nicht mehr mit Integralen gerechnet?
Was ist nun aber j?bei den periodischen Funktionen wird das Ganze dann noch blöder. hierkommt ein m dazu, welches ich nicht deuten kann (und noch einiges anderes, mit dem ich aber klar komme)
Kann mir da mal jemand helfen?
cYa
DjR
-
Das "j" ist die wurzel aus -1 für Etechniker
. Mathematiker sagen auch "i" dazu (Pfui). Hättest du dafür nicht nen neuen Thread aufmachen können anstatt nen uralten auszubuddeln ?
-
Und e^j*x ist laut Euler identisch mit cos(x) + j * sin(x).
-
*grml* ich hab die komplexen Zahlen seit der 11. Klasse verdrängt.. nun muss ich mir des alles noch mal neu anlesen....
Naja, drei Jahre Ausbildung zum fachinformatiker haben meinen Keks schon völlig aufgeweicht. Wird Zeit, mal wieder was fürs Hirn zu machen..