这个逻辑如何产生高通和低通滤波器?

时间:2015-05-18 02:49:05

标签: matlab filter signals

我正在研究信号和系统项目,我已经在互联网上的音频信号的高通和低通滤波器上遇到了这个代码。现在我已经测试了这段代码并且它可以工作,但我真的不明白它是如何进行低/高通行动的。 逻辑是通过使用audioread或wavread函数将声音读入MATLAB,并将音频存储为nx2矩阵。 n取决于采样率,2列是由2个sterio通道决定的。 现在这里是低通的代码;

[hootie,fs]=wavread('hootie.wav'); % loads Hootie
out=hootie;

for n=2:length(hootie)

out(n,1)=.9*out(n-1,1)+hootie(n,1); % left
out(n,2)=.9*out(n-1,2)+hootie(n,2); % right

end

这是高通;

out=hootie;

for n=2:length(hootie)

out(n,1)=hootie(n,1)-hootie(n-1,1); % left
out(n,2)=hootie(n,2)-hootie(n-1,2); % right

end

我真的想知道这是如何产生过滤效果的,因为这对我来说没有任何意义,但它有效。这些过滤器也不应该有任何截止点吗?

1 个答案:

答案 0 :(得分:1)

可以使用pole-zero plot粗略估算滤波器的频率响应。如何工作可以在互联网上找到,例如在this link中。滤波器可以是例如所谓的有限脉冲响应(FIR)滤波器,或无限脉冲响应(IIR)滤波器。 FIR滤波器属性仅由输入信号(无反馈,开环)确定,而IIR滤波器使用先前的信号输出来控制电流信号输出(反馈环路或闭环)。一般方程式可以写成,

a_0*y(n)+a_1*y(n-1)+... = b_0*x(n)+ b_1*x(n-1)+...

应用离散傅立叶变换,您可以使用以下事实定义过滤器H(z) = X(z)/Y(Z),以便可以定义过滤器H(z),以便Y(Z)=H(Z)*X(Z)。请注意,我在此处跳过了很多步骤,将此文本缩小到适当的长度。

讨论的重点是这些离散极点可以映射在零极点图中。数字滤波器的零极点绘制图中的极点和零点,其中相对于采样频率的归一化频率由单位圆表示,其中fs/2位于180度(例如,频率{ {1}}将被定义为极坐标(r,phi)=(1,pi / 4))。然后,“零”是指数多项式fs/8,极点由分母多项式A(z)定义。接近零的频率将在该频率处具有衰减。相反,接近极点的频率将在该频率处具有高放大率。此外,远离极点的频率衰减,远离零点的频率被放大。

对于你的高通滤波器,你有一个多项式,

B(z)
每个频道

。这被转换,并且可以创建一个过滤器,

y(n)=x(n)-x(n-1),

对于低通滤波器,等式看起来像这样,

H(z) = 1 - z^(-1)

成为过滤器

y(n) - y(n-1) = x(n),

将这些滤波器放置在零极点图中,您将在正x轴上的高通滤波器中得到零。这意味着您将在低频时具有高衰减,在高频时具有高放大率。低通滤波器中的极点也将位于正x轴上,从而放大低频并衰减高频。

此说明最适用于图片,因此我建议您关注我的链接。祝你好运,如果有什么不清楚,请评论一下。