实验四 FIR数字滤波器的设计
一、实验目的
1)掌握MATLAB中设计FIR数字滤波器的常用函数,并编写简单程序。 2)熟悉用FDATool进行FIR滤波器设计与分析的方法。 二、实验原理
用 MATLAB 提供的函数,设计FIR数字滤波器 三、实验内容与要求 1.
用Kaiser窗设计一个FIR数字带阻滤波器,对模拟信号
xa(t) = cos (a t) + cos (b t) + cos (c t)
a = 2*pi *6500, b = 2*pi *7000, c = 2*pi *9000
滤波,要求滤去7000Hz 的频率成分。系统采样率为 fs = 32000 Hz 这同我们第二次实验。但采样点数应该比较大,可以用 N = 4096。
滤波器的 Rp = 0.25 dB, As = 50 dB, 过渡带宽可以用模拟频率(例如200Hz)也可以用数字频率指定。还可以改变As(比如30dB)观察滤波效果。 注意:
A) 如何从滤波器指标要求导出其它设计参数,如确定窗口类型、滤波器的阶数等; B) 如何验证设计得到的滤波器是否满足设计指标的语句; 试着直接用我们讲的MATLAB函数fir1()、fir2()进行设计
2. 利用FDATool设计一个如上要求的FIR滤波器,对比使用不同的方法设计的滤波器。 四、参考程序:
1、FIR1Demo1.m 用 fir1 函数设计高通滤波器例,各种窗口都试了一下; 2、FIR1Demo2.m 用 fir1 函数设计多通带滤波器例; 3、FIR2Demo3.m 用 fir2 函数设计多通带滤波器例;
4、FIRLsRemesDemo.m 用 firls 和 remez 函数设计例,fir2 也在这里做了对照。 1 和4项所列的文件注释详细些。
FIR1Demo1.m
% 用窗函数设计线性相位FIR滤波器 % 教科书讲到的 6 种窗都用一下 % 本例未涉及如何确定滤波器的设计参数
- 9 -
figNo = 1; % 显示用窗口号,接连用了3个 n = 48 % 滤波器阶数 Wn = 0.35; % 截止频率
beta = 0.1102*(60 - 8.7); % Kaiser 窗参数,假设阻带要求60分贝衰减(p.253) % 生成窗口矩阵,各窗函数看教科书 pp.243-53 % 先创建一个空矩阵,然后再把各窗函数列向量加进去 Windows = [];
Windows = [Windows, rectwin(n+1)]; Windows = [Windows, bartlett(n+1)]; Windows = [Windows, blackman(n+1)]; Windows = [Windows, hann(n+1)]; Windows = [Windows, hamming(n+1)]; Windows = [Windows, kaiser(n+1, beta)];
% 接下来用一个循环完成用各窗口函数设计的滤波器 % 并得到相应的传输函数向量,按列放在矩阵 Hs 中 % 在这个循环中,win 依次取矩阵 Windows 的各列 Hs = [];
for win = Windows
b = fir1 (n, Wn, 'high', win); % 把 high 参数去掉就是低通滤波器 [h, w] = freqz(b,1); Hs = [Hs, h]; end
% 现在用3种尺度来显示, 请观察对比各窗口 figure (figNo)
freqzplot (Hs, w, 'linear') figure (figNo+1) freqzplot (Hs, w, 'squared') figure (figNo+2)
freqzplot (Hs, w)