实验四:FIR数字滤波器设计与软件实现
1.实验目的
(1)掌握用窗函数法设计FIR数字滤波器的原理和方法。 (2)学会调用MATLAB函数设计FIR滤波器。
(3)通过观察频谱的相位特性曲线,建立线性相位概念。 (4)掌握FIR数字滤波器的MATLAB软件实现方法。 2.实验原理
设计FIR数字滤波器一般采用直接法,如窗函数法和频率采样法。本实验采用窗函数法设计FIR滤波器,要求能根据滤波需求确定滤波器指标参数,并按设计原理编程设计符合要求的FIR数字滤波器。本实验软件实现是调用MATLAB提供的fftfilt函数对给定输入信号x(n)进行滤波,得到滤波后的输出信号y(n)。
3. 实验内容及步骤
(1) FIR数字滤波器设计 根据窗函数法设计FIR数字滤波器的原理和步骤,设计一个线性数字低通滤波器,要求通带临界频率fp=120Hz,阻带临界频率fs=150Hz,通带内的最大衰减Ap=0.1dB,阻带内的最小衰减As=60db,采样频率Fs=1000Hz。观察设计的滤波器频率特性曲线,建立线性相位概念。 (2) FIR数字滤波器软件实现 利用第(1)步设计的数字滤波器,调用fftfilt函数对信号进行滤波,观察滤波前后的信号波形变化。 4.思考题
(1)简述窗函数法设计FIR数字滤波器的设计步骤。 (2)简述信号在传输过程中失真的可能原因。 5.实验报告要求
(1)结合实验内容打印程序清单和信号波形。 (2)对实验结果进行简单分析和解释。 (3)简要回答思考题。 6.附加题
测出设计的FIR数字滤波器的As值,检验是否符合要求,然后根据测出的的As值算出Ap值并与测到的Ap值进行比较看是不是相等,并检验Ap值是否符合要求。如果不符合该怎样处理。
常用窗函数技术参数及性能比较一览表
窗类型 最小阻带衰减 主瓣宽度 精确过渡带宽 矩形窗 21dB 4π/M 1.8π/M 三角窗 25dB 8π/M 6.1π/M 汉宁窗 44dB 8π/M 6.2π/M 哈明窗 53dB 8π/M 6.6π/M 布莱克曼窗 74dB 12π/M 11π/M 取凯塞窗时用kaiserord函数来得到长度M和β
窗函数 boxcar bartlett hanning hamming blackman kaiser 9
实验程序文本
%(1)IIR数字滤波器设计
clear;clc;close all;format compact
%利用双线性变换法设计一个LowpassButterworth滤波器
%技术指标 fp=3400Hz, Ap=2dB, fs=5000Hz, As=20dB,Fs=22050Hz fp=3400, Ap=2, fs=5000, As=20 ,Fs=22050, %输入模拟技术指标 wp=2*pi*fp/Fs,ws=2*pi*fs/Fs ,%将模拟技术指标转化为数字指标
%利用双线性变换法设计,设T=2,将数字指标转化为模拟原型技术指标 T=2,FS=1/T,
Wp=tan(wp/2), Ws=tan(ws/2),
N=ceil( log10( (10 .^ (0.1*As) - 1)./(10 .^ (0.1*Ap) - 1) ) /... (2*log10(Ws/Wp)) ),
Wcp = Wp / ( (10^(.1*Ap) - 1)^(1/(2*N))), Wcs = Ws / ( (10^(.1*As) - 1)^(1/(2*N))),
Wc=Wcs,%可取Wcp-Wcs之间任意值,MATLAB取的是Wcs
[bp,ap]=butter(N,1,'s'),%获取归一化低通原型,参见P157
[bs,as] = lp2lp(bp,ap,Wc), %将归一化低通原型转换为模拟低通原型 [bz,az] = bilinear (bs,as,FS),%将模拟低通原型转换为数字低通
sys=tf(bz,az,1/Fs), % 给出传输函数H(z)
freqz(bz,az,512,Fs), % 验证技术指标(5000Hz精确满足)
%(2)IIR数字滤波器软件实现
clear;clc;close all;format compact
%指标Fp=3400Hz, Ap=2dB, Fs=5000Hz, As=20dB,Fs=22050Hz %利用第一步设计的LowpassButterworth滤波器技术指标
bz =[ 0.0047 0.0280 0.0700 0.0933 0.0700 0.0280 0.0047], az =[ 1.0000 -1.9161 2.1559 -1.3866 0.5585 -0.1257 0.0125], n=[0:199];% 显示200个数据
xn=sin((2*pi*3400/22050)*n)+sin((2*pi*5000/22050)*n); yn=filter(bz,az,xn); % 实现数字滤波
%subplot(2,1,1);stem(xn,'.'); % 绘制滤波前信号 subplot(2,1,1);plot(xn); % 绘制滤波前信号包络 title('滤波前信号'); % 加标题
%subplot(2,1,2);stem(yn,'.'); % 绘制滤波后信号 subplot(2,1,2);plot(yn); % 绘制滤波后信号包络 title('滤波后信号'); % 加标题
%(1)FIR数字滤波器设计
clear;clc;close all;format compact
%利用窗函数法设计一个线性相位低通滤波器
%技术指标fp=120Hz, Ap=0.1dB, fs=150Hz, As=60dB,Fs=1000Hz fp=120, Ap=0.1, fs=150, As=60 ,Fs=1000, %输入模拟技术指标 wp=2*pi*fp/Fs,ws=2*pi*fs/Fs ,%将模拟技术指标转化为数字指标 %选择窗函数的类型(As=60选布莱克曼窗)并估计窗口长度M Bt=ws-wp; M=ceil(11*pi/Bt);
if mod(M,2)==0; N=M+1, else N=M, end; %选用第一类滤波器 wc=(wp+ws)/2, %转折频率一般取通带频率和阻带频率的中点
10
n=0:N-1;r=(N-1)/2; %用于计算理想低通单位脉冲响应中数据 hdn=sin(wc*((n-r)+eps))./(pi*((n-r)+eps)); %参见教材P202 win=blackman(N); hn=hdn.*win',%用布莱克曼窗加窗 figure(1);
freqz(hn,1,512,Fs);grid on;% 绘制结果并加网络
%(2)FIR数字滤波器软件实现(和第一步程序在一个文件里面) n=[0:190];
xn=sin((2*pi*120/1000)*n)+sin((2*pi*150/1000)*n); yn=fftfilt(hn,xn); % 实现数字滤波 figure(2)
%subplot(2,1,1);stem(xn,'.'); % 绘制滤波前信号 subplot(2,1,1);plot(xn); % 绘制滤波前信号包络 title('滤波前信号'); % 加标题
%subplot(2,1,2);stem(yn,'.'); % 绘制滤波后信号 subplot(2,1,2);plot(yn); % 绘制滤波后信号包络 title('滤波后信号'); % 加标题
11