我該如何改變光譜圖的顏色,以顯示更接近紫色和更低強度接近紅色?Matlab光譜圖,黃油和過濾器功能問題
如何申請黃油和過濾功能的wav文件顯示:
- 的4500hz
- 3000赫茲的中央fecruency和帶寬1000赫茲 的帶阻低通切割frecuency
然後在光譜中顯示這個濾波信號。
我該如何改變光譜圖的顏色,以顯示更接近紫色和更低強度接近紅色?Matlab光譜圖,黃油和過濾器功能問題
如何申請黃油和過濾功能的wav文件顯示:
然後在光譜中顯示這個濾波信號。
以下Matlab代碼應該做你想做的。過濾器設計的參數被定義爲變量,可以通過更改來調整過濾器。 如果您想要分割地塊,只需在spectrogram
之前擦除subplot(3,1,x)
並放入figure
即可。然後你會有三個獨立的地塊。
要使用您的.wav
文件,請刪除加載示例數據的行並使用audioread
命令取消註釋行。
load('speech_dft.mat'); % sample Matlab data
%[y,fs] = audioread(hfile); % read wav-file
% Define a custom colormap
cmap = [0.4160 0.0350 0.0350;
0.5620 0.0260 0.0260;
0.7080 0.0180 0.0180;
0.7810 0.0130 0.0130;
0.9270 0.0040 0.0040;
1.0000 0 0;
1.0000 0.1410 0;
1.0000 0.2120 0;
1.0000 0.3530 0;
1.0000 0.3880 0;
1.0000 0.5290 0;
1.0000 0.5650 0;
0.9790 0.5480 0.1120;
0.9570 0.4950 0.2240;
0.9250 0.4170 0.3920;
0.9040 0.3650 0.5040;
0.8710 0.2860 0.6710;
0.8130 0.2040 0.8160;
0.7860 0.2010 0.7930;
0.7060 0.1910 0.7240;
0.5990 0.1770 0.6320;
0.4390 0.1570 0.4940];
% Define nfft, window and noverlap
nfft = 256;
window = hanning(nfft);
noverlap = round(nfft/2);
% Display the spectrogram of the unfiltered signal
figure;
subplot(3,1,1);
spectrogram(y,window,noverlap,nfft,fs,'yaxis');
colormap(cmap);
title('Unfiltered signal');
% Design and apply the lowpass filter
order = 4;
fg = 4500;
[b,a] = butter(order,fg/fs/2,'low'); % design filter
x1 = filter(b,a,y); % apply filter
% Display the spectrogram of the lowpass filtered signal
subplot(3,1,2);
spectrogram(x1,window,noverlap,nfft,fs,'yaxis');
colormap(cmap);
title('Lowpass filter');
% Design and apply the bandpass filter
order = 10;
lowfreq = 2000;
hifreq = 4000;
[b,a] = butter(order,[lowfreq,hifreq]/(fs/2), 'bandpass'); % design filter
x2 = filter(b,a,y); % apply filter
% Display the spectrogram of the bandpass filtered signal
subplot(3,1,3);
spectrogram(x2,window,noverlap,nfft,fs,'yaxis');
colormap(cmap);
title('Bandpass filter');
這將產生以下結果:
好,我想給的東西在評論部分討論一個更好的例子。希望這個對你有幫助。基本上有一個嘈雜的正弦信號。我製作一張光譜圖,然後過濾一些噪音,並製作另一張光譜圖以顯示過濾結果。
x = 0:0.001:4*pi;
y = sin(x);
y2 = wgn(1,length(x),0.5);
y3 = sin(314*x);
y4 = y+y3+y2;
figure(1)
plot(x,y4);
nfft = 2^nextpow2(length(y4));
[S,F,T,P] = spectrogram(y4,250,50,nfft,1000);
figure(2)
spectrogram(y4,250,50,nfft,1000);
%create filter and use it on the noisy signal
[b,a] = butter(4,0.5,'low');
y5 = filtfilt(b,a,y4);
figure(3)
spectrogram(y5,250,50,nfft,1000);
這裏有情節生成:
正如你所看到的頻譜呼叫使用了顏色的默認縮放,你可以通過圖形手柄改變顏色,如果你想知道怎麼做,我會問關於SO或谷歌的另一個問題。
請注意Matt在意見部分的建議,他們警告您需要確定如何過濾wav文件。
我想你可以得到譜圖的輸出,即[S,F,T,P]。您可以使用F和T(z軸爲零)製作自己的網格圖,然後指定在紅色和紫色之間的色彩圖。要顯示過濾器的效果,您只需過濾數據,然後再次調用譜圖並再次繪圖 – willpower2727
過濾器的代碼是什麼? –
簡單的過濾方法是使用butter()確定濾波器係數,然後使用函數filtfilt()過濾數據。對於更高級的濾波器,您可以查看DSP工具箱中的方法 – willpower2727