FIR数字滤波器设计 下载本文

b为函数返回的滤波器系数,长度为n+1,且具有偶对称关系:

b(k)=-b(n+2-k), k=1,2,…,n+1 b=firls(n,f,a,w)则使用权系数w给误差加权。

b=firls(n,f,a,w,’ftype’)调用形式中,参数’ftype’用于指定所设计的滤波器类型,ftype=Hilbert,为奇对称的线性相位滤波器,返回的滤波器系数满足b(k)=-b(n+2-k), k=1,2,…,n+1;ftype=differentiator,则采用特殊加权技术,生成奇对称的线性相位滤波器,使低频段误差大大小于高频段误差。

(2)函数remez的基本调用格式为 b=remez(n,f,a) 其中各项意义同函数firls所述。

设计实例:分别使用函数firls和remez函数设计20阶带通滤波器,阻带频率为ws1=0.3*?,ws2=0.7*?,通带频率为wp1=0.4*?,wp2=0.6*?,并画出幅频特性曲线。

1.程序如下所示: f=[0 0.3 0.4 0.6 0.7 1]; m=[0 0 1 1 0 0]; n=20;

b=firls(n,f,m); %firls函数设计FIR数字滤波器 [h,w]=freqz(b);

bb=remez(n,f,m); %remez函数设计FIR数字滤波器 [hh,w]=freqz(bb);

axes('position',[0.2 0.2 0.5 0.5]); plot(w/pi,abs(h),'b:',w/pi,abs(hh),'r-'); xlabel('frequency'); ylabel('magnitude'); grid on;

实验的幅频特性曲线如下:

18

1.41.21magnitude0.80.60.40.2000.10.20.30.40.50.6frequency0.70.80.91

2.用Simulink仿真对用firls函数设计的带通滤波器进行滤波: 仿真模块如下:

输入信号:s(t)=sin(20πt)+sin(50πt)+sin(90πt)

数字滤波器参数设置:已知滤波器的阶数n=20。本例中,首先在Filter Type中选择bandpass;在Design Method选项中选择FIR least-squares;指定Filter Order项中的Specify order为20;采样频率Fs=100Hz,Fstop1=15HZ,Fpass1=20HZ,

19

Fpass2=30HZ,Fstop2=35HZ。设置完以后点击窗口下方的Design Filter,在窗口上方就会看到所设计滤波器的幅频响应曲线。。设计界面如下图所示:

信号源参数设置:三个信号源的频率分别是10Hz、25Hz、45Hz :

运行仿真,得波形如下图所示:

20

(1)10HZ信号波形 (2) 25HZ信号波形 (3)45HZ信号波形

(4) 滤波前波形 (5) 滤波后波形

由以上波形可知,10Hz、25Hz、45Hz叠加后通过通频带为20Hz~30Hz的FIR带通滤波器,输出与25Hz信号相似,低频和高频部分被阻隔。

21