各种滤波器Matlab程序
数字滤波器matlab的程序

数字滤波器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 onaxis([Us/sum,Us/2,0,1.2*max(abs(X))])title('原模拟信号采样频谱图')Ucd=U1+(U2-U1)*1/5;Usd=U2-(U2-U1)*1/5;switch choisecase 1Hz_ejw=IIR_DF_BW(Ucd,1,Usd,30,T,sum);case -1Hz_ejw=IIR_DF_CF(Ucd,1,Usd,30,T,sum);case 0Hz_ejw=FIR_DF_HM(U1,U2,T,sum);otherwiseHz_ejw=IIR_DF_BW(Ucd,1,Usd,30,T,sum);endY=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 onaxis([0,T_sum,-max(x)*1.2,max(x)*1.2])x=sin(U1*t);plot(t,x,':r');grid ontitle('模拟信号滤波前')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:Nden_jU=s^(N-i+1)*den(i)+den_jU;endHa_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 ontitle('巴特沃思低通滤波器')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:Nk0=k0*(-Sk(i));endelseif ((rem(N,2))==0)k0=1;for i=1:Nk0=k0*(-Sk(i));endendif (rem(N,2)==0)k0=10^(-0.05*Ap)*k0;endk0=real(k0);syms s z T;den_jU=1;s=s/Uca;for i=1:Nden_jU=s^(N-i+1)*den(i)+den_jU;endHa_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 ontitle('切比雪夫低通滤波器')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 onaxis([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:Mif k==0hd(k+M+1)=wc/pi;elsehd(k+M+1)=sin(wc*k)/(pi*k);endendfunction 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;。
Matlab技术滤波器设计工具

Matlab技术滤波器设计工具概述:滤波器是信号处理中常用的工具,用于去除信号中的噪声或改变信号的频率响应。
Matlab是一个强大的数学工具,提供了丰富的滤波器设计函数和工具,使得滤波器设计变得简单易用。
本文将介绍Matlab中常用的滤波器设计函数和工具,帮助读者了解如何利用Matlab来设计不同类型的滤波器。
I. 常用滤波器设计函数Matlab提供了多个函数用于滤波器设计,包括FIR滤波器和IIR滤波器。
1. FIR滤波器设计函数FIR(Finite Impulse Response)滤波器是一种常见的线性相位滤波器,其特点是无反馈,具有线性相位和稳定的响应。
Matlab中常用的FIR滤波器设计函数包括fir1、fir2、firpm等。
- fir1函数可以设计标准的低通、高通、带通和带阻滤波器,可以指定截止频率、滤波器类型和滤波器阶数。
- fir2函数可以设计任意的线性相位FIR滤波器,可以指定滤波器的频率响应和频率区间。
- firpm函数可以设计最小最大化滤波器,可以指定滤波器的通带、阻带特性和响应类型。
2. IIR滤波器设计函数IIR(Infinite Impulse Response)滤波器是一种常见的递归滤波器,其特点是具有反馈,可以实现更高阶和更复杂的滤波器。
Matlab中常用的IIR滤波器设计函数包括butter、cheby1、cheby2、ellip等。
- butter函数可以设计巴特沃斯滤波器,可以指定滤波器的阶数和截止频率。
- cheby1和cheby2函数可以设计Chebyshev滤波器,可以指定滤波器的阶数、通带/阻带最大衰减和截止频率。
- ellip函数可以设计椭圆滤波器,可以指定滤波器的阶数、通带/阻带最大衰减和截止频率。
II. 滤波器设计工具除了上述的滤波器设计函数外,Matlab还提供了几个可视化的滤波器设计工具,方便用户通过图形界面进行滤波器设计。
1. FDA工具箱Matlab中的FDA工具箱(Filter Design and Analysis)是一个图形界面工具,用于设计、分析和实现各种滤波器。
Matlab中的多种滤波器设计方法介绍

Matlab中的多种滤波器设计方法介绍引言滤波器是数字信号处理中常用的工具,它可以去除噪声、改善信号质量以及实现其他信号处理功能。
在Matlab中,有许多不同的滤波器设计方法可供选择。
本文将介绍一些常见的滤波器设计方法,并详细说明它们的原理和应用场景。
一、FIR滤波器设计1.1 理想低通滤波器设计理想低通滤波器是一种理论上的滤波器,它可以完全去除截止频率之上的频率分量。
在Matlab中,可以使用函数fir1来设计理想低通滤波器。
该函数需要指定滤波器阶数及截止频率,并返回滤波器的系数。
但是,由于理想低通滤波器是非因果、无限长的,因此在实际应用中很少使用。
1.2 窗函数法设计为了解决理想滤波器的限制,窗函数法设计了一种有限长、因果的线性相位FIR滤波器。
该方法利用窗函数对理想滤波器的频率响应进行加权,从而得到实际可用的滤波器。
在Matlab中,可以使用函数fir1来实现窗函数法设计。
1.3 Parks-McClellan算法设计Parks-McClellan算法是一种优化设计方法,它可以根据指定的频率响应要求,自动选择最优的滤波器系数。
在Matlab中,可以使用函数firpm来实现Parks-McClellan算法。
二、IIR滤波器设计2.1 Butterworth滤波器设计Butterworth滤波器是一种常用的IIR滤波器,它具有平坦的幅频响应,并且在通带和阻带之间有宽的过渡带。
在Matlab中,可以使用函数butter来设计Butterworth滤波器。
2.2 Chebyshev滤波器设计Chebyshev滤波器是一种具有较陡的滚降率的IIR滤波器,它在通带和阻带之间有一个相对较小的过渡带。
在Matlab中,可以使用函数cheby1和cheby2来设计Chebyshev滤波器。
2.3 Elliptic滤波器设计Elliptic滤波器是一种在通带和阻带上均具有较陡的滚降率的IIR滤波器,它相较于Chebyshev滤波器在通带和阻带上都具有更好的过渡特性。
MATLAB的7种滤波方法(重制版)

MATLAB的7种滤波方法(重制版)滤波是信号和图像处理中常用的一种方法,用于去除噪音,增强信号或图像的特征。
MATLAB提供了丰富的滤波函数和工具箱,包括7种常用的滤波方法,分别是均值滤波、中值滤波、高斯滤波、拉普拉斯滤波、Sobel滤波、Prewitt滤波和Canny边缘检测。
1.均值滤波:均值滤波是使用一个窗口对图像进行平滑处理的方法,窗口内的像素值取平均值作为输出像素值。
这种滤波方法可以有效地去除高频噪声,但会导致图像细节的模糊。
2.中值滤波:中值滤波是一种非线性滤波方法,它使用一个窗口对图像进行平滑处理,窗口内的像素值按照大小排序,然后取中值作为输出像素值。
这种滤波方法能够很好地去除椒盐噪声和脉冲噪声,但无法处理其他类型的噪声。
3.高斯滤波:高斯滤波是一种线性平滑滤波方法,它使用一个高斯函数对图像进行卷积处理,窗口内的像素值按照高斯分布加权求和作为输出像素值。
这种滤波方法能够平滑图像并保持图像的细节信息,但会导致图像的边缘模糊。
4.拉普拉斯滤波:拉普拉斯滤波是一种边缘增强滤波方法,它使用一个拉普拉斯算子对图像进行卷积处理,突出图像中的边缘信息。
这种滤波方法能够提高图像的锐度和对比度,但会增强图像中的噪声。
5. Sobel滤波:Sobel滤波是一种边缘检测滤波方法,它使用Sobel算子对图像进行卷积处理,突出图像中的边缘信息。
这种滤波方法能够检测出图像中的水平和垂直边缘,但对于斜向边缘检测效果较差。
6. Prewitt滤波:Prewitt滤波是一种边缘检测滤波方法,它使用Prewitt算子对图像进行卷积处理,突出图像中的边缘信息。
与Sobel滤波类似,Prewitt滤波也能够检测出图像中的水平和垂直边缘,但对于斜向边缘检测效果较差。
7. Canny边缘检测:Canny边缘检测是一种广泛应用的边缘检测算法,它使用多个步骤对图像进行处理,包括高斯滤波、计算梯度、非极大值抑制和双阈值处理。
这种滤波方法能够检测出图像中的所有边缘,并进行细化和连接,对于复杂的边缘检测有较好的效果。
matlab 曲线滤波函数

在MATLAB中,你可以使用不同的函数来对曲线进行滤波。
滤波是一种减少数据噪声和异常值的过程。
下面是一些常见的MATLAB曲线滤波函数:
1. **低通滤波**:
* `filter`:使用数字滤波器对数据进行滤波。
* `butter`:创建Butterworth滤波器。
* `firls`:创建有限脉冲响应线性相位滤波器。
* `fir2`:创建具有线性相位的有限脉冲响应滤波器。
2. **高通滤波**:
* `filter`:使用数字滤波器对数据进行滤波,并选择适当的高通滤波器。
3. **移动平均滤波**:
* `movmean`:计算移动平均值。
4. **中值滤波**:
* `medfilt2`:对二维图像进行中值滤波。
5. **自定义滤波**:
* `conv`:进行卷积操作,可以用于自定义滤波器。
这些函数通常用于平滑或减少数据噪声,例如在使用曲线拟合或绘制图形时。
在选择适当的滤波方法时,你需要考虑你的具体需求和数据的性质。
数字滤波器的设计及其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代码
滤波matlab代码滤波是信号处理中常用的技术,用于去除信号中的噪声或者滤波信号以得到感兴趣的频率成分。
在MATLAB中,有多种滤波函数可以使用,例如`filter`、`designfilt`和`fir1`等。
本文将介绍这些函数的用法和原理,并通过实例说明如何使用MATLAB进行滤波。
我们来介绍一下`filter`函数。
该函数可以用于实现各种滤波器,如低通滤波器、高通滤波器和带通滤波器等。
其基本语法为:```Matlaby = filter(b,a,x)```其中,`b`和`a`是滤波器的系数,`x`是输入信号的向量。
这个函数将输出滤波后的信号`y`。
接下来,我们来看一个实例。
假设我们有一个包含噪声的信号`x`,我们希望通过低通滤波器来去除噪声。
我们可以使用`filter`函数来实现这个功能。
首先,我们需要设计一个低通滤波器的系数。
可以使用`fir1`函数来设计一个FIR滤波器的系数。
例如,我们可以使用以下代码来设计一个阶数为10的低通滤波器:```Matlaborder = 10; % 滤波器阶数cutoff = 0.2; % 截止频率b = fir1(order, cutoff);```然后,我们可以使用这个滤波器对信号进行滤波:```Matlaby = filter(b, 1, x);```这样,我们就得到了滤波后的信号`y`。
除了`filter`函数,MATLAB还提供了`designfilt`函数用于设计各种类型的滤波器。
该函数可以设计IIR滤波器、带通滤波器、带阻滤波器等。
使用`designfilt`函数需要指定滤波器的类型、阶数以及其他参数。
例如,我们可以使用以下代码来设计一个IIR低通滤波器:```Matlaborder = 6; % 滤波器阶数cutoff = 0.2; % 截止频率d = designfilt('lowpassiir', 'FilterOrder', order, 'PassbandFrequency', cutoff);```然后,我们可以使用这个滤波器对信号进行滤波:```Matlaby = filter(d, x);```同样地,我们得到了滤波后的信号`y`。
matlab用布莱克曼窗设计fir滤波器代码
matlab用布莱克曼窗设计fir滤波器代码如何使用Matlab设计带有布莱克曼窗的FIR滤波器。
布莱克曼窗是一种用于设计数字滤波器的常见窗函数之一。
它具有非常好的频域特性,可以用于实现各种滤波器,比如低通、高通、带通、带阻等。
在本文中,我们将详细介绍如何使用Matlab来设计带有布莱克曼窗的FIR 滤波器。
步骤1:确定设计规格在设计FIR滤波器之前,我们首先需要确定滤波器的一些规格,如滤波器的类型(低通、高通等)、截止频率、阶数等。
这些规格将决定最终滤波器的性能。
假设我们要设计一个低通滤波器,截止频率为0.2,阶数为50。
步骤2:计算滤波器系数使用Matlab的fir1函数可以计算出FIR滤波器的系数。
该函数的使用语法如下:h = fir1(N, Wn, window)其中,N表示滤波器的阶数,Wn表示归一化的截止频率,window表示所采用的窗函数。
对于布莱克曼窗,我们可以使用matlab中的blackman函数来生成窗函数:window = blackman(N+1)在这里,我们需要注意一个细节:由于Matlab的fir1函数使用的是双边频率表示法,而我们通常使用的是单边频率表示法。
因此,我们需要将截止频率进行一些处理,将其从正常范围[0, 0.5]映射到[-0.5, 0.5]上。
Wn = 2 * 0.2完成上述计算后,我们可以编写Matlab代码如下:N = 50;Wn = 2 * 0.2;window = blackman(N+1);h = fir1(N, Wn, window);步骤3:绘制滤波器的频率响应为了验证我们设计的滤波器效果,我们可以绘制其频率响应。
使用freqz 函数可以绘制滤波器的幅频特性:freqz(h,1)上述代码将绘制出滤波器的振幅响应和相位响应。
步骤4:应用滤波器完成滤波器的设计后,我们可以将其应用于信号上。
假设我们有一个需要滤波的信号x,我们可以使用filter函数实现滤波效果:y = filter(h, 1, x)其中,x表示输入信号,y表示输出信号。
butterworth滤波器 的matlab实现
butterworth滤波器的matlab实现如何在MATLAB中实现Butterworth滤波器Butterworth滤波器是一种常见的线性相位滤波器,用于将输入信号中的特定频率成分通过,而抑制其他频率成分。
它的设计原理是在通带内具有最平坦的幅频特性,因此被广泛应用于信号处理和通信领域。
在本文中,我们将一步一步地介绍如何在MATLAB中实现Butterworth滤波器。
第一步:导入信号在MATLAB中实现Butterworth滤波器之前,我们首先需要导入需要滤波的信号。
可以通过使用MATLAB的信号处理工具箱中的函数`audioread()`导入音频信号,或者使用`wavread()`函数导入.wav文件。
在这里,我们将使用一个名为`input_signal.wav`的音频文件作为例子。
matlab导入信号[input_signal,fs] = audioread('input_signal.wav');以上代码将导入音频信号,并将其存储在`input_signal`变量中。
采样率将存储在`fs`变量中。
第二步:设计Butterworth滤波器在MATLAB中,我们可以使用`butter()`函数来设计Butterworth滤波器。
这个函数的语法如下:matlab[b, a] = butter(n,Wn,ftype)- `n`:滤波器的阶数,取决于滤波器的陡度。
阶数越高,滤波器的陡度越大。
- `Wn`:截止频率,它是一个长度为2的数组,包含了通带和阻带的截止频率。
在Butterworth滤波器设计中,截止频率是以Nyquist频率为单位的。
例如,如果信号采样率为1000 Hz,通带的截止频率为200 Hz,阻带的截止频率为400 Hz,则`Wn = [200 400]/(fs/2)`,其中`fs`是采样率。
- `ftype`:滤波器类型,可以是'low'(低通滤波器)、'high'(高通滤波器)或'bandpass'(带通滤波器)。
(完整word版)用MATLAB设计滤波器
用MATLAB 设计滤波器1 IIR 滤波器的设计freqz功能:数字滤波器的频率响应。
格式:[h ,w ]=freqz (b ,a,n )[h ,f]=freqz(b ,a ,n ,Fs)[h ,w ]=freqz(b ,a,n ,’whole')[h ,f ]=freqz(b,a ,n ,'whole ’,Fs )h=freqz (b ,a ,w)h=freqz (b,a ,f ,Fs)freqz(b ,a)说明:freqz 用于计算由矢量"和b 构成的数字滤波器H (z)=A(z)B(z)= n-1--n -1 l)z a(n ....a(2)z l l)z b(n .... b(2)z b(l)++++++++ 的复频响应H (j ω).[h ,w]=freqz (b,a ,n )可得到数字滤波器的n 点的幅频响应,这n 个点均匀地分布在上半单位圆(即0~π),并将这n 点频率记录在w 中,相应的频率响应记录在h 中。
至于n值的选择没有太多的限制,只要n 〉0的整数,但最好能选取2的幂次方,这样就可采用FFT 算法进行快速计算。
如果缺省,则n=512。
[h ,f ]二freqz(b,a,n ,Fs)允许指定采样终止频率Fs (以Hz 为单位),也即在0~Fs/2频率范围内选取n 个频率点(记录在f 中),并计算相应的频率响应h 。
[h,w]=freqz(b,a,n,’whole’)表示在0~2π之间均匀选取n个点计算频率响应.[h,f]=freqz(b,a,n,'whole',Fs)则在O~Fs之间均匀选取n个点计算频率响应.h=freqz(b,a,w)计算在矢量w中指定的频率处的频率响应,但必须注意,指定的频率必须介于0和2π之间.h=freqz(b,a,f,Fs)计算在矢量f中指定的频率处的频率响应,但指定频率必须介于0和Fs之间。
butter功能:Butterworth(比特沃思)模拟和数字滤波器设计。