Verfasst am: 09.04.2013, 15:19
Titel: Frequenzanalyse eines Wav-Files
Hallo!
Ich habe ein kleines Problem:
Ich möchte ein .wav-File (10 Sekunden lang) mit Hilfe einer Fourier-Analyse untersuche. Prinzipiell habe ich das auch hinbekommen:
Mit wavread die Datei importieren und dann eine Analyse machen, dann bekomme ich die Frequenzen des wav-files angezeigt. Allerdings möchte ich nun folgendes machen:
Ich will den ZEITLICHEN- Verlauf des wav-Files untersuchen, damit ich erkenne welche Frequenzen wann auftauchen bzw. verschwinden. Ich hatte mir das so vorgestellt, dass immer nur ein kleiner Teilausschnitt (ca. 0,1 Sekunden) aus dem Signal herauspicke und jeweils dieses Stück einer Fourieranalyse unterziehe. Danach wird der nächste Abschnitt untersucht. Das ganze wird in Echtzeit in eine Diagramm geplottet. Leider funktioniert das nicht, da zum einen meine Wav-Files immer eine etwas andere Länge haben und ich zum anderen nicht weiß wie ich dieses abschnittsweise analysieren nicht hinbekomme.
Du brauchst dazu aber die Signal Processing Toolbox. In älteren Matlabversionen heißt die Funktion specgram. Das Spektrogramm stellt eine Abhängigkeit der Frequenzen zur Zeit dar, was durch Aufteilen des Signals in kleinere Segmente passiert. Je nach dem wie man Segmentlänge und den Overlap wählt, kann man die Auflösung von Frequenz- und Zeitachse in dem Diagramm steuern.
bex
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 09.04.2013, 16:50
Titel:
ok danke. mal ne blöde Frage: wie finde ich denn raus ob ich diese Tool-Box habe? Hab Matlab hier an einem Uni-Rechner und kein plan was da installiert ist^^
angenommen ich habe diese Tool-Box nicht, was mach ich dann?
ahh danke! ich hab die toolbox werde ich mich morgen mal damit beschäftigen
bex
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 09.04.2013, 20:21
Titel:
ähm... ich hab mit der Funktion jetzt ein buntes Bild bei dem die Zeit an der y-Achse aufgetragen und die Frequenz auf der x-achse. leider ohne Einheit... kann mir jemand sagen wie ich das Diagramm interpretieren soll?
Nach der Beschreibung ist das tatsächlich genau was ich brauche... nur bin ich mir in Anbetracht des Bildes nicht so sicher^^
wobei, y(:,1) den Zugriff auf den ersten der beiden Kanäle beschreibt.
Das Diagramm, das darauf erscheint, hat auf der y-Achse die Zeit von 0 - 4.5 * 10^4 angegben... aber ohne Einheit. Das passt ja irgendwie nicht mit der Länge des wav-Files zusammen. Auf der x-Achse ist eine Frequenz von 0 - 1 als "Normalized Frequency (x PI rad/sample)"... damit kann ich so gar nix anfangen. Und die Colorbar läuft von -10 bis -150 allerdings auch ohne jede Angabe was sich dahinter verbirgt...
Um das genauer erklären zu können, müsstest du mal Anzahl Messwerte von y und auch FS angeben.
Die Frequenzachse zeigt dir die normierte Frequenzan w/wn in rad/s wobei wn = ws/2 ist. Die Amplitude wird hier wohl in dB angegeben. 0 dB = 1,
-20 dB = 0.1 bei Lestungssignalen.
Sonst versuch mal folgendes, in dem du das Bild
Code:
[y, Fs] = wavread('C:\Users\username\Desktop\sinus.wav');
N = length(y(:,1)); % Anzahlmesswerte
% FFT Segmentlänge und Fensterlänge % kleine Sgementlänge nfft -> feinere Frequenz- aber schlechte % Zeitauflösung
nfft = N/8; % Segmentlänge (8 ist glaube ich der Standardwert bei spectrogram) % Overlap = window_size/2
numoverlap = nfft/2; % Anzahl der Messwerte, die sich zwei benachbarte Segmente überlappen
Die Erklärungen in der Matlab-Hilfe sind da nicht richtig zu gebrauche, da mir wohl das Hintergrundwissen fehlt.
Die Anzahl der Messwerte hängt ja von der Länge meiner Datei ab, meine Samplingrate liegt bei 44100 1/s, damit kann man sich die Anzahl der Punkte ja ausrechnen.
Bei den Grundlagen kann ich dir ohne gezielte Fragen nicht helfen. Ich habe dir mal ein kleines Testprogramm geschrieben (ich habe ja deine Daten nicht). Evtl. wird dir hier der Zusammenhang des Spektrogramms aus der Darstellung im Zeitbereich und des Betragsspektrums im Frequenzbereich klar.
Code:
% Testsignal aus Matlab load('mtlb');
y = mtlb(1:2048);
N = length(y); % Anzahlmesswerte
subplot(2,2,[13]) % FFT Segmentlänge und Fensterlänge % kleine Sgementlänge nfft -> feinere Frequenz- aber schlechte % Zeitauflösung
nfft = N/8; % Segmentlänge (8 ist glaube ich der Standardwert bei spectrogram) % Overlap = window_size/2
numoverlap = nfft/4; % Anzahl der Messwerte, die sich zwei benachbarte Segmente überlappen % alte Matlab Funktion % [S,F,T]=specgram(y,nfft,Fs,nfft,numoverlap); % neue Matlab Funktion [S,F,T]=spectrogram(y,nfft,numoverlap,nfft,Fs);
Ich hoffe das funktioniert so, denn ich kann es mit der spectrogram Version nicht testen, da ich bei meinem Matlab hier nur die alte specgram Funktion nutzen kann. Das Ergebnis sollte aber bei beiden Funktionen gleich sein. Lediglich die Übergabeparameter sind in einer anderen Reihenfolge.
bex
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 10.04.2013, 19:28
Titel:
danke, das ist sehr nett von dir!
leider sagt mein matlab, dass unter %Skalierung das nfft undefiniert ist...
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.