2015-06-23 64 views
0
  1. 我該如何改變光譜圖的顏色,以顯示更接近紫色和更低強度接近紅色?Matlab光譜圖,黃油和過濾器功能問題

  2. 如何申請黃油和過濾功能的wav文件顯示:

    • 的4500hz
    • 3000赫茲的中央fecruency和帶寬1000赫茲
    • 的帶阻低通切割frecuency

然後在光譜中顯示這個濾波信號。

+0

我想你可以得到譜圖的輸出,即[S,F,T,P]。您可以使用F和T(z軸爲零)製作自己的網格圖,然後指定在紅色和紫色之間的色彩圖。要顯示過濾器的效果,您只需過濾數據,然後再次調用譜圖並再次繪圖 – willpower2727

+0

過濾器的代碼是什麼? –

+0

簡單的過濾方法是使用butter()確定濾波器係數,然後使用函數filtfilt()過濾數據。對於更高級的濾波器,您可以查看DSP工具箱中的方法 – willpower2727

回答

1

以下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'); 

這將產生以下結果:

Spectrograms

0

好,我想給的東西在評論部分討論一個更好的例子。希望這個對你有幫助。基本上有一個嘈雜的正弦信號。我製作一張光譜圖,然後過濾一些噪音,並製作另一張光譜圖以顯示過濾結果。

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); 

這裏有情節生成:

enter image description here

enter image description here

enter image description here

正如你所看到的頻譜呼叫使用了顏色的默認縮放,你可以通過圖形手柄改變顏色,如果你想知道怎麼做,我會問關於SO或谷歌的另一個問題。

請注意Matt在意見部分的建議,他們警告您需要確定如何過濾wav文件。