2017-08-31 65 views
0

我已創建使用的命令用800赫茲中心頻率的峯化濾波器如下:如何使用在Matlab上使用設計函數生成的過濾器?

fs = 44100; 
N = 6; F0 = 800/(fs/2); BW = 50/(fs/2); 
peakspec = fdesign.peak('N,F0,BW',N,F0,BW); 
peakfilt = design(peakspec,'SystemObject', true); 

% Input signal 
x = 2*cos(2*pi*(80).*(0.01:0.0001:10))+3*cos(2*pi*(100).*(0.01:0.0001:10)); 
% Getting the filtered output 
y = filter(peakfilt, x); 

最後一行給出了錯誤:沒有足夠的輸入參數。

我不明白爲什麼我會得到這個錯誤。

我在網站上查了一下,發現peakfilt是一個BiquadFilter,如果有人能解釋如何使用BiquadFilter會很有幫助。

謝謝。

+0

嘗試使用fvtool(peakfilt) –

+0

您正在創建一個Biquad濾鏡。閱讀文檔[鏈接](https://de.mathworks.com/help/dsp/ref/dsp.biquadfilter-class.html),告訴你以如下方式應用它:'y = peakfilt(x); ' – Irreducible

回答

0

你非常接近,沒有其他的東西需要改變才能使它工作。

% Getting the filtered output 
y = filter(peakfilt, x); 

在您嘗試使用filter function應用定製雙二階濾波器,最後一行的濾波器()功能需要,如文檔中描述的3個輸入(最小):

y = filter(b,a,x) 

其中b & a是您的兩個濾波器係數陣列,x是您要過濾的輸入信號。

在你的情況,你試圖通過peakfilt系統對象作爲輸入過濾器()然後將它扔回來錯誤沒有足夠的輸入參數因爲其預期3個輸入最小和其中2個是濾波器係數。

biquad filter documentation濾波輸入需要一個稍微不同的方法:

filteredOutput = biquad(input); 

而在你的情況下將最後一行以下應該解決這個問題:

y = peakfilt(x); 

要那麼看到頻率你的過濾器的反應看看fvtool(filterObject);(與雙二階濾波器文檔文件),你的情況:

fvtool(peakfilt); 

我希望這有助於!

相關問題