实验四___数字滤波器设计及应用综合实验教材
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验四 数字滤波器设计及应用综合实验
班级:电子121班 姓名:李金恩 学号:122114 一、 实验目的
1.熟悉IIR 数字滤波器的设计原理及方法。 2.熟悉FIR 数字滤波器的设计原理及方法。 3. 掌握利用Matlab 实现数字滤波器的方法 4. 掌握利用数字滤波器进行信号处理的方法。
5. 了解基于Simulink 的动态仿真实现信号滤波的基本方法。
二、 实验内容及要求
综合运用数字滤波器设计的相关知识,根据给定设计方法要求,用脉冲响应不变法和双线性变换法设计IIR 数字滤波器;利用窗函数设计法设计FIR 数字滤波器。根据实际信号的频谱特性,分析、确定滤波器设计技术指标,实现对信号的滤波。
1.IIR 数字滤波器设计
(1)用脉冲响应不变法设计巴特沃斯数字滤波器。 (2)用双线性变换法设计切比雪夫数字滤波器。
(3)用双线性变换法设计巴特沃斯数字滤波器。并将直接型结构转换成级联型结构。
实验所需程序及函数
%butterworth 低通滤波器原型设计函数,要求Ws ﹥Wp ﹥0,As ﹥Rp ﹥0。 function [b,a]=afd_butt(Wp,Ws,Rp,As);
N=ceil((log10((10^(Rp/10)-1)/(10^(As/10)-1)))/(2*log10(Wp/Ws))); %上条语句为求滤波器阶数,函数ceil 朝正无穷大方向取整; fprintf('\n Butterworth Filter Order=%2.0f\n',N);
OmegaC=Wp/((10^(Rp/10)-1)^(1/(2*N))); %求对应于N 的3db 截止频率; [b,a]=u_buttap(N,OmegaC);
%非归一化Butterworth 模拟低通滤波器原形设计函数 %得到的b,a 分别为传输函数分子、分母多项式系数; function [b,a]=u_buttap(N,Omegac);
[z,p,k]=buttap(N); %归一化巴特沃思模拟低通滤波器原形 %传输函数用极点形式表示 ()((1))((2))...(())
k
H s s p s p s p n =
---
p=p*Omegac; %将c s s Ω=/代入上式,相当于分子乘以N
c Ω,极点乘以c Ω
k=k*Omegac^N;
B=real(poly(z)); %poly 为构造具有指定根的多项式 real 为求实部 b=k*B;
a=real(poly(p));
%利用脉冲响应不变法从模拟到数字滤波器变换函数 function [b,a]=imp_invr(c,d,T)
[R,p,k]=residue(c,d); %部分分式展开
p=exp(p*T); %从模拟到数字极点对应关系sT
e
z =,部分分式系数相同
[b,a]=residuez(R,p,k); %将部分分式的形式变换成多项式之比的形式 b=real(b'); %求出数字滤波器系数 a=real(a');
%非归一化切比雪夫I 型模拟低通滤波器原型设计 function [b,a]=u_chb1ap(N,Rp,Omegac)
[z,p,k]=cheb1ap(N,Rp); %归一化切比雪夫1型模拟低通滤波器原形 a=real(poly(p)); %以下步骤实际上与求巴特沃思滤波器的原理 aNn=a(N+1); %一样,只是所用方法稍有不同。 p=p*Omegac;
a=real(poly(p)); aNu=a(N+1); k=k*aNu/aNn; B=real(poly(z)); b=k*B;
%频率响应函数freqz 的修正,此函数可获得滤波器的幅值响应、相位响应及群延迟响应 function [db,mag,pha,w]=freqz_m(b,a);
[H,w]=freqz(b,a,1000,'whole'); %在0-2*pi 之间选取N 个点计算频率响应 H=(H(1:501))'; %频率响应 w=(w(1:501))'; %频率
mag=abs(H); %响应幅度 db=20*log10((mag+eps)/max(mag)); %增益 pha=angle(H); %相位
%变直接形式为级联形式 22,11,22,11,01111011...1...)(--------++++∏=++++++=z
A z A z
B z B b z a z a z b z b b z H k k k k k N N N
N function [b0,B,A]=dir2cas(b,a)
b0=b(1);b=b/b0;a0=a(1);a=a/a0;b0=b0/a0; %以上步骤求出系数0b M=length(b); N=length(a);
if N>M
b=[b zeros(1,N-M)]; elseif M>N
a=[a zeros(1,M-N)]; else NM=0; end
K=floor(N/2); B=zeros(K,3); A=zeros(K,3); if K*2==N
b=[b 0]; a=[a 0];
end
broots=cplxpair(roots(b)); %以下程序将每两个极点和两个零点组合成二阶因子 aroots=cplxpair(roots(a)); % roots :求多项式的根 for i=1:2:2*K
Brow=broots(i:1:i+1,:); Brow=real(poly(Brow)); B(fix(i+1)/2,:)=Brow; Arow=aroots(i:1:i+1,:);