2017-08-31 76 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); 

我希望这有助于!

相关问题