怎么制作notch filter
在信号处理中经常要把某些单频(窄带)干扰信号去除,例如求系统采集信号中的把工频信号滤除。实际上有一个很好的方法,便是使用陷波器。在附件中给出了陷波器的设计技术,并举了例子。
陷波器是无限冲击响应(IIR)数字滤波器,该滤波器可以用以下常系数线性差分方程表示:
(1)
式中: x(n)和y(n)分别为输人和输出信号序列;和为滤波器系数。
对式(1)两边进行z变换,得到数字滤波器的传递函数为:
(2)
式中:和分别为传递函数的零点和极点。
由传递函数的零点和极点可以大致绘出频率响应图。在零点处,频率响应出现极小值;在极点处,频率响应出现极大值。因此可以根据所需频率响应配置零点和极点,然后反向设计带陷数字滤波器。考虑一种特殊情况,若零点在第1象限单位圆上,极点在单位圆内靠近零点的径向上。为了防止滤波器系数出现复数,必须在z平面第4象限对称位置配置相应的共轭零点、共轭极点。
这样零点、极点配置的滤波器称为单一频率陷波器,在频率ωo处出现凹陷。而把极点设置在零的的径向上距圆点的距离为l-μ处,陷波器的传递函数为:
(3)
式(3)中μ越小,极点越靠近单位圆,则频率响应曲线凹陷越深,凹陷的宽度也越窄。当需要消除窄带干扰而不能对其他频率有衰减时,陷波器是一种去除窄带干扰的理想数字滤波器。
当要对几个频率同时进行带陷滤波时,可以按(2)式把几个单独频率的带陷滤波器(3)式串接在一起。
工具/原料
Matlab
方法/步骤
怎具干扰信号的频率计算出角速度w=2π*f
求出零点和极点
求出频率相应方程H(w)
在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)