Es ist wahrscheinlich eine recht triviale Verständnisfrage, aber das bereitet mir etwas Kopfzerbrechen. - Ich nehme in MatLab eine viersekündige Mikrofonaufnahme (normale Sprache) auf mit einer Samplerate von 44,1kHz. - Diese wird als wave-Datei gespeichert und dann wieder eingelesen. - Vor der FFT liegen somit 176400 Samples vor. - Diese teile ich in eine Framegröße von 441 Samples ein. - Das ganze noch mit einem Hammingfenster multipliziert und dann in eine 512-FFT eingelesen. - Daraus erhalte ich 512 komplexe Werte, wobei ich nur die ersten 257 Werte benutze und aus denen die Amplituden und Phasen berechne. (Nicht wundern wegen den vielleicht komischen Werten, das ist so gewollt.) Nun möchte ich das Amplitudenspektrum darstellen. Das funktioniert nun (übrigends für alle Frames) problemlos. Kopfzerbrechen bereitet mir nun die Einteilung der Frequenzachse. Die scheint nicht richtig zu sein, da bei einem normalen Satz (männlich) sehr viele Werte um 10kHz liegen. Wie genau berechne ich die Abstände dieser Frequenzwerte im Amplitudenspektrum? Bisher verwende ich als Frequenzbereich beim plot: 0:44100/512:44100/2 (diese Bereich wird in einem Array freq gespeichert) Der Hauptanteil liegt dann bei 10kHz. Problem ist auch, dass die Anzahl der Frequenzwerte den Anzahl der FFT entsprechen muss. plot(freq,amp) (amp enthält die 256 Amplitudenwerte) Wie krieg ich den Frequenzbereich so hin, dass er passt?
Bei einer komplexen 512er-FFT steckst du 512 komplexe Werte rein und 512 komplexe kommen raus. Du schreibst nicht, ob du den img-Teil des Eingangssignals auf 0 setzt oder links und rechts als komplexen Wert reinsteckst. Ist aber egal, bei beiden Varianten kommt etwas raus, was du wahrscheinlich nicht erwartest, nämlich die Aufteilung der Ergebniskoeffizienten in positive (0-255) und negative Frequenzen (511-256) und das "vermischt" für beide Eingangskanäle. Beide Bereiche können aber zwangsläufig nur von 0 bis fs/2 gehen. D.h. Koeffizient 1 und 511 liegen auf 22050/256=~86Hz usw. Wenn du nur einen Monokanal verarbeiten willst, solltest du eine FFT mit nicht komplexen Eingangsdaten suchen (kenn mich jetzt mit Matlab nicht aus, wirds aber wohl auch da geben :) ). Bei Stereo kann man die komplexe FFT schon auch nutzen, allerdings muss man die Ergebniskoeffizienten noch nachbearbeiten, um tatsächlich getrennte Spektren für L+R zu bekommen. Hint: Steck mal einen synthetischen Sinus bzw. Cosinus mit 172.xxxHz auf einem Kanal in die FFT und schau das Spektrum an... Dann sollte der Zusammenhang klar werden, ist nur + und -...
Danke für die Hinweise. Es hat sich herausgestellt, dass meine ursprünglichen Annahmen korrekt waren. Ich hab deinen Tipp befolgt und tatsächlich mit Testsignalen getestet. Das Spektrum war korrekt skaliert und beinhaltete die richtigen Frequenzen. Man sollte sich eben nicht dazu verleiten lassen solche Dinge mit menschlicher Sprache zu testen. Die enthält mehr Frequenzanteile als man denken mag. ;)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.