2013-01-15 21 views
5

Bir dalga dosyası ile zaman içinde aralık/frekanstaki değişimlere bakmayı içeren bir proje üzerinde çalışıyorum (MATLAB için yeni, ancak programlamada değilim) . Zaman-genlik grafiğini ve frekans genliğini (bir FFT'den sonra) görebiliyorum, fakat frekansı izole edip her noktayı zaman içinde nasıl gösterebilirim?MATLAB - .wav dosyasının zaman-frekans grafiği grafiği

Kod: Eğer Sinyal İşleme Toolbox varsa

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

"Frekansı nasıl izole edip, her noktada gösterebilirim?" Buraya kadar bazı iyi yanıtlar var, ama istediğiniz anlamda anlık frekans diye bir şey olmadığını fark etmek önemlidir. Diğer bir deyişle, zaman içindeki her bir noktaya benzersiz bir şekilde karşılık gelen bir frekans değeri yoktur (ya da en azından, zaman-alan bilgisinden bu bilgiyi elde edemezsiniz. Eğer yapabilseydiniz, Heisenberg belirsizlik ilkesini ihlal etmiş olursunuz). . –

cevap

7

, o zaman spectrogram işlev yararlı bulabilirsiniz.

Yapmıyorsanız, zaman etki alanı verilerinizin ardışık (muhtemelen çakışan) pencereli bölümlerinin FFT'lerini hesaplayarak ve ardından amplitüdleri çizerek aynı etkiyi elle elde edebilirsiniz.

Bu temelde short-time Fourier transform (STFT).

+0

Eklemek için .. Ne zaman (OP) Time-Frekans Analizi alanında düşme yapmaya çalışıyoruz. Eğer ilgileniyorsanız, Kısa Dönem Fourier Dönüşümü (MATLAB 'spektrogramının işlevi ne kullanır?) Gibi tekniklerin kullanımı üzerine yazılmış çok sayıda makale var. Bu eğlenceli bir konu! – notthetup

+0

Yardımlarınız için teşekkürler! Aslında bir çizgi grafik çizgisinde daha çok şey arıyordum, ama bence bu bilgiyi okuyabiliyorum. – airplaneman19

+0

@ airplaneman19: Yardım edebildiğime sevindim. Ama yukarıda Bjorn'un yorumuna dikkat et. –