1
所以我已經寫在Matlab快速腳本做一些可視化我 -Specgram振幅過濾 - MATLAB R2008a
function spectro(filename,maxFreq)
wavchunksizefix(filename);
[y,fs] = wavread(filename);
subplot(2,1,1);
plot(y);
ylim([0 1]);
title('Signal Amplitude');
subplot(2,1,2);
specgram(y,1024,fs);
ylim([0 maxFreq]);
cb = colorbar;
set(get(cb,'title'),'string','dB');
title('Original Signal Spectrogram');
什麼我不知道是這個 - 怎麼做修改specgram()輸出,只顯示一個具體的dB範圍?現在它顯示了0到40 dB範圍內的一大堆不必要的噪聲,我只想看到0到-50 dB(不幸的是,由於我是新手,我無法發佈示例圖片)。
喲已經使用ylim,請嘗試zlim命令。如果這樣做不能達到你想要的,在繪圖之前從specgram(data = specgram(。。。))和手動提取數據 – learnvst
事實證明(直到現在我還沒有真正檢查過),來自Specgram()的輸出數據是一系列複數。由於我不完全明白他們爲什麼是複數,我必須先弄清楚。 – user1172075
這些值非常複雜,因爲頻譜圖爲您提供了每個時期每個頻點的振幅和相位分量。當您使用頻譜圖命令繪圖時,它相當於做衝浪(20 * log10(abs(spectrogram_output)))。 abs命令將實數/複數值對轉換爲一個數值,而對數項將其轉換爲數據庫比例。 – learnvst