数字滤波器matlab的程序
使用MATLAB进行数字滤波器设计的步骤与方法

使用MATLAB进行数字滤波器设计的步骤与方法数字滤波器是用于信号处理的重要工具,它可以对信号进行去噪、频率调整等操作。
而MATLAB作为一种强大的数学计算软件,提供了丰富的数字信号处理工具箱,可以方便地进行数字滤波器的设计与仿真。
本文将介绍使用MATLAB进行数字滤波器设计的步骤与方法。
1. 了解数字滤波器的基本原理在进行数字滤波器设计之前,首先需要了解数字滤波器的基本原理。
数字滤波器根据其频率响应特性可以分为低通、高通、带通和带阻滤波器等。
此外,数字滤波器的设计还需要考虑滤波器的阶数、截止频率以及滤波器类型等因素。
在设计中,我们可以选择滤波器的类型和相应的参考模型,然后利用MATLAB工具箱提供的函数进行设计。
2. 导入MATLAB中的数字信号处理工具箱使用MATLAB进行数字滤波器设计需要先导入数字信号处理工具箱。
通过在MATLAB命令窗口输入`>> toolbox`即可打开工具箱窗口,并可以选择数字信号处理工具箱进行加载。
加载完成后,就可以调用其中的函数进行数字滤波器设计。
3. 设计数字滤波器在MATLAB中,常用的数字滤波器设计函数有`fir1`、`fir2`、`iirnotch`等。
这些函数可以根据系统特性需求设计相应的数字滤波器。
以FIR滤波器为例,可以使用`fir1`函数进行设计。
该函数需要输入滤波器的阶数和截止频率等参数,输出设计好的滤波器系数。
4. 评估滤波器性能设计好数字滤波器后,需要进行性能评估。
可以使用MATLAB提供的`fvtool`函数绘制滤波器的幅频响应、相频响应和群延迟等。
通过观察滤波器在频域的性能表现,可以判断设计的滤波器是否满足要求。
5. 对滤波器进行仿真在对滤波器性能进行评估之后,还可以使用MATLAB进行滤波器的仿真。
通过将需要滤波的信号输入设计好的滤波器中,观察输出信号的变化,可以验证滤波器的去噪效果和频率调整能力。
MATLAB提供了函数`filter`用于对信号进行滤波处理。
用MATLAB设计FIR数字滤波器

实验八 用MATLAB 设计FIR 数字滤波器(二)一、实验目旳:1、加深对窗函数法设计FIR 数字滤波器旳基本原理旳理解。
2、学习用MATLAB 语言旳窗函数法编写设计FIR 数字滤波器旳程序。
3、理解MATLAB 语言有关窗函数法设计FIR 数字滤波器旳常用函数用法。
二、实验原理:1、用窗函数法设计FIR 数字滤波器 FIR 数字滤波器旳系统函数为N-1-n n=0H(z)=h(n)z ∑这个公式也可以当作是离散LSI 系统旳系统函数M-m -1-2-mmm=0012m N -1-2-k-k12k k k=1bz b +b z +b z ++b z Y(z)b(z)H(z)====X(z)a(z)1+a z +a z ++a z1+a z ∑∑ 分母a 0为1,其他a k 全都为0时旳一种特例。
由于极点所有集中在零点,稳定和线性相位特性是FIR 滤波器旳突出长处,因此在实际中广泛使用。
FIR 滤波器旳设计任务是选择有限长度旳h(n),使传播函数H(e j ω)满足技术规定。
重要设计措施有窗函数法、频率采样法和切比雪夫等波纹逼近法等。
本实验重要简介窗函数法。
用窗函数法设计FIR 数字滤波器旳基本环节如下:(1)根据过渡带和阻带衰减指标选择窗函数旳类型,估算滤波器旳阶数N 。
(2)由数字滤波器旳抱负频率响应H(e j ω)求出其单位脉冲响应h d (n)。
可用自定义函数ideal_lp实现抱负数字低通滤波器单位脉冲响应旳求解。
程序清单如下:function hd=ideal_lp(wc,N) %点0到N-1之间旳抱负脉冲响应%wc=截止频率(弧度)%N=抱负滤波器旳长度tao=(N-1)/2;n=[0:(N-1)];m=n-tao+eps; %加一种小数以避免0作除数hd=sin(wc*m)./(pi*m);其他选频滤波器可以由低通频响特性合成。
如一种通带在ωc1~ωc2之间旳带通滤波器在给定N值旳条件下,可以用下列程序实现:Hd=ideal_lp(wc2,N)-ideal_lp(wc1,N)(3)计算数字滤波器旳单位冲激响应h(n)=w(n)h d(n)。
fir滤波器稀疏算法matlab

一、概述FIR滤波器是一种数字滤波器,它以有限长度的脉冲响应作为基础,因此成为有限长度脉冲响应(FIR)滤波器。
使用FIR滤波器可以实现对数字信号的滤波处理,包括低通滤波、高通滤波、带通滤波和带阻滤波等各种滤波处理。
而在FIR滤波器中,滤波器的系数是非常关键的部分,合适的系数设计能够得到理想的滤波效果。
二、FIR滤波器的系数设计FIR滤波器的系数设计是指确定FIR滤波器中各个系数的数值。
一般来说,常见的系数设计方法有窗函数法、最小最大逼近法、频率抽样法等。
其中,最小最大逼近法是一种用于确定FIR滤波器系数的常见方法,通过该方法可以得到满足一定指标的最优滤波器系数。
三、FIR滤波器的稀疏算法在FIR滤波器的系数设计过程中,稀疏算法是一种重要的设计手段。
稀疏算法是指通过对信号进行稀疏表示,将信号表示为一组系数较少的基函数的线性组合,从而得到信号的稀疏表示形式。
在FIR滤波器中,采用稀疏算法可以有效减少滤波器的计算复杂度和存储开销,提高滤波器的运行效率和性能。
四、MATLAB中的FIR滤波器稀疏算法实现1. MATLAB是一种常用的科学计算软件,它提供了丰富的工具箱和函数,可以方便地实现FIR滤波器的设计和算法实现。
2. 在MATLAB中,可以使用信号处理工具箱中的相关函数或自定义函数,实现FIR滤波器的系数设计和稀疏算法的实现。
具体可以采用最小最大逼近法等常见方法,或者调用相关工具箱中的稀疏算法函数,进行FIR滤波器设计和实现。
3. 通过MATLAB的FIR滤波器设计和稀疏算法实现,可以快速、准确地得到满足指定要求的滤波器系数,以及高效、稀疏的滤波器算法实现。
五、结论FIR滤波器的稀疏算法在MATLAB中有着广泛的应用前景,它能够有效提高FIR滤波器的设计效率和性能,为数字信号的滤波处理提供了重要的技术支持。
今后,在FIR滤波器设计和算法实现中,可以进一步探索和优化稀疏算法在MATLAB中的应用,推动数字信号处理技术的发展和进步。
数字滤波器的设计及其MATLAB实现

设计低通数字滤波器,要求在通带内频率低于0.2pirad时,允许幅度误差在1dB以内,在频率0.3pi rad~pi rad之间的阻带衰减大于15dB,用脉冲响应不变法设计数字滤波器,T=1: 切比雪夫I型模拟滤波器的设计子程序:function [b,a]=afd_chb1(Omegap,Omegar,Ar)if Omegap<=0error('通带边缘必须大于0')endif(Dt<=0)|(Ar<0)error('通带波动或阻带衰减必须大于0');endep=sqrt(10^(Dt/10)-1);A=10^(Ar/20);OmegaC=Omegap;OmegaR=Omegar/Omegap;g=sqrt(A*A-1)/ep;N=ceil(log10(g+sqrt(g*g-1))/log10(OmegaR+sqrt(OmegaR*OmegaR-1)));fprintf('\n***切比雪夫I型模拟低通滤波器阶数=%2.0f\n',N);[b,a]=u_chblap(N,Dt,OmegaC);设计非归一化切比雪夫I型模拟低通滤波器原型程序:function [b,a]=u_chblap(N,Dt,OmegaC)[z,p,k]=cheb1ap(N,Dt);a=real(poly(p));aNn=a(N+1);p=p*OmegaC;a=real(poly(p));aNu=a(N+1);k=k*aNu/aNn;b0=k;B=real(poly(z));b=k*B;直接形式转换成级联形式子程序:function [C,B,A]=sdir2cas(b,a)Na=length(a)-1;Nb=length(b)-1;b0=b(1);b=b/b0;a0=a(1);a=a/a0;C=b0/a0;p=cplxpair(roots(a));K=floor(Na/2);if K*2==NaA=zeros(K,3);for n=1:2:NaArow=p(n:1:n+1,:);Arow=poly(Arow);A((fix(n+1)/2),:)=real(Arow);elseif Na==1A=[0 real(poly(p))];elseA=zeros(K+1,3);for n=1:2:2*KArow=p(n:1:n+1,:);Arow=poly(Arow);A((fix(n+1)/2),:)=real(Arow);endA(K+1,:)=[0 real(poly(p(Na)))];endz=cplxpair(roots(b));K=floor(Nb/2);if Nb==0B=[0 0 poly(z)];elseif K*2==NbB=zeros(K,3);for n=1:2:NbBrow=z(n:1:n+1,:);Brow=poly(Brow);B((fix(n+1)/2),:)=real(Brow);endelseif Nb==1B=[0 real(poly(z))];elseB=zeros(K+1,3);for n=1:2:2*KBrow=z(n:1:n+1,:);Brow=poly(Brow);B((fix(n+1)/2),:)=real(Brow);endB(K+1,:)=[0 real(poly(z(Nb)))];End计算系统函数的幅度响应和相位响应子程序:function [db,mag,pha,w]=freqs_m(b,a,wmax)w1=0:500;w=w1*wmax/500;h=freqs(b,a,w);mag=abs(h);db=20*log10((mag+eps)/max(mag));pha=angle(h);脉冲响应不变法程序:function [b,a]=imp_invr(c,d,T)[R,p,k]=residue(c,d);p=exp(p*T);[b,a]=residuez(R,p,k);b=real(b).*T;数字滤波器响应子程序:function [db,mag,pha,grd,w]=freqz_m(b,a);[H,w]=freqz(b,a,1000,'whole');H=(H(1:501))';w=(w(1:501))';mag=abs(H);db=20*log10((mag+eps)/max(mag));pha=angle(H);grd=grpdelay(b,a,w);直接转换成并联型子程序:function [C,B,A]=dir2par(b,a)M=length(b);N=length(a);[r1,p1,C]=residuez(b,a);p=cplxpair(p1,10000000*eps);x=cplxcomp(p1,p);r=r1(x);K=floor(N/2);B=zeros(K,2);A=zeros(K,3);if K*2==Nfor i=1:2:N-2br=r(i:1:i+1,:);ar=p(i:1:i+1,:);[br,ar]=residuez(br,ar,[]);B((fix(i+1)/2),:)real(br');A((fix(i+1)/2),:)real(ar');end[br,ar]=residuez(r(N-1),p(N-1),[]);B(K,:)=[real(br') 0];A(K,:)=[real(ar') 0];elsefor i=1:2:N-1br=r(i:1:i+1,:);ar=p(i:1:i+1,:);[br,ar]=residuez(br,ar,[]);B((fix(i+1)/2),:)real(br);A((fix(i+1)/2),:)real(ar);endEnd比较两个含同样标量元素但(可能)有不同下标的复数对及其相位留数向量子程序:function I=cplxcomp(p1,p2)I=[];for i=1:length(p2)for j=1:length(p1)if(abs(p1(j)-p2(i))<0.0001)I=[I,j];endendendI=I';双线性变换巴特沃斯低通滤波器设计:巴特沃思模拟滤波器的设计子程序:function [b,a]=afd_butt(wp,ws,Rp,rs)if wp<=0error('通带边缘必须大于0');endif ws<=wperror('阻带边缘必须大于通带边缘');endif(Rp<=0)|(Rs<0)error('通带波动或阻带衰减必须大于0');endN=ceil((log10((10^(Rp/10)-1)/(10^(Rs/10)-1)))/(2*log10(wp/ws))); fprintf('\n***Butterworth Filter Order=%2.0f\n',N);OmegaC=wp/((10^(Rp/10)-1)^(1/(2*N)));[b,a]=u_buttap(N,OmegaC)设计非归一化巴特沃思模拟低通滤波器原型子程序:function [b,a]=u_buttap(N,OmegaC)[z,p,k]=buttap(N);p=p*OmegaC;k=k*OmegaC^N;B=real(poly(z));b0=k;b=k*B;a=real(poly(p));直接型到级联型形式的转换:function [b0,B,A]=dir2cas(b,a)b0=b(1);b=b/b0;a0=a(1);a=a/a0;b0=b0/a0;M=length(b);N=length(a);if N>Mb=[b,zeros(1,N-M)];a=[a,zeros(1,M-N)];elseNM=0;endk=floor(N/2);B=zeros(k,3);A=zeros(k,3);if k*2==Nb=[b,0];a=[a,0];endbroots=cplxpair(roots(b));aroots=cplxpair(roots(a));for i=1:2:2*kbr=broots(i:1:i+1,:);br=real(polt(br));B((fix(i+1)/2),:)=br;ar=aroots(i:1:i+1,:);ar=real(polt(ar));A((fix(i+1)/2),:)=ar;Endfunction [db,mag,pha,grd,w]=freqz_m(b,a)[h,w]=freqz(b,a,1000,'whole');h=(h(1:501))';w=(w(1:501))';mag=abs(h);db=20*log10((mag+eps)/max(mag));pha=angle(h);grd=grdelay(b,a,w);设计一个巴特沃思高通滤波器,要求通带截止频率为0.6pi,通带内衰减不大于1dB,阻带·起始频率为0.4pi,阻带内衰减不小于15dB,T=1:>> wp=0.6*pi;ws=0.4*pi;>> Rp=1;Rs=15;T=1;>> [N,wn]=buttord(wp/pi,ws/pi,Rp,Rs) 计算巴特沃思滤波器阶数和截止频率N =4wn =>> [b,a]=butter(N,wn,'high'); 频率变换法计算巴特沃思高通滤波器>> [C,B,A]=dir2cas(b,a)C =0.0751B =1.0000 -2.0000 1.00001.0000 -2.0000 1.0000A =1.0000 0.1562 0.44881.0000 0.1124 0.0425>> [db,mag,pha,grd,w]=freqz_m(b,a);>> subplot(2,1,1);plot(w/pi,mag);>> subplot(2,1,2);plot(w/pi,db);椭圆带通滤波器的设计--ellip函数的应用:>> ws=[0.3*pi 0.75*pi]; 数字阻带边缘频率>> wp=[0.4*pi 0.6*pi]; 数字通带边缘频率>> Rp=1;Rs=40;>> Ripple=10^(-Rp/20); 通带波动>> Attn=10^(-Rs/20); 阻带衰减>> [N,wn]=ellipord(wp/pi,ws/pi,Rp,Rs) 计算椭圆滤波器参数N =4wn =0.4000 0.6000>> [b,a]=ellip(N,Rp,Rs,wn); 数字椭圆滤波器的设计>> [b0,B,A]=dir2cas(b,a) 级联形式实现b0 =0.0197B =1.0000 1.5066 1.00001.0000 0.9268 1.00001.0000 -0.9268 1.00001.0000 -1.5066 1.0000A =1.0000 0.5963 0.93991.0000 0.2774 0.79291.0000 -0.2774 0.79291.0000 -0.5963 0.9399>> figure(1);>> [db,mag,pha,grd,w]=freqz_m(b,a);>> subplot(2,2,1);plot(w/pi,mag);>> grid on;>> subplot(2,2,3);plot(w/pi,db);grid on;>> subplot(2,2,2);plot(w/pi,pha/pi);grid on;>> subplot(2,2,4);plot(w/pi,grd);设计一个巴特沃思带阻滤波器,要求通带上下截止频率为0.8pi、0.2pi,通带内衰减不大于1dB,阻带上起始频率为0.7pi、0.4pi,阻带内衰减不小于30dB:>> wp=[0.2*pi 0.8*pi];>> ws=[0.4*pi 0.7*pi];>> Rp=1;Rs=30;>> [N,wn]=buttord(wp/pi,ws/pi,Rp,Rs);>> [b,a]=butter(N,wn,'stop');>> [C,B,A]=dir2cas(b,a)C =0.0394B =1.0000 0.3559 0.99941.0000 0.3547 1.00401.0000 0.3522 0.99541.0000 0.3499 1.00461.0000 0.3475 0.99601.0000 0.3463 1.0006A =1.0000 1.3568 0.79281.0000 1.0330 0.46331.0000 0.6180 0.17751.0000 -0.2493 0.11131.0000 -0.6617 0.37551.0000 -0.9782 0.7446>> [db,mag,pha,grd,w]=freqz_m(b,a); >> subplot(2,1,1);plot(w/pi,mag);>> subplot(2,1,2);plot(w/pi);数字低通---数字带阻:function [bz,az]=zmapping(bZ,aZ,Nz,Dz) bzord=(length(bZ)-1)*(length(Nz)-1); azord=(length(aZ)-1)*(length(Dz)-1);bz=zeros(1,bzord+1);for k=0:bzordpln=[1];for i=0:k-1pln=conv(pln,Nz);endpld=[1];for i=0:bzord-k-1pld=conv(pld,Dz);endbz=bz+bZ(k+1)*conv(pln,pld); endfor k=0:azordpln=[1];for i=0:k-1pln=conv(pln,Nz);endpld=[1];for i=0:azord-k-1pld=conv(pld,Dz);endaz=az+aZ(k+1)*conv(pln,pld); endall=az(1);az=az/az1;bz=bz/az1;线性相位FIR滤波器的幅度特性:function pzkplot(num,den)hold on;axis('square');x=-1:0.01:1;y=(1-x.^2).^0.5;y1=-(1-x.^2).^0.5;plot(x,y,'b',x,y1,'b');num1=length(num);den1=length(den);if(num1>1)z=roots(num);elsez=0;endif(den1>1)p=roots(den);elsep=0;endif(num>1&den1>1)r_max_z=max(abs(real(z)));i_max_z=max(abs(imag(z)));a_max_z=max(r_max_z,i_max_z);r_max_p=max(abs(real(p)));i_max_p=max(abs(imag(p)));a_max_p=max(r_max_p,i_max_p);a_max=max(a_max_z,a_max_p);elseif (num1>1)r_max_z=max(abs(real(z)));i_max_z=max(abs(imag(z)));a_max=max(r_max_z,i_max_z);elser_max_p=max(abs(real(p)));i_max_p=max(abs(imag(p)));a_max=max(r_max_p,i_max_p);endaxis([-a_max a_max -a_max a_max]);plot([-a_max a_max],[0 0],'b');plot([0 0],[-a_max a_max],'b');plot([-a_max a_max],[a_max a_max],'b');plot([a_max a_max],[-a_max a_max],'b');Lz=length(z);for i=1:Lz;plot(real(z(i)),imag(z(i)),'bo');endLp=length(p);for j=1:Lpplot(real(p(j)),imag(p(j)),'bx');endtitle('The zeros-pole plot');xlabel('虚部');ylabel('实部');function [Hr,w,a,L]=Hr_Type1(h)M=length(h);L=(M-1)/2;a=[h(L+1) 2*h(L:-1:1)];n=[0:1:L];w=[0:1:500]'*pi/500;Hr=cos(w*n)*a';设计I型线性相位FIR滤波器:>> h=[-4 1 -1 -2 5 6 5 -2 -1 1 -4];>> M=length(h);n=0:M-1;>> [Hr,w,a,L]=Hr_Type1(h);>> amax=max(a)+1;>> amin=min(a)-1;>> subplot(2,2,1);stem(n,h);>> axis([-1 2*L+1 amin amax]);text(2*L+1.5,amin,'n'); >> xlabel('n');ylabel('h(n)');title('脉冲响应');>> subplot(2,2,3);stem(0:L,a);>> axis([-1 2*L+1 amin amax]);>> xlabel('n');ylabel('a(n)');title('a(n) 系数');>> subplot(2,2,2);plot(w/pi,Hr);>> grid on;text(1.05,-20,'频率pi');>> xlabel('频率');ylabel('Hr');title('I 型振幅响应');>> subplot(2,2,4);pzkplot(h,1);>> title('零极点分布');function [hr,w,b,L]=Hr_Type2(h)M=length(h);L=M/2;b=2*h(L:-1:1);n=[1:1:L];n=n-0.5;w=[0:1:500]'*pi/500;hr=cos(w*n)*b';II型线性相位FIR滤波器:>> h=[-4 1 -1 -2 5 6 5 -2 -1 1 -4];>> M=length(h);n=0:M-1;>> [Hr,w,b,L]=Hr_Type2(h);Warning: Integer operands are required for colon operator when used as index. > In Hr_Type2 at 2>> bmax=max(b)+1;bmin=min(b)-1;>> subplot(2,2,1);stem(n,h);axis([-1 2*L+1 bmin bmax]);text(2*L+1.5,bmin,'n');xlabel('n');ylabel('h(n)');title('脉冲响应');>> subplot(2,2,3);stem(1:L,b);axis([-1 2*L+1 bmin bmax]);xlabel('n');ylabel('b(n)');title('b(n) 系数');>> subplot(2,2,2);plot(w/pi,Hr);grid on;text(1.05,-20,'频率pi');xlabel('频率');ylabel('Hr');title('II 型振幅响应');>> subplot(2,2,4);pzkplot(h,1);title('零极点分布');function [hr,w,c,L]=Hr_Type3(h)M=length(h);L=(M-1)/2;b=2*h(L+1:-1:1);n=[1:1:L];w=[0:1:500]'*pi/500;hr=cos(w*n)*c';用MA TLAB编程绘制各种窗函数的形状。
matlab频率采样法设计fir滤波器

matlab频率采样法设计fir滤波器频率采样法是一种常用的数字滤波器设计方法,可以用于设计FIR (有限脉冲响应)滤波器。
本文将介绍频率采样法的基本原理、设计步骤和实例应用。
我们来了解一下频率采样法的基本原理。
频率采样法的思想是将模拟滤波器的频率响应与数字滤波器的频率响应进行匹配。
具体地说,我们通过对模拟滤波器的单位样值响应进行频率采样,得到离散的样值序列。
然后,通过对这些样值进行离散傅里叶变换(DFT),得到数字滤波器的频率响应。
最后,根据所需的滤波器规格和设计要求,对数字滤波器的频率响应进行优化,得到滤波器的系数。
接下来,我们来介绍频率采样法的设计步骤。
首先,确定所需的滤波器规格,包括截止频率、通带衰减和阻带衰减等。
然后,选择合适的采样频率,通常要大于等于滤波器的最高频率分量的两倍。
接下来,根据所需的滤波器类型(如低通、高通、带通或带阻),选择相应的模拟滤波器原型。
然后,通过对模拟滤波器的单位样值响应进行频率采样,得到离散的样值序列。
再然后,对这些样值进行DFT,得到数字滤波器的频率响应。
最后,根据设计要求和优化准则,对数字滤波器的频率响应进行优化,得到滤波器的系数。
下面,我们以一个具体的实例来说明频率采样法的应用。
假设我们需要设计一个低通滤波器,截止频率为1kHz,通带衰减为0.5dB,阻带衰减为40dB。
我们选择采样频率为10kHz,并选择巴特沃斯滤波器作为模拟滤波器原型。
首先,我们根据通带衰减和阻带衰减的要求,确定模拟滤波器的阶数和截止频率。
然后,通过对模拟滤波器的单位样值响应进行频率采样,得到离散的样值序列。
接下来,对这些样值进行DFT,得到数字滤波器的频率响应。
最后,根据设计要求和优化准则,对数字滤波器的频率响应进行优化,得到滤波器的系数。
通过这些系数,我们可以实现一个满足要求的低通滤波器。
总结一下,频率采样法是一种常用的数字滤波器设计方法,可以用于设计各种类型的FIR滤波器。
通过对模拟滤波器的单位样值响应进行频率采样,得到离散的样值序列,然后通过DFT得到数字滤波器的频率响应,最后根据设计要求和优化准则对频率响应进行优化,得到滤波器的系数。
IIR数字滤波器的MATLAB实现

第6章 IIR 数字滤波器的MATLAB 实现6.1 实验目的● 要求掌握IIR 数字滤波器的设计原理、设计方法和设计步骤; ● 能根据给定的滤波器指标进行滤波器设计;● 掌握数字巴特沃斯滤波器、数字切比雪夫滤波器的设计原理和步骤;6.2 实验原理及实例分析6.2.1 IIR 数字滤波器的传递函数及特点设IIR 滤波器的输入序列为x(n),则IIR 滤波器的输入序列x(n)与输出序列y(n)之间的关系可以用下面的方程式表示:)()()(1j n x a i n x b n y Nj j M i i -+-=∑∑==其中,j a 和i b 是滤波器的系数,其中j a 中至少有一个非零。
与之相对应的差分方程为:NN M M z a z a z b z b b z X z Y Z H ------++==....1....)()()(11110由传递函数可以发现无限常单位冲激响应滤波器有如下特点: (1) 单位冲激响应h(n)是无限长的。
(2) 系统传递函数H(z)在有限z 平面上有极点存在。
(3) 结构上存在着输出到输入的反馈,也就是结构上是递归型的。
6.2.2 IIR 数字滤波器的设计与实现IIR 数字滤波器的设计有多种方法,如频率变换法、数字域直接设计以及计算辅助设计等。
下面只介绍频率变换设计法。
首先考虑由模拟低通滤波器到数字低通滤波器的转换,其基本的设计过程如下:(1) 将数字滤波器的技术指标转换为模拟滤波器的技术指标; (2) 设计模拟滤波器G(S);(3) 将G(S)转换成数字滤波器H(Z);在低通滤波器的设计基础上,可以得到数字高通、带通、带阻滤波器的设计流程如下:(1)给定数字滤波器的设计要求(高通、带阻、带通);(2)转换为模拟(高通、带阻、带通)滤波器的技术指标;(3)转换为模拟低通滤波器的指标;(4)设计得到满足第三步要求的低通滤波器传递函数;(5)通过频率转换得到模拟(高通、带阻、带通)滤波器;(6)变换为数字(高通、带阻、带通)滤波器。
利用MATLAB实现数字低通滤波器的设计

西南石油大学实验报告一实验目的:1学习用Matlab直接设计模拟滤波器和数字滤波器。
2学习用冲激响应不变法和双线性变换法的Matlab的实现。
二实验内容:设计满足下列指标的数字低通滤波器:Wp=0.2*pi, Rp=1db Ws=0.5*pi Rs=20db Fs=1khz1.利用B、C1型设计出模拟低通滤波器,采用冲激响应不变法、双线性发转换成数字低通滤波器。
2.直接设计出B、C1型数字低通滤波器。
三实验步骤:程序1Wp=2*pi*0.1*1000;Ws=2*pi*0.25*1000;Rp=1;Rs=20;[N,Wn]=buttord(Wp,Ws,Rp,Rs,'s');[z,p,k]=buttap(N);[B,A]=butter(N,Wn,'s');freq1=linspace(0,Wp,5);freq2=linspace(Wp,Ws,15);freq3=linspace(Ws,10*pi*2,25);h1=20*log10(abs(freqs(B,A,freq1)));h2=20*log10(abs(freqs(B,A,freq2)));h3=20*log10(abs(freqs(B,A,freq3)));plot([freq1 freq2 freq3]/(2*pi),[h1,h2,h3]);grid;Xlabel('Frequency in Hz');Ylabel('gain in DB');图一程序2wp=0.2*pi;ws=0.5*pi;rp=1;rs=20;fs=1000;omegap=wp*fs;omegas=ws*fs;[N,Wn]=buttord(omegap,omegas,rp,rs,'s');[B A]=butter(N,Wn,'s');[b,a]=impinvar(B,A,fs);[h,w]=freqz(b,a,256);h=20*log10(abs(h));plot(w/pi,h);图二程序3wp=0.2*pi;ws=0.5*pi;rp=1;rs=20;fs=1000;omegap=2*fs*tan(wp/2);omegas=2*fs*tan(ws/2);[N,Wn]=cheb1ord(omegap,omegas,rp,rs,'s');[B A]=cheby1(N,rp,Wn,'s');[b,a]=bilinear(B,A,fs);[h,w]=freqz(b,a,256);h=20*log10(abs(h));plot(w/pi,h);图三程序4wp=0.2*pi;ws=0.5*pi;rp=1;rs=20;[N,Wn]=buttord(wp/pi,ws/pi,rp,rs);[B A]=butter(N,Wn);[h,w]=freqz(B,A,256);h=20*log10(abs(h));plot(w/pi,h);图四程序5Wp=0.2*pi;Ws=0.5*pi;Rp=1;Rs=20;T=0.001;Fs=1000;omegap=(2/T)*tan(Wp/2);omegas=(2/T)*tan(Ws/2);[N,Wn]=cheb1ord(omegap,omegas,Rp,Rs,'s'); [B,A]=cheby1(N,Rp,Wn,'s');[b,a]=bilinear(B,A,Fs);[h,w]=freqz(b,a,256);h1=20*log10(abs(h));plot(w/pi,h1);grid;xlabel('Digital Frequency in pi units'); ylabel('Gain in DB');axis([0 1 -50 10]);图五Wp=0.2;Ws=0.5;Rp=1;Rs=20;disp('ÇбÈÑ©·òIÐÍ')[N,Wn]=cheb1ord(Wp,Ws,Rp,Rs)[B,A]=cheby1(N,Rp,Wn);disp('ÇбÈÑ©·òÐÍ·Ö×Ó¶àÏîʽ');fprintf('%.4e\n',B);disp('ÇбÈÑ©·ò·Öĸ¶àÏîʽ');fprintf('%.4e\n',A);w=linspace(0,0.8*pi,50);h1=20*log10(abs(freqz(B,A,w)));plot(w/pi,h1);grid;xlabel('Normalized frequency');ylabel('Gain in DB ');axis([0 0.8 -50 1]);图六四、实验小结通过本次实验,对MA TLAB软件有了进一步的了解,也在不断的实践中,更多的熟悉了MATLAB的编程,在编程方面一点点的有了进步。
实验6数字滤波器的matlab设计

实验6数字滤波器的matlab设计实验6:数字滤波器的matlab设计一、实验目的:1 掌握低通、高通,带通,带阻滤波器的概念2 掌握使用matlab进行进行滤波器的设计二、实验原理数字滤波器是通过一定运算关系,改变输入信号频谱的利用计算机技术实现的软或硬件。
选频数字滤波器设计过程一般可以归纳为以下三个步骤:(1)按照实际需要性能要求确定滤波器技术指标。
(2)用一个因果稳定的系统函数IIR、FIR去逼近这个要求(3)用一个有限精度的运算(软、硬件)去实现这个传递函数实验工具介绍fdatool的介绍fdatool(filter design & analysis tool)是matlab信号处理工具箱里专用的滤波器设计分析工具,matlab6.0以上的版本还专门增加了滤波器设计工具箱(filter design toolbox)。
fdatool可以设计几乎所有的基本的常规滤波器,包括fir和iir的各种设计方法。
它操作简单,方便灵活。
fdatool界面总共分两大部分,一部分是design filter,在界面的下半部,用来设置滤波器的设计参数,另一部分则是特性区,在界面的上半部分,用来显示滤波器的各种特性。
design filter部分主要分为:filter type(滤波器类型)选项,包括lowpass(低通)、highpass(高通)、bandpass (带通)、bandstop(带阻)和特殊的fir滤波器。
design method(设计方法)选项,包括iir滤波器的butterworth(巴特沃思)法、chebyshev type i(切比雪夫i型)法、chebyshev type ii(切比雪夫ii型)法、elliptic(椭圆滤波器)法和fir滤波器的equiripple法、least-squares(最小乘方)法、window (窗函数)法。
filter order(滤波器阶数)选项,定义滤波器的阶数,包括specify order(指定阶数)和minimum order(最小阶数)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数字滤波器matlab的源代码
function lvbo(Ua,Ub,choise)
%参考指令:lvbo(2*pi,10*pi,1/0/-1)
U1=min(Ua,Ub);
U2=max(Ua,Ub);
Us=16*U2;
T=2*pi/Us;
T_sum=4*max(2*pi/Ua,2*pi/Ub);
sum=T_sum/T;
t=T:T:T_sum;
x=sin(U1*t)+0.8*sin(U2*t);
X=DFT(x);
figure(1); subplot(221)
U=Us/sum:Us/sum:Us;
stem(U,abs(X));grid on
axis([Us/sum,Us/2,0,1.2*max(abs(X))])
title('原模拟信号采样频谱图')
Ucd=U1+(U2-U1)*1/5;Usd=U2-(U2-U1)*1/5;
switch choise
case 1
Hz_ejw=IIR_DF_BW(Ucd,1,Usd,30,T,sum);
case -1
Hz_ejw=IIR_DF_CF(Ucd,1,Usd,30,T,sum);
case 0
Hz_ejw=FIR_DF_HM(U1,U2,T,sum);
otherwise
Hz_ejw=IIR_DF_BW(Ucd,1,Usd,30,T,sum);
end
Y=X.*Hz_ejw;
y=1/sum*conj(DFT(conj(Y)));
figure(1); subplot(224)
plot(t,real(y)); title('模拟信号滤波后');grid on axis([0,T_sum,-max(real(y))*1.5,max(real(y))*1.5]) subplot(222);
plot(t,x); hold on
axis([0,T_sum,-max(x)*1.2,max(x)*1.2])
x=sin(U1*t);
plot(t,x,':r');grid on
title('模拟信号滤波前')
function Hz_ejw=IIR_DF_BW(Ucd,Ap,Usd,As,t,sum)
% 巴特沃思滤波器
E=(10^(0.1*Ap)-1)^0.5;
V=(10^(0.1*As)-1)^0.5;
Wc=Ucd*t; Ws=Usd*t;
Ucd=Wc/t; Usd=Ws/t;
Uca=(2/t)*tan(Ucd*t/2); Usa=(2/t)*tan(Usd*t/2);
N=ceil(log10(V/E)/log10(Usa/Uca));
k=[1:2*N];
Spk=exp(j*(pi/2+(2*k-1)/(2*N)*pi));
i=find(real(Spk)<0);
Sk(1:N)=Spk(i);
den=real(poly(Sk'));
k0=polyval(den,0);
disp('模拟巴特沃思滤波器的归一化统函数 Ha(s) 为')
tf(k0,den)
syms s z T;
den_jU=1;
s=s/Uca;
for i=1:N
den_jU=s^(N-i+1)*den(i)+den_jU;
end
Ha_s=simple(1/den_jU);
H_z=subs(Ha_s,'s',(2/T)*((1-1/z)/(1+1/z)));
k=1:sum;w=(2*pi/sum)*k;
ejw=exp(j*w);
Hz_ejw=subs(H_z,{z,T},{ejw,t*ones(1,length(ejw))}); figure(1); subplot(223)
plot(w,abs(Hz_ejw)); grid on
title('巴特沃思低通滤波器')
axis([2*pi/sum,pi,-0.2,1.2*max(abs(Hz_ejw))]) function Hz_ejw=IIR_DF_CF(Ucd,Ap,Usd,As,t,sum)
% 切比雪夫低通滤波器
E=(10^(0.1*Ap)-1)^0.5;
V=(10^(0.1*As)-1)^0.5;
Wc=Ucd*t; Ws=Usd*t;
Ucd=Wc/t; Usd=Ws/t;
Uca=(2/t)*tan(Ucd*t/2); Usa=(2/t)*tan(Usd*t/2);
N=ceil(acosh(V/E)/acosh(Usa/Uca));;
A=1/E+(1/E^2+1)^0.5;
a=1/2*(A^(1/N)-A^(-1/N));
b=1/2*(A^(1/N)+A^(-1/N));
k=1:2*N;
Spk=-a*sin((2*k-1)/(2*N)*pi)+j*b*...
cos((2*k-1)/(2*N)*pi);
i=find(real(Spk)<0);
Sk(1:N)=Spk(i);
den=real(poly(Sk'));
k0=1;
disp('模拟切比雪夫低通滤波器的归一化统函数 Ha(s) 为') tf(k0,den)
if (rem(N,2)==1)
for i=1:N
k0=k0*(-Sk(i));
end
elseif ((rem(N,2))==0)
k0=1;
for i=1:N
k0=k0*(-Sk(i));
end
end
if (rem(N,2)==0)
k0=10^(-0.05*Ap)*k0;
end
k0=real(k0);
syms s z T;
den_jU=1;
s=s/Uca;
for i=1:N
den_jU=s^(N-i+1)*den(i)+den_jU;
end
Ha_s=simple(1/den_jU);
H_z=subs(Ha_s,'s',(2/T)*((1-1/z)/(1+1/z)));
k=1:sum;w=(2*pi/sum)*k;
ejw=exp(j*w);
Hz_ejw=subs(H_z,{z,T},{ejw,t*ones(1,length(ejw))}); figure(1); subplot(223)
plot(w,abs(Hz_ejw));grid on
title('切比雪夫低通滤波器')
axis([2*pi/sum,pi,-0.5,max(abs(Hz_ejw))])
function Hz_ejw=FIR_DF_HM(U1,U2,T,sum)
wp=U1*T;ws=U2*T;
kuan=ws-wp;
M=sum;
n=[0:1:M-1];
wc=(ws+wp)/2;
hd=H_D(wc,M);
window=hamming_m(M);
h_z=hd.*window;
Hz_ejw=DFT(h_z);
k=1:sum;w=(2*pi/sum)*k;
figure(1); subplot(223)
plot(w,abs(Hz_ejw));grid on
axis([2*pi/sum,pi,-0.2,1.2*max(abs(Hz_ejw))]);
title('海明窗函数低通滤波器')
function hd=H_D(wc,N)
M=(N-1)/2;
for k=-M:M
if k==0
hd(k+M+1)=wc/pi;
else
hd(k+M+1)=sin(wc*k)/(pi*k);
end
end
function wn=hamming_m(M)
n=0:M-1;
wn(n+1)=0.54-0.46*cos((2*pi*n)/(M-1));
function Xk=DFT(xn)
% 离散傅立叶变换,xn为原序列,Xk为DFT变换后的序列N=length(xn);
n=0:N-1;
k=0:N-1;
WN=exp(-j*2*pi/N);
nk=n'*k;
WNnk=WN.^nk;
Xk=xn*WNnk;。