怎么制作notch filter

2025-10-02 07:52:47

在信号处理中经常要把某些单频(窄带)干扰信号去除,例如求系统采集信号中的把工频信号滤除。实际上有一个很好的方法,便是使用陷波器。在附件中给出了陷波器的设计技术,并举了例子。

陷波器是无限冲击响应(IIR)数字滤波器,该滤波器可以用以下常系数线性差分方程表示:

      (1)

式中: x(n)和y(n)分别为输人和输出信号序列;和为滤波器系数。

对式(1)两边进行z变换,得到数字滤波器的传递函数为:

        (2)

式中:和分别为传递函数的零点和极点。

    由传递函数的零点和极点可以大致绘出频率响应图。在零点处,频率响应出现极小值;在极点处,频率响应出现极大值。因此可以根据所需频率响应配置零点和极点,然后反向设计带陷数字滤波器。考虑一种特殊情况,若零点在第1象限单位圆上,极点在单位圆内靠近零点的径向上。为了防止滤波器系数出现复数,必须在z平面第4象限对称位置配置相应的共轭零点、共轭极点。

这样零点、极点配置的滤波器称为单一频率陷波器,在频率ωo处出现凹陷。而把极点设置在零的的径向上距圆点的距离为l-μ处,陷波器的传递函数为:

    (3)

式(3)中μ越小,极点越靠近单位圆,则频率响应曲线凹陷越深,凹陷的宽度也越窄。当需要消除窄带干扰而不能对其他频率有衰减时,陷波器是一种去除窄带干扰的理想数字滤波器。

    当要对几个频率同时进行带陷滤波时,可以按(2)式把几个单独频率的带陷滤波器(3)式串接在一起。

工具/原料

Matlab

方法/步骤

怎具干扰信号的频率计算出角速度w=2π*f

怎么制作notch filter

求出零点和极点

怎么制作notch filter

求出频率相应方程H(w)

怎么制作notch filter

在Matlab里可以看到结果。参考的代码

clear all;

clc;

close all;

z1 = exp(j*0.2513);

z2 = exp(-j*0.2513);

z3 = exp(j*0.5027);

z4 = exp(-j*0.5027);

p1 = 0.999*exp(j*0.2513)

p2 = 0.999*exp(-j*0.2513);

p3 = 0.999*exp(j*0.5027)

p4 = 0.999*exp(-j*0.5027);

a = poly( [p1,p2,p3,p4] )

b = poly( [z1,z2,z3,z4] );

G = polyval(a,1) / polyval(b,1); 

b=b*G

fvtool(b,a)

w = linspace(-pi,pi,1000);

H=G.*((exp(-j*w)-z1).*(exp(-j*w)-z2).*(exp(-j*w)-z3).*(exp(-j*w)-z4))./...

  ((exp(-j*w)-p1).*(exp(-j*w)-p2).*(exp(-j*w)-p3).*(exp(-j*w)-p4));

figure

plot(w,abs(H)); 

grid;

title('Frequency Response')

xlabel('\omega')

ylabel('|H(\omega)|')

[x,fs]=wavread('xiaomifeng.wav')

y = filter(b,a,x)

figure

specgram([x;y],1000,5000)

sound(y,Fs)

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢