数字信号处理实验指导书(2015年用) (1)资料 下载本文

内容发布更新时间 : 2024/5/11 18:36:56星期一 下面是文章的全部内容请认真阅读。

实验四: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