2013-01-15 6 views
5

Ich arbeite an einem Projekt, bei dem ich die Änderungen der Tonhöhe/Frequenz im Zeitverlauf mit einer Wave-Datei betrachte (ich bin neu in MATLAB, aber nicht zur Programmierung) . Ich kann die Zeit-Amplituden-Kurve und die Frequenz-Amplitude-Kurve (nach einer FFT-Kurve) sehen, aber wie könnte ich die Frequenz isolieren und zu jedem Zeitpunkt anzeigen?MATLAB - Zeit-Frequenz-Diagramm der .wav-Datei

Code:

filename = '/Users/Username/Sample_1.wav' 

[y, fs] = wavread(filename); 
y = y(:,1); 
dt = 1/fs; 
t = 0:dt:(length(y)*dt)-dt; 
plot(t,y); xlabel('Seconds'); ylabel('Amplitude'); 

transformed = fft(y); 
mag = abs(transformed); 
plot(mag); 
+2

Sie sagen "Wie könnte ich die Frequenz isolieren und zu jedem Zeitpunkt anzeigen?" Es gibt einige gute Antworten darauf, soweit es geht, aber es ist wichtig zu erkennen, dass es keine momentane Frequenz in dem Sinne gibt, wie du es willst. Mit anderen Worten, es gibt keinen Häufigkeitswert, der jedem Zeitpunkt einmalig entspricht (oder zumindest können Sie diese Information nicht aus den Zeitbereichsdaten ableiten. Wenn Sie könnten, würden Sie die Heisenberg-Unschärferelation verletzen) . –

Antwort

7

Wenn Sie das Signal Processing Toolbox haben, dann können Sie die spectrogram Funktion nützlich finden.

Wenn Sie dies nicht tun, können Sie denselben Effekt manuell erreichen, indem Sie FFTs aufeinanderfolgender (möglicherweise überlappter) gefensterter Segmente Ihrer Zeitbereichsdaten berechnen und dann die Amplituden plotten.

Dies ist im Wesentlichen die short-time Fourier transform (STFT).

+0

Hinzufügen ... was Sie (das OP) zu tun versuchen fällt in den Bereich der Zeit-Frequenz-Analyse. Wenn Sie daran interessiert sind, gibt es eine Menge Artikel über Techniken wie die Kurzzeit-Fourier-Transformation (was die MATLAB-Spektrogramm-Funktion verwendet) usw. Es ist ein lustiges Thema! – notthetup

+0

Danke für Ihre Hilfe! Ich war eigentlich auf der Suche nach etwas mehr im Sinne eines Liniendiagramms, aber ich denke, dass ich lernen kann, Spektrogramme zu lesen. – airplaneman19

+0

@ airplaneman19: Ich bin froh, dass ich helfen konnte. Aber nehmen Sie Björns Kommentar oben zur Kenntnis. –