各类滤波器的MATLAB程序清单

合集下载

用MATLAB设计FIR数字滤波器

用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)。

数字滤波器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仿真程序

4.搜集整理小波分析的matlab程序4.1小波滤波器构造和消噪程序重构% mallet_wavelet.m% 此函数用于研究Mallet算法及滤波器设计% 此函数仅用于消噪a=pi/8; %角度赋初值b=pi/8;%低通重构FIR滤波器h0(n)冲激响应赋值h0=cos(a)*cos(b);h1=sin(a)*cos(b);h2=-sin(a)*sin(b);h3=cos(a)*sin(b);low_construct=[h0,h1,h2,h3];L_fre=4; %滤波器长度low_decompose=low_construct(end:-1:1); %确定h0(-n),低通分解滤波器for i_high=1:L_fre; %确定h1(n)=(-1)^n,高通重建滤波器if(mod(i_high,2)==0);coefficient=-1;elsecoefficient=1;endhigh_construct(1,i_high)=low_decompose(1,i_high)*coefficient;endhigh_decompose=high_construct(end:-1:1); %高通分解滤波器h1(-n) L_signal=100; %信号长度n=1:L_signal; %信号赋值f=10;t=0.001;y=10*cos(2*pi*50*n*t).*exp(-20*n*t);figure(1);plot(y);title('原信号');check1=sum(high_decompose); %h0(n)性质校验check2=sum(low_decompose);check3=norm(high_decompose);check4=norm(low_decompose);l_fre=conv(y,low_decompose); %卷积l_fre_down=dyaddown(l_fre); %抽取,得低频细节h_fre=conv(y,high_decompose);h_fre_down=dyaddown(h_fre); %信号高频细节figure(2);subplot(2,1,1)plot(l_fre_down);title('小波分解的低频系数');subplot(2,1,2);plot(h_fre_down);title('小波分解的高频系数');l_fre_pull=dyadup(l_fre_down); %0差值h_fre_pull=dyadup(h_fre_down);l_fre_denoise=conv(low_construct,l_fre_pull);h_fre_denoise=conv(high_construct,h_fre_pull);l_fre_keep=wkeep(l_fre_denoise,L_signal); %取结果的中心部分,消除卷积影响h_fre_keep=wkeep(h_fre_denoise,L_signal);sig_denoise=l_fre_keep+h_fre_keep; %信号重构compare=sig_denoise-y; %与原信号比较figure(3);subplot(3,1,1)plot(y);ylabel('y'); %原信号subplot(3,1,2);plot(sig_denoise);ylabel('sig\_denoise'); %重构信号subplot(3,1,3);plot(compare);ylabel('compare'); %原信号与消噪后信号的比较消噪、% 此函数用于研究Mallet算法及滤波器设计% 此函数用于消噪处理%角度赋值%此处赋值使滤波器系数恰为db9%分解的高频系数采用db9较好,即它的消失矩较大%分解的有用信号小波高频系数基本趋于零%对于噪声信号高频分解系数很大,便于阈值消噪处理[l,h]=wfilters('db10','d');low_construct=l;L_fre=20; %滤波器长度low_decompose=low_construct(end:-1:1); %确定h0(-n),低通分解滤波器for i_high=1:L_fre; %确定h1(n)=(-1)^n,高通重建滤波器if(mod(i_high,2)==0);coefficient=-1;elsecoefficient=1;endhigh_construct(1,i_high)=low_decompose(1,i_high)*coefficient;endhigh_decompose=high_construct(end:-1:1); %高通分解滤波器h1(-n)L_signal=100; %信号长度n=1:L_signal; %原始信号赋值f=10;t=0.001;y=10*cos(2*pi*50*n*t).*exp(-30*n*t);zero1=zeros(1,60); %信号加噪声信号产生zero2=zeros(1,30);noise=[zero1,3*(randn(1,10)-0.5),zero2];y_noise=y+noise;figure(1);subplot(2,1,1);plot(y);title('原信号');subplot(2,1,2);plot(y_noise);title('受噪声污染的信号');check1=sum(high_decompose); %h0(n),性质校验check2=sum(low_decompose);check3=norm(high_decompose);check4=norm(low_decompose);l_fre=conv(y_noise,low_decompose); %卷积l_fre_down=dyaddown(l_fre); %抽取,得低频细节h_fre=conv(y_noise,high_decompose);h_fre_down=dyaddown(h_fre); %信号高频细节subplot(2,1,1)plot(l_fre_down);title('小波分解的低频系数');subplot(2,1,2);plot(h_fre_down);title('小波分解的高频系数');% 消噪处理for i_decrease=31:44;if abs(h_fre_down(1,i_decrease))>=0.000001h_fre_down(1,i_decrease)=(10^-7);endendl_fre_pull=dyadup(l_fre_down); %0差值h_fre_pull=dyadup(h_fre_down);l_fre_denoise=conv(low_construct,l_fre_pull);h_fre_denoise=conv(high_construct,h_fre_pull);l_fre_keep=wkeep(l_fre_denoise,L_signal); %取结果的中心部分,消除卷积影响h_fre_keep=wkeep(h_fre_denoise,L_signal);sig_denoise=l_fre_keep+h_fre_keep; %消噪后信号重构%平滑处理for j=1:2sig_denoise(i)=sig_denoise(i-2)+sig_denoise(i+2)/2;end;end;compare=sig_denoise-y; %与原信号比较figure(3);subplot(3,1,1)plot(y);ylabel('y'); %原信号subplot(3,1,2);plot(sig_denoise);ylabel('sig\_denoise'); %消噪后信号subplot(3,1,3);plot(compare);ylabel('compare'); %原信号与消噪后信号的比较4.2小波谱分析mallat算法经典程序clc;clear;%% 1.正弦波定义f1=50; % 频率1f2=100; % 频率2fs=2*(f1+f2); % 采样频率Ts=1/fs; % 采样间隔N=120; % 采样点数n=1:N;y=sin(2*pi*f1*n*Ts)+sin(2*pi*f2*n*Ts); % 正弦波混合figure(1)plot(y);title('两个正弦信号')figure(2)stem(abs(fft(y)));title('两信号频谱')%% 2.小波滤波器谱分析h=wfilters('db30','l'); % 低通g=wfilters('db30','h'); % 高通h=[h,zeros(1,N-length(h))]; % 补零(圆周卷积,且增大分辨率变于观察)g=[g,zeros(1,N-length(g))]; % 补零(圆周卷积,且增大分辨率变于观察)figure(3);stem(abs(fft(h)));title('低通滤波器图')figure(4);stem(abs(fft(g)));title('高通滤波器图')%% 3.MALLET分解算法(圆周卷积的快速傅里叶变换实现)sig1=ifft(fft(y).*fft(h)); % 低通(低频分量)sig2=ifft(fft(y).*fft(g)); % 高通(高频分量)figure(5); % 信号图subplot(2,1,1)plot(real(sig1));title('分解信号1')subplot(2,1,2)plot(real(sig2));title('分解信号2')figure(6); % 频谱图subplot(2,1,1)stem(abs(fft(sig1)));title('分解信号1频谱')subplot(2,1,2)stem(abs(fft(sig2)));title('分解信号2频谱')%% 4.MALLET重构算法sig1=dyaddown(sig1); % 2抽取sig2=dyaddown(sig2); % 2抽取sig1=dyadup(sig1); % 2插值sig2=dyadup(sig2); % 2插值sig1=sig1(1,[1:N]); % 去掉最后一个零sig2=sig2(1,[1:N]); % 去掉最后一个零hr=h(end:-1:1); % 重构低通gr=g(end:-1:1); % 重构高通hr=circshift(hr',1)'; % 位置调整圆周右移一位gr=circshift(gr',1)'; % 位置调整圆周右移一位sig1=ifft(fft(hr).*fft(sig1)); % 低频sig2=ifft(fft(gr).*fft(sig2)); % 高频sig=sig1+sig2; % 源信号%% 5.比较figure(7);subplot(2,1,1)plot(real(sig1));title('重构低频信号');subplot(2,1,2)plot(real(sig2));title('重构高频信号');figure(8);subplot(2,1,1)stem(abs(fft(sig1)));title('重构低频信号频谱');subplot(2,1,2)stem(abs(fft(sig2)));title('重构高频信号频谱');figure(9)plot(real(sig),'r','linewidth',2);hold on;plot(y);legend('重构信号','原始信号')title('重构信号与原始信号比较')小波包变换分析信号的MATLAB程序%t=0.001:0.001:1;t=1:1000;s1=sin(2*pi*50*t*0.001)+sin(2*pi*120*t*0.001)+rand(1,length(t));for t=1:500;s2(t)=sin(2*pi*50*t*0.001)+sin(2*pi*120*t*0.001)+rand(1,length(t)); endfor t=501:1000;s2(t)=sin(2*pi*200*t*0.001)+sin(2*pi*120*t*0.001)+rand(1,length(t)); endsubplot(9,2,1)plot(s1)title('原始信号')ylabel('S1')subplot(9,2,2)plot(s2)title('故障信号')ylabel('S2')wpt=wpdec(s1,3,'db1','shannon');%plot(wpt);s130=wprcoef(wpt,[3,0]);s131=wprcoef(wpt,[3,1]);s132=wprcoef(wpt,[3,2]);s133=wprcoef(wpt,[3,3]);s134=wprcoef(wpt,[3,4]);s135=wprcoef(wpt,[3,5]);s136=wprcoef(wpt,[3,6]);s137=wprcoef(wpt,[3,7]);s10=norm(s130);s11=norm(s131);s12=norm(s132);s13=norm(s133);s14=norm(s134);s15=norm(s135);s16=norm(s136);s17=norm(s137);st10=std(s130);st11=std(s131);st12=std(s132);st13=std(s133);st14=std(s134);st15=std(s135);st16=std(s136);st17=std(s137);disp('正常信号的特征向量');snorm1=[s10,s11,s12,s13,s14,s15,s16,s17] std1=[st10,st11,st12,st13,st14,st15,st16,st17]subplot(9,2,3);plot(s130);ylabel('S130');subplot(9,2,5);plot(s131);ylabel('S131');subplot(9,2,7);plot(s132);ylabel('S132');subplot(9,2,9);plot(s133);ylabel('S133');subplot(9,2,11);plot(s134);ylabel('S134');subplot(9,2,13);plot(s135);ylabel('S135');subplot(9,2,15);plot(s136);ylabel('S136');subplot(9,2,17);plot(s137);ylabel('S137');wpt=wpdec(s2,3,'db1','shannon');%plot(wpt);s230=wprcoef(wpt,[3,0]);s231=wprcoef(wpt,[3,1]);s232=wprcoef(wpt,[3,2]);s233=wprcoef(wpt,[3,3]);s234=wprcoef(wpt,[3,4]);s235=wprcoef(wpt,[3,5]);s236=wprcoef(wpt,[3,6]);s237=wprcoef(wpt,[3,7]);s20=norm(s230);s21=norm(s231);s22=norm(s232);s23=norm(s233);s24=norm(s234);s25=norm(s235);s26=norm(s236);s27=norm(s237);st20=std(s230);st21=std(s231);st22=std(s232);st23=std(s233);st24=std(s234);st25=std(s235);st26=std(s236);st27=std(s237);disp('故障信号的特征向量');snorm2=[s20,s21,s22,s23,s24,s25,s26,s27] std2=[st20,st21,st22,st23,st24,st25,st26,st27]subplot(9,2,4);plot(s230);ylabel('S230');subplot(9,2,6);plot(s231); ylabel('S231');subplot(9,2,8);plot(s232); ylabel('S232');subplot(9,2,10);plot(s233); ylabel('S233');subplot(9,2,12);plot(s234); ylabel('S234');subplot(9,2,14);plot(s235); ylabel('S235');subplot(9,2,16);plot(s236); ylabel('S236');subplot(9,2,18);plot(s237); ylabel('S237');%fftfigurey1=fft(s1,1024);py1=y1.*conj(y1)/1024;y2=fft(s2,1024);py2=y2.*conj(y2)/1024;y130=fft(s130,1024);py130=y130.*conj(y130)/1024; y131=fft(s131,1024);py131=y131.*conj(y131)/1024; y132=fft(s132,1024);py132=y132.*conj(y132)/1024; y133=fft(s133,1024);py133=y133.*conj(y133)/1024; y134=fft(s134,1024);py134=y134.*conj(y134)/1024; y135=fft(s135,1024);py135=y135.*conj(y135)/1024; y136=fft(s136,1024);py136=y136.*conj(y136)/1024; y137=fft(s137,1024);py137=y137.*conj(y137)/1024;y230=fft(s230,1024);py230=y230.*conj(y230)/1024; y231=fft(s231,1024);py231=y231.*conj(y231)/1024; y232=fft(s232,1024);py232=y232.*conj(y232)/1024; y233=fft(s233,1024);py233=y233.*conj(y233)/1024; y234=fft(s234,1024);py234=y234.*conj(y234)/1024; y235=fft(s235,1024);py235=y235.*conj(y235)/1024; y236=fft(s236,1024);py236=y236.*conj(y236)/1024; y237=fft(s237,1024);py237=y237.*conj(y237)/1024;f=1000*(0:511)/1024; subplot(1,2,1);plot(f,py1(1:512));ylabel('P1');title('原始信号的功率谱') subplot(1,2,2);plot(f,py2(1:512));ylabel('P2');title('故障信号的功率谱') figuresubplot(4,2,1);plot(f,py130(1:512));ylabel('P130');title('S130的功率谱') subplot(4,2,2);plot(f,py131(1:512));ylabel('P131');title('S131的功率谱') subplot(4,2,3);plot(f,py132(1:512));ylabel('P132');subplot(4,2,4);plot(f,py133(1:512));ylabel('P133');subplot(4,2,5);plot(f,py134(1:512));ylabel('P134');subplot(4,2,6);plot(f,py135(1:512));ylabel('P135');subplot(4,2,7);plot(f,py136(1:512));ylabel('P136');subplot(4,2,8);plot(f,py137(1:512));ylabel('P137');figuresubplot(4,2,1);plot(f,py230(1:512));ylabel('P230');title('S230的功率谱')subplot(4,2,2);plot(f,py231(1:512));ylabel('P231');title('S231的功率谱')subplot(4,2,3);plot(f,py232(1:512));ylabel('P232');subplot(4,2,4);plot(f,py233(1:512));ylabel('P233');subplot(4,2,5);plot(f,py234(1:512));ylabel('P234');subplot(4,2,6);plot(f,py235(1:512));ylabel('P235');subplot(4,2,7);plot(f,py236(1:512));ylabel('P236');subplot(4,2,8);plot(f,py237(1:512));ylabel('P237');figure%plottree(wpt)4.3利用小波变换实现对电能质量检测的算法实现N=10000;s=zeros(1,N);for n=1:Nif n<0.4*N||n>0.8*Ns(n)=31.1*sin(2*pi*50/10000*n);elses(n)=22.5*sin(2*pi*50/10000*n);endendl=length(s);[c,l]=wavedec(s,6,'db5'); %用db5小波分解信号到第六层subplot(8,1,1);plot(s);title('用db5小波分解六层:s=a6+d6+d5+d4+d3+d2+d1'); Ylabel('s');%对分解结构【c,l】中第六层低频部分进行重构a6=wrcoef('a',c,l,'db5',6);subplot(8,1,2);plot(a6);Ylabel('a6');%对分解结构【c,l】中各层高频部分进行重构for i=1:6decmp=wrcoef('d',c,l,'db5',7-i);subplot(8,1,i+2);plot(decmp);Ylabel(['d',num2str(7-i)]);end%-----------------------------------------------------------rec=zeros(1,300);rect=zeros(1,300);ke=1;u=0;d1=wrcoef('d',c,l,'db5',1);figure(2);plot(d1);si=0;N1=0;N0=0;sce=0;for n=20:N-30rect(ke)=s(n);ke=ke+1;if(ke>=301)if(si==2)rec=rect;u=2;end;si=0;ke=1;end;if(d1(n)>0.01) % the condition of abnormal append.N1=n;if(N0==0)N0=n;si=si+1;end;if(N1>N0+30)Nlen=N1-N0;Tab=Nlen/10000;end;end;if(si==1)for k=N0:N0+99 %testing of 1/4 period signals to sce=sce+s(k)*s(k)/10000;end;re=sqrt(sce*200) %re indicate the pike value of .sce=0;si=si+1;end;end;NlenN0n=1:300;figure(3)plot(n,rec);4.4基于小波变换的图象去噪Normalshrink算法function [T_img,Sub_T]=threshold_2_N(img,levels)% reference :image denoising using wavelet thresholding[xx,yy]=size(img);HH=img((xx/2+1):xx,(yy/2+1):yy);delt_2=(std(HH(:)))^2;%(median(abs(HH(:)))/0.6745)^2;%T_img=img;for i=1:levelstemp_x=xx/2^i;temp_y=yy/2^i;% belt=1.0*(log(temp_x/(2*levels)))^0.5;belt=1.0*(log(temp_x/(2*levels)))^0.5; %2.5 0.8%HLHL=img(1:temp_x,(temp_y+1):2*temp_y);delt_y=std(HL(:));T_1=belt*delt_2/delt_y;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%T_HL=sign(HL).*max(0,abs(HL)-T_1);%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%T_img(1:temp_x,(temp_y+1):2*temp_y)=T_HL;Sub_T(3*(i-1)+1)=T_1;%LHLH=img((temp_x+1):2*temp_x,1:temp_y);delt_y=std(LH(:));T_2=belt*delt_2/delt_y;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%T_LH=sign(LH).*max(0,abs(LH)-T_2);%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%T_img((temp_x+1):2*temp_x,1:temp_y)=T_LH;Sub_T(3*(i-1)+2)=T_2;%HHHH=img((temp_x+1):2*temp_x,(temp_y+1):2*temp_y);delt_y=std(HH(:));T_3=belt*delt_2/delt_y;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%T_HH=sign(HH).*max(0,abs(HH)-T_3);%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%T_img((temp_x+1):2*temp_x,(temp_y+1):2*temp_y)=T_HH;Sub_T(3*(i-1)+3)=T_3;end4.5小波去噪matlab程序****************************************** clearclc%在噪声环境下语音信号的增强%语音信号为读入的声音文件%噪声为正态随机噪声sound=wavread('c12345.wav');count1=length(sound);noise=0.05*randn(1,count1);for i=1:count1signal(i)=sound(i);endfor i=1:count1y(i)=signal(i)+noise(i);end%在小波基'db3'下进行一维离散小波变换[coefs1,coefs2]=dwt(y,'db3'); %[低频高频] count2=length(coefs1);count3=length(coefs2);energy1=sum((abs(coefs1)).^2); energy2=sum((abs(coefs2)).^2); energy3=energy1+energy2;for i=1:count2recoefs1(i)=coefs1(i)/energy3;endfor i=1:count3recoefs2(i)=coefs2(i)/energy3;end%低频系数进行语音信号清浊音的判别zhen=160;count4=fix(count2/zhen);for i=1:count4n=160*(i-1)+1:160+160*(i-1);s=sound(n);w=hamming(160);sw=s.*w;a=aryule(sw,10);sw=filter(a,1,sw);sw=sw/sum(sw);r=xcorr(sw,'biased');corr=max(r);%为清音(unvoice)时,输出为1;为浊音(voice)时,输出为0 if corr>=0.8output1(i)=0;elseif corr<=0.1output1(i)=1;endendfor i=1:count4n=160*(i-1)+1:160+160*(i-1);if output1(i)==1switch abs(recoefs1(i))case abs(recoefs1(i))<=0.002recoefs1(i)=0;case abs(recoefs1(i))>0.002 & abs(recoefs1(i))<=0.003recoefs1(i)=sgn(recoefs1(i))*(0.003*abs(recoefs1(i))-0.000003)/0.002; otherwise recoefs1(i)=recoefs1(i);endelseif output1(i)==0recoefs1(i)=recoefs1(i);endend%对高频系数进行语音信号清浊音的判别count5=fix(count3/zhen);for i=1:count5n=160*(i-1)+1:160+160*(i-1);s=sound(n);w=hamming(160);sw=s.*w;a=aryule(sw,10);sw=filter(a,1,sw);sw=sw/sum(sw);r=xcorr(sw,'biased');corr=max(r);%为清音(unvoice)时,输出为1;为浊音(voice)时,输出为0 if corr>=0.8output2(i)=0;elseif corr<=0.1output2(i)=1;endendfor i=1:count5n=160*(i-1)+1:160+160*(i-1);if output2(i)==1switch abs(recoefs2(i))case abs(recoefs2(i))<=0.002recoefs2(i)=0;case abs(recoefs2(i))>0.002 & abs(recoefs2(i))<=0.003recoefs2(i)=sgn(recoefs2(i))*(0.003*abs(recoefs2(i))-0.000003)/0.002; otherwise recoefs2(i)=recoefs2(i);endelseif output2(i)==0recoefs2(i)=recoefs2(i);endend%在小波基'db3'下进行一维离散小波反变换output3=idwt(recoefs1, recoefs2,'db3');%对输出信号抽样点值进行归一化处理maxdata=max(output3);output4=output3/maxdata;%读出带噪语音信号,存为'101.wav'wavwrite(y,5500,16,'c101');%读出处理后语音信号,存为'102.wav'wavwrite(output4,5500,16,'c102');4.6 神经网络小波Matlab实现%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%clear allload dataM1=20;epo=15;A=4;B=18;B2=B/2+1N=500;M=(A+1)*(B+1);for a0=1:A+1;for b0=1:B+1;i=(B+1)*(a0-1)+b0;b_init(i)=((b0-B2)/10)/(2^(-A)); a_init(i)=1/(2^(-A));c_init(i)=(20-A)/2;endendw0=ones(1,M);for i=1:Nfor j=1:Mt=x(i);t= a_init(j)*t-b_init(j);%P0(i,j)= (cos(1.75*t)*exp(-t*t/2))/2^c_init(j);P0(i,j)= ((1-t*t)*exp(-t*t/2))/2^c_init(j);endend%calculation of output of networkfor i=1:Nu=0;for j=1:Mu=u+w0(j)*P0(i,j);%w0?aè¨?μendy0(i)= u;% y(p)= u=??W(j)*phi(p,j)= ??W(j)* |μj(t)end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%for k=1:MW(:,k)=P0(:,k);endfor k=2:Mu=0;for i=1:k-1aik(i)=(P0(:,k)'*W(:,i))/(W(:,i)'*W(:,i));u=u+aik(i) *W(:,i);endW(:,k)=P0(:,k)-u;end%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%for i=1:Mg(i)= (W(:,i)'*d')/( W(:,i)'* W(:,i));end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%u=0;for i=1:Mu=u+g(i)*(W(:,i)'*W(:,i));endDD=u;for i=1:MErro(i)=(g(i)^2)*(W(:,i)'*W(:,i))/DD;end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%k=1;while(k<=M1)u=1;for i=2:Mif abs(Erro(u))<abs(Erro(i));u=ielse u=uendendI(k)=u;Erro(u)=0k=k+1;end%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%for k=1:M1u=I(k);a(k)=a_init(u);b(k)=b_init(u);c(k)=c_init(u);w1(k)=w0(u);end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%epoch=1;error=0.1;err=0.0001;lin=0.5;while (error>=err & epoch<=epo)for i=1:Nfor j=1:M1t=x(i);t= a(j)*t-b(j);%P1(i,j)= (cos(1.75*t)*exp(-t*t/2))/2^c(j);P1(i,j)= ((1-t*t)*exp(-t*t/2))/2^c(j);endend%calculation of output of networkfor i=1:Nu=0;for j=1:M1u=u+w1(j)*P1(i,j);endy1(i)= u;end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%u=0;for i=1:Nu=u+(d(i)-y1(i))^2;endu=u/2;%u=1/2??(d-p)^2 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%if u>errorlin=lin*0.8;elselin=lin*1.2;enderror=u; %error=u=1/2??(d-p)^2 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%for j=1:M1u=0;for i=1:Nu=u+(d(i)-y1(i))*P1(i,j);endEW(j)=-u;endif epoch==1SW=-EW;w1_=w1;elseSW=-EW+((EW*EW')*SW_)/(EW_*EW_');endEW_=EW;SW_=SW;w1=w1_+SW*lin;w1_=w1;%number of epoch increase by 1epoch=epoch+1;end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%subplot(2,1,1);plot(x,d);subplot(2,1,2);plot(x,y1);Matlab程序如下:function sd=liu_denoise(mix_signal)%此函数用于去除白躁信号&周期性干扰信号%输入参数mix_signal为采集到的信号波形p=0.6745;w_dept=9;w_name='db6';coef=cell(1,w_dept);thr=zeros(1,w_dept+1);[c,l]=wavedec(mix_signal,w_dept,w_name); %对混合信号S进行db6的9尺度一维分解coef(1)={appcoef(c,l,w_name,w_dept)};%计算尺度为9的一维分解低频系数cs=[cs,coef_soft{j}];thr(1)=median(abs(coef{1}))/p*sqrt(2*log(length(coef{1})));%计算1尺度上的阈值coef_soft(1)={wthresh(coef{1},'h',thr(1))};%对小波系数进行阈值为thr(1)的硬阈值处理cs=[coef_soft{1}];for j=2:w_dept+1coef(j)={detcoef(c,l,w_dept-j+2)};%计算尺度为9到2的各尺度高频小波系数coef1(j)={detcoef(c,l,w_dept-j+2)};thr(j)=median(abs(coef{j}))/p*sqrt(2*log(length(coef{j})));%计算9到2各尺度上的阈值coef_soft(j)={wthresh(coef{j},'h',thr(j))};%对小波系数进行阈值为thr(j)的硬阈值处理cs=[cs,coef_soft{j}];endsd=waverec(cs,l,w_name); %根据小波系数[cs,l]对信号进行重构4.2.2仿真分析为了验证去噪的有效性,先仿真产生一个局放脉冲然后叠加0.1倍白噪声和周期干扰,利用前面的程序去造,结果如图1,从图上可以看到去噪后信号与原始信号幅值、相位都基本没有变化程序如下:fc=40e4; %振荡频率t4=0.8e-3; %脉冲起始时间tn=1e-3; %总时间x=0:step:tn;x4=t4:step:tn;%s4=(exp((t4-x4)*13/t)-exp((t4-x4)*22/t)).*sin(2*pi*fc*x4);s4=(exp((t4-x4)/tr)-exp((t4-x4)/td)).*sin(2*pi*fc*x4);s4=[zeros(1,t4/step),s4];p=tn/step;n=0.1*randn(1,p); %产生白噪信号n=[n,0];s5=0.1*sin(2*pi*10000000*x); %产生周期性干扰信号s6=s4+n+s5;sd=liu_denoise(s6);subplot(311);plot(x,s4);title('单个局放脉冲仿真波形');subplot(312);plot(x,mix_signal);title('染噪后波形');subplot(313);plot(x,sd);title('小波去噪后波形');。

Matlab中的多种滤波器设计方法介绍

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种滤波方法(重制版)滤波是信号和图像处理中常用的一种方法,用于去除噪音,增强信号或图像的特征。

MATLAB提供了丰富的滤波函数和工具箱,包括7种常用的滤波方法,分别是均值滤波、中值滤波、高斯滤波、拉普拉斯滤波、Sobel滤波、Prewitt滤波和Canny边缘检测。

1.均值滤波:均值滤波是使用一个窗口对图像进行平滑处理的方法,窗口内的像素值取平均值作为输出像素值。

这种滤波方法可以有效地去除高频噪声,但会导致图像细节的模糊。

2.中值滤波:中值滤波是一种非线性滤波方法,它使用一个窗口对图像进行平滑处理,窗口内的像素值按照大小排序,然后取中值作为输出像素值。

这种滤波方法能够很好地去除椒盐噪声和脉冲噪声,但无法处理其他类型的噪声。

3.高斯滤波:高斯滤波是一种线性平滑滤波方法,它使用一个高斯函数对图像进行卷积处理,窗口内的像素值按照高斯分布加权求和作为输出像素值。

这种滤波方法能够平滑图像并保持图像的细节信息,但会导致图像的边缘模糊。

4.拉普拉斯滤波:拉普拉斯滤波是一种边缘增强滤波方法,它使用一个拉普拉斯算子对图像进行卷积处理,突出图像中的边缘信息。

这种滤波方法能够提高图像的锐度和对比度,但会增强图像中的噪声。

5. Sobel滤波:Sobel滤波是一种边缘检测滤波方法,它使用Sobel算子对图像进行卷积处理,突出图像中的边缘信息。

这种滤波方法能够检测出图像中的水平和垂直边缘,但对于斜向边缘检测效果较差。

6. Prewitt滤波:Prewitt滤波是一种边缘检测滤波方法,它使用Prewitt算子对图像进行卷积处理,突出图像中的边缘信息。

与Sobel滤波类似,Prewitt滤波也能够检测出图像中的水平和垂直边缘,但对于斜向边缘检测效果较差。

7. Canny边缘检测:Canny边缘检测是一种广泛应用的边缘检测算法,它使用多个步骤对图像进行处理,包括高斯滤波、计算梯度、非极大值抑制和双阈值处理。

这种滤波方法能够检测出图像中的所有边缘,并进行细化和连接,对于复杂的边缘检测有较好的效果。

数字滤波器的设计及其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代码

滤波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`。

IIR滤波器matlab源程序

IIR滤波器matlab源程序

IIR滤波器matlab源程序(1)IIR一阶低通滤波器clear;fi=1;fs=10;Gc2=0.9;wc=2*pi*fi/fs;omegac=tan(wc/2);alpha=(sqrt(Gc2)/sqrt(1-Gc2))*omegac;a=(1-alpha)/(1+alpha);b=(1-a)/2;w=0:pi/300:pi;Hw2=alpha^2./(alpha^2+(tan(w/2)).^2);plot(w/pi,Hw2);grid;hold on;(2)一阶高通滤波器clear;fi=1;fs=10;Gc2=0.5;wc=2*pi*fi/fs;omegac=tan(wc/2);alpha=(sqrt(1-Gc2)/(sqrt(Gc2)))*omegac;a=(1-alpha)/(1+alpha);b=(1+a)/2;w=0:pi/300:pi;Hw2=(tan(w/2).^2)./(alpha^2+(tan(w/2)).^2); plot(w/pi,Hw2);grid;hold on;(3)Notch 嵌波滤波器clear;Gb2=0.5;w0=0.35*pi;deltaw=0.1*pi;b=1/(1+tan(deltaw/2)*(sqrt(1-Gb2)/sqrt(Gb2))); B=[1 -2*cos(w0) 1].*b;A=[1 -2*b*cos(w0) (2*b-1)];w=0:pi/500:pi;H=freqz(B,A,w);plot(w/pi,abs(H));grid;(4)Peak 滤波器clear;Ac=3;Gb2=10^(-Ac/10);w0=0.35*pi;deltaw=0.1*pi;b=1/(1+tan(deltaw/2)*(sqrt(Gb2)/sqrt(1-Gb2))); B=[1 0 -1].*(1-b);A=[1 -2*b*cos(w0) (2*b-1)];w=0:pi/500:pi;H=freqz(B,A,w);plot(w/pi,abs(H));grid;(5)IIR低通滤波(Butterworth)% IIR Lowpass Use Butterworthclear;fs=20;fpass=4;fstop=5;Ap=0.5;As=10;wp=2*pi*fpass/fs;ws=2*pi*fstop/fs;omegap=tan(wp/2);omegas=tan(ws/2);ep=sqrt(10^(Ap/10)-1);es=sqrt(10^(As/10)-1);N=ceil(log(es/ep)/log(omegas/omegap));omega0=omegap/ep^(1/N);K=floor(N/2);for i=1:Ktheta(i)=pi*(N-1+2*i)/(2*N);endfor i=1:KG(i)=omega0^2/(1-2*omega0*cos(theta(i))+omega0^2);endfor i=1:Ka1(i)=2*(omega0^2-1)/(1-2*omega0*cos(theta(i))+omega0^2);endfor i=1:Ka2(i)=(1+2*omega0*cos(theta(i))+omega0^2)/(1-2*omega0*cos(theta(i))+omega0^2); endif K<(N/2)G0=omega0/(omega0+1);a0=(omega0-1)/(omega0+1);endw=0:pi/300:pi;Hw2=1./(1+(tan(w/2)/omega0).^(2*N));plot(w/pi,Hw2);grid;(6)IIR高通滤波(Butterworth)% IIR Hightpass Use Butterworthclear;fs=20;fpass=5;fstop=4;Ap=0.5;As=10;wp=2*pi*fpass/fs;ws=2*pi*fstop/fs;omegap=cot(wp/2);omegas=cot(ws/2);ep=sqrt(10^(Ap/10)-1);es=sqrt(10^(As/10)-1);N=ceil(log(es/ep)/log(omegas/omegap));omega0=omegap/ep^(1/N);K=floor(N/2);for i=1:Ktheta(i)=pi*(N-1+2*i)/(2*N);endfor i=1:KG(i)=omega0^2/(1-2*omega0*cos(theta(i))+omega0^2);endfor i=1:Ka1(i)=-2*(omega0^2-1)/(1-2*omega0*cos(theta(i))+omega0^2); endfor i=1:Ka2(i)=(1+2*omega0*cos(theta(i))+omega0^2)/(1-2*omega0*cos(theta(i))+omega0^2); endif K<(N/2)G0=omega0/(omega0+1);a0=-(omega0-1)/(omega0+1);endw=(0+eps):pi/300:pi;Hw2=1./(1+(cot(w/2)/omega0).^(2*N));plot(w/pi,Hw2);grid;(7)IIR带通滤波(Butterworth)% IIR Bandpass Use Butterworthclear;fs=20;fpa=2;fpb=4;fsa=1.5;fsb=4.5;Ap=0.0877;As=16.9897;wpa=2*pi*fpa/fs;wpb=2*pi*fpb/fs;wsa=2*pi*fsa/fs;wsb=2*pi*fsb/fs;c=sin(wpa+wpb)/(sin(wpa)+sin(wpb));omegap=abs((c-cos(wpb))/sin(wpb));omegasa=(c-cos(wsa))/sin(wsa);omegasb=(c-cos(wsb))/sin(wsb);omegas=min(abs(omegasa),abs(omegasb));ep=sqrt(10^(Ap/10)-1);es=sqrt(10^(As/10)-1);N=ceil(log(es/ep)/log(omegas/omegap));omega0=omegap/ep^(1/N);K=floor(N/2);for i=1:Ktheta(i)=pi*(N-1+2*i)/(2*N);endfor i=1:KG(i)=omega0^2/(1-2*omega0*cos(theta(i))+omega0^2);endfor i=1:Ka1(i)=4*c*(omega0*cos(theta(i))-1)/(1-2*omega0*cos(theta(i))+omega0^2);endfor i=1:Ka2(i)=2*(2*c^2+1-omega0^2)/(1-2*omega0*cos(theta(i))+omega0^2);endfor i=1:Ka3(i)=-(4*c*(omega0*cos(theta(i))+1))/(1-2*omega0*cos(theta(i))+omega0^2);endfor i=1:Ka4(i)=(1+2*omega0*cos(theta(i))+omega0^2)/(1-2*omega0*cos(theta(i))+omega0^2); endG0=omega0/(1+omega0);a0(1)=-2*c/(1+omega0);a0(2)=(1-omega0)/(1+omega0); endw=(0+eps):pi/300:pi;Hw2=1./(1+((c-cos(w))./(omega0*sin(w))).^(2*N));plot(w/pi,Hw2);grid;(8)IIR带阻滤波(Butterworth)% IIR Bandstop Use Butterworthclear;fs=20;fpa=1.5;fpb=4.5;fsa=2;fsb=4;Ap=0.5;As=10;wpa=2*pi*fpa/fs;wpb=2*pi*fpb/fs;wsa=2*pi*fsa/fs;wsb=2*pi*fsb/fs;c=sin(wpa+wpb)/(sin(wpa)+sin(wpb));omegap=abs(sin(wpb)/(c-cos(wpb)));omegasa=sin(wsa)/(cos(wsa)-c);omegasb=sin(wsb)/(cos(wsb)-c);omegas=min(abs(omegasa),abs(omegasb));ep=sqrt(10^(Ap/10)-1);es=sqrt(10^(As/10)-1);N=ceil(log(es/ep)/log(omegas/omegap));omega0=omegap/ep^(1/N);K=floor(N/2);theta=zeros(1,K);theta(i)=pi*(N-1+2*i)/(2*N);endG=zeros(1,K);a1=zeros(1,K);a2=zeros(1,K);for i=1:KG(i)=omega0^2/(1-2*omega0*cos(theta(i))+omega0^2);endfor i=1:Ka1(i)=2*(omega0^2-1)/(1-2*omega0*cos(theta(i))+omega0^2);endfor i=1:Ka2(i)=(1+2*omega0*cos(theta(i))+omega0^2)/(1-2*omega0*cos(theta(i))+omega0^2); endif K<(N/2)G0=omega0/(omega0+1);a0=(omega0-1)/(omega0+1);endw=(0+eps):pi/300:pi;Hw2=1./(1+(sin(w)./(omega0*(c-cos(w)))).^(2*N));plot(w/pi,Hw2);grid;(9)IIR低通滤波(chebyshev 1)% IIR Lowpass Use Chebyshev Type 1clear;fs=20;fpass=4;fstop=5;Ap=0.5;As=10;wp=2*pi*fpass/fs;ws=2*pi*fstop/fs;omegap=tan(wp/2);omegas=tan(ws/2);ep=sqrt(10^(Ap/10)-1);es=sqrt(10^(As/10)-1);e=es/ep;w=omegas/omegap;N=ceil(log(e+sqrt(e^2-1))/log(w+sqrt(w^2-1)));a=log(1/ep+sqrt(1/ep^2+1))/N;omega0=omegap*sinh(a);K=floor(N/2);theta=zeros(1,K);omega=zeros(1,K);for i=1:Ktheta(i)=pi*(N-1+2*i)/(2*N);endfor i=1:Komega(i)=omegap*sin(theta(i));endG=zeros(1,K);a1=zeros(1,K);a2=zeros(1,K);for i=1:KG(i)=(omega0^2+omega(i)^2)/(1-2*omega0*cos(theta(i))+omega0^2+omega(i)^2);endfor i=1:Ka1(i)=2*(omega0^2+omega(i)^2-1)/(1-2*omega0*cos(theta(i))+omega0^2+omega(i)^2) ;endfor i=1:Ka2(i)=(1+2*omega0*cos(theta(i))+omega0^2+omega(i)^2)/(1-2*omega0*cos(theta(i))+ omega0^2+omega(i)^2);endif K<(N/2)G0=omega0/(omega0+1);a0=(omega0-1)/(omega0+1);elseH0=sqrt(1/(1+ep^2));endf=0:1/300:10;Hf2=1./(1+ep^2*(cheby(N,tan(pi*f/fs)/omegap)).^2);plot(f,abs(Hf2));grid;(9)IIR低通滤波(chebyshev 1)% IIR Lowpass Use Chebyshev Type 2clear;fs=20;fpass=4;fstop=5;Ap=0.5;As=10;wp=2*pi*fpass/fs;ws=2*pi*fstop/fs;omegap=tan(wp/2);omegas=tan(ws/2);ep=sqrt(10^(Ap/10)-1);es=sqrt(10^(As/10)-1);e=es/ep;w=omegas/omegap;N=ceil(log(e+sqrt(e^2-1))/log(w+sqrt(w^2-1)));a=log(es+sqrt(es^2+1))/N;omega0=omegas/sinh(a);K=floor(N/2);for i=1:Ktheta(i)=pi*(N-1+2*i)/(2*N);endfor i=1:Komega(i)=omegas/sin(theta(i));endfor i=1:KG(i)=(1+omega(i)^-2)/(1-2*omega0^-1*cos(theta(i))+omega0^-2+omega(i)^-2);endfor i=1:Ka1(i)=2*(1-omega0^-2+omega(i)^-2)/(1-2*omega0^-1*cos(theta(i))+omega0^-2+omeg a(i)^-2);endfor i=1:Ka2(i)=(1+2*omega0^-1*cos(theta(i))+omega0^-2+omega(i)^-2)/(1-2*omega0^-1*cos(th eta(i))+omega0^-2+omega(i)^-2);endfor i=1:Kb1(i)=2*(1-omega(i))/(1+omega(i));endif K<(N/2)G0=omega0/(omega0+1);a0=(omega0-1)/(omega0+1);elseH0=sqrt(1/(1+ep^2));endf=(0+eps):1/100:10;Hf2=(cheby(N,omegas./tan(pi*f/fs))).^2./((cheby(N,omegas./tan(pi*f/fs))).^2+es^2);plot(f,abs(Hf2));grid;(10)chebyshev 中用到的函数cheby.mfunction CN=cheby(N,x)if x<=1CN=cos(N*acos(x));elseCN=cosh(N*log(x+sqrt(x.^2-1)));end。

(完整word版)用MATLAB设计滤波器

(完整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(比特沃思)模拟和数字滤波器设计。

matlab11种数字信号滤波去噪算法

matlab11种数字信号滤波去噪算法

matlab11种数字信号滤波去噪算法Matlab是一种强大的数学软件,广泛应用于信号处理领域。

在数字信号处理中,滤波去噪是一个重要的任务,可以提高信号的质量和准确性。

本文将介绍Matlab中的11种数字信号滤波去噪算法。

1. 均值滤波:该算法通过计算信号中一定窗口内的像素平均值来去除噪声。

它适用于高斯噪声和椒盐噪声的去除。

2. 中值滤波:该算法通过计算信号中一定窗口内的像素中值来去除噪声。

它适用于椒盐噪声的去除。

3. 高斯滤波:该算法通过对信号进行高斯模糊来去除噪声。

它适用于高斯噪声的去除。

4. 维纳滤波:该算法通过最小均方误差准则来估计信号的真实值,并去除噪声。

它适用于高斯噪声的去除。

5. 自适应滤波:该算法通过根据信号的局部特性来调整滤波器的参数,从而去除噪声。

它适用于非线性噪声的去除。

6. 小波去噪:该算法通过将信号分解为不同频率的小波系数,并对系数进行阈值处理来去除噪声。

它适用于各种类型的噪声的去除。

7. Kalman滤波:该算法通过对信号进行状态估计和观测更新来去除噪声。

它适用于线性系统的去噪。

8. 粒子滤波:该算法通过使用一组粒子来估计信号的状态,并通过重采样来去除噪声。

它适用于非线性系统的去噪。

9. 线性预测滤波:该算法通过使用线性预测模型来估计信号的未来值,并去除噪声。

它适用于平稳信号的去噪。

10. 自适应线性组合滤波:该算法通过对信号进行线性组合来估计信号的真实值,并去除噪声。

它适用于各种类型的噪声的去除。

11. 稀疏表示滤波:该算法通过使用稀疏表示模型来估计信号的真实值,并去除噪声。

它适用于各种类型的噪声的去除。

以上是Matlab中的11种数字信号滤波去噪算法。

每种算法都有其适用的场景和优缺点,根据具体的信号和噪声类型选择合适的算法进行去噪处理。

Matlab提供了丰富的函数和工具箱,可以方便地实现这些算法,并对信号进行滤波去噪。

通过合理选择和组合这些算法,可以有效提高信号的质量和准确性,为后续的信号处理任务提供更好的基础。

matlab的滤波器函数

matlab的滤波器函数

matlab的滤波器函数
Matlab是一个很好用的计算机语言和环境,因为它拥有着许多能处理数字信号和图像的函数。

其中就包括了滤波器函数。

滤波器是指能在时间域或者频域中去除或者增加某些频率的信号。

在Matlab中,有许多种类型的滤波器函数,每种函数都有其特定的应用场景和优劣势。

下面就逐一介绍这些函数。

1. 普通的数字滤波器:
这种滤波器的函数包括filter()和conv()。

filter()函数可以用来实现IIR滤波器和FIR滤波器,而conv()函数可以用来实现线性卷积滤波器。

2. 快速数字滤波器:
这种滤波器的函数是fft()和ifft()。

fft()函数和ifft()函数可以实现基于频域的数字滤波器,它们能以极高的速度进行运算,并且使用起来也非常方便。

3. 陷波滤波器:
这种滤波器的函数包括iirnotch()和iirlpnotch()。

这两个函数都可以实现能够陷波指定频率的数字滤波器。

4. 巴特沃斯滤波器:
这种滤波器的函数是butter()。

butter()函数能够快速地计算出能够满足所需频率特性的IIR数字滤波器。

5. 十字滤波器:
这种滤波器的函数是imfilter()。

imfilter()函数可以将任何3x3或5x5的滤波器作用于图像中所有的像素。

通过以上介绍,我们了解了Matlab中的滤波器函数,并能够根据口味选择其能够满足需求的函数。

在实际应用中,我们可以根据情况调整滤波器的参数和类型,以得到最好的滤波效果。

FIR数字滤波器的MATLAB详细程序

FIR数字滤波器的MATLAB详细程序

%FIR-DF hd=ideal_lp(wc,M);Fs=32000;a=2*pi*6500;b=2*pi*7000;c=2*pi*9000;n1=0:4096;t=n1/Fs;xa=cos(a*t)+cos(b*t)+cos(c*t);%+cos(d*t);figure(1);y=fft(xa);plot(abs(y));title('fft(xa)变换');grid;Rp=0.25;As=52;%ws=pi*6600*2/Fs;wp=pi*6700*2/Fs;%gao tong%ws=pi*6700*2/Fs;wp=pi*6600*2/Fs;%di tongws=[pi*6600*2/Fs,pi*7400*2/Fs];wp=[pi*6800*2/Fs,pi*7200*2/Fs];%dai tong%ws=[pi*6600*2/Fs,pi*7400*2/Fs,pi*8600*2/Fs,pi*9400*2/Fs];wp=[pi*6800*2/Fs,pi*7200*2/Fs, pi*8800*2/Fs,pi*9200*2/Fs];%dai tong%ws=[pi*6800*2/Fs,pi*7200*2/Fs];wp=[pi*6600*2/Fs,pi*7400*2/Fs];%dai zuDB=abs(ws(1)-wp(1));%DB=abs(ws-wp);M0=ceil((As-8)/(2.285*DB));%阶数M=M0+mod(M0,2);%确保阶数为偶数N=M+1;%长度为奇数%0.112*(As-8.7);As>50;%0.5842*(As-21)^0.4+0.07886*(As-21);21<=As<=50;%0;As<21;if As>50beta=0.112*(As-8.7);elseif21<=As&&As<=50beta=0.5842*(As-21)^0.4+0.07886*(As-21);elsebeta=0;endwn=kaiser(N,beta);wc=(wp+ws)/2/pi;%fir1使用wc归一化%hn=fir1(M,wc,'high',wn);%gao tonghn=fir1(M,wc,wn);%dai tong,di tong%hn=fir1(M,wc,'stop',wn);%dai zufigure(2);plot(abs(wn));title('窗函数');grid;figure(3);[hh,w]=freqz(hn,1);freqzplot(hh,w,'linear');title('幅频/相频特性');%Hn=fft(hn);%plot(abs(Hn));title('FFT(Hn)');%freqz(hn,1);title('幅频特性');y=filter(hn,1,xa);figure(4);y1=fft(y);plot(abs(y1));title('高通滤波器滤波之后');grid;%=========验证=====================%验证%w_kai=wn';%hd=hn;%h=hd.*w_kai;%freqz_mN1=1000;[H,W]=freqz(hn,1,N1,'whole');%[H,W]=freqz(B,A,N1,'whole');delta_w=2*pi/N1;db=20*log10(abs(H)/max(abs(H))+eps);%通带波纹db数%rp1=-(min(db(wp/delta_w+1:1:501)))%gao tong yan zheng%as1=-round(max(db(1:1:ws/delta_w+1)))%rp1=-(min(db(1:1:wp/delta_w+1)))%di tong yan zheng%as1=-round(max(db(ws/delta_w+1:1:501)))rp1=-(min(db(wp(1)/delta_w+1:1:wp(2)/delta_w+1)))%dai tong yan zhengas1=round(max(-max(db(1:1:ws(1)/delta_w+1)),-max(db(ws(2)/delta_w+1:1:501))))%rp1=-min(min(db(1:1:wp(1)/delta_w+1)),min(db(wp(2)/delta_w+1:1: 501)))%dai zu yan zheng%as1=-round(max(db(ws(1)/delta_w+1:1:ws(2)/delta_w+1)))%N1=4096;%Hw=fft(h,N1);%wk=2*pi*[0:N1-1]/N1;%hgw=Hw.*exp(j*wk*N/2);%rp=max(20*log10(abs(hgw)))%%hgmin=min(real(hgw));%rs=20*log10(abs(hgmin))%w_kai=wn';%hd=hn;%h=hd.*w_kai;%d_w=2*pi/1000;%[db,w0]=freqz(h,1);%rp1=-(min(db(wp/d_w+1:1:501))) %as1=-round(max(db(1:1:ws/d_w+1)))。

低通滤波的matlab实现

低通滤波的matlab实现

四种低通滤波器:一、理想低通滤波器I=imread('bb.jpg');T=rgb2gray(I);figure(1);subplot(1,2,1),imshow(uint8(I));title('原图像');subplot(1,2,2),imshow(uint8(T));title('理想低通滤波所得图像');[f1,f2]=freqspace(size(T),'meshgrid');H=ones(size(T));r=sqrt(f1.^2+f2.^2);H(r>0.1)=0;Y=fft2(double(T));Y=fftshift(Y);Ya=Y.*H;Ya=ifftshift(Ya);I=ifft2(Ya);figure(2);surf(H,'Facecolor','interp','Edgecolor','none','Facelighting','phong'); title('频谱图');二、巴特沃斯低通滤波器I=imread('bb.jpg');T=rgb2gray(I);figure(1);subplot(1,2,1),imshow(uint8(I));title('原图像');subplot(1,2,2),imshow(uint8(T));title('巴特沃斯低通滤波所得图像');[f1,f2]=freqspace(size(T),'meshgrid');D=0.3;r=f1.^2+f2.^2;n=4;for i=1:size(T,1)for j=1:size(T,2)t=r(i,j)/(D*D);H(i,j)=1/(t^n+1);endendY=fft2(double(T));Y=fftshift(Y);Ya=Y.*H;Ya=ifftshift(Ya);I=real(ifft2(Ya));figure(2);surf(H,'Facecolor','interp','Edgecolor','none','Facelighting','phong'); title('频谱图');三、梯形滤波器I=imread('bb.jpg');T=rgb2gray(I);figure(1);subplot(1,2,1),imshow(uint8(I));title('原图像');subplot(1,2,2),imshow(uint8(T));title('梯形低通滤波所得图像');[f1,f2]=freqspace(size(T),'meshgrid');D=100/size(I,1);D0=0.1;D1=0.4;r=sqrt(f1.^2+f2.^2);H=zeros(size(T));H(r<D0)=1;for i=1:size(T,1)for j=1:size(I,2)if r(i,j)>=D0 & r(i,j)<=D1H(i,j)=(D1-r(i,j))/(D1-D0);endendendY=fft2(double(T));Y=fftshift(Y);Ya=Y.*H;Ya=ifftshift(Ya);I=real(ifft2(Ya));figure(2);surf(H,'Facecolor','interp','Edgecolor','none','Facelighting','phong'); title('频谱图');四、高斯低通滤波器I=imread('bb.jpg');T=rgb2gray(I);figure(1);subplot(1,2,1),imshow(uint8(I));title('原图像');subplot(1,2,2),imshow(uint8(T));title('高斯低通滤波所得图像');[f1,f2]=freqspace(size(T),'meshgrid');D=100/size(I,1);r=f1.^2+f2.^2;H=ones(size(T));for i=1:size(T,1)for j=1:size(T,2)t=r(i,j)/(D*D);H(i,j)=exp(-t);endendY=fft2(double(T));Y=fftshift(Y);Ya=Y.*H;Ya=ifftshift(Ya);I=real(ifft2(Ya));figure(2);surf(H,'Facecolor','interp','Edgecolor','none','Facelighting','phong'); title('频谱图');。

巴特沃兹模拟滤波器的MATLAB实现

巴特沃兹模拟滤波器的MATLAB实现

巴特沃兹模拟滤波器的MATLAB实现设计一个模拟巴特沃特低通滤波器,它在30rad/s处具有1dB或更好的波动,在50rad/s 处具有至少30dB的衰减。

求出级联形式的系统函数,画出滤波器的幅度响应、对数幅度响应、相位响应和脉冲响应图。

解:程序清单如下Wp=30;Ws=50;Rp=1;As=30; %技术指标Ripple=10^(-Rp/20);Attn=10^(-As/20);[b,a]=afd_butt(Wp,Ws,Rp,As) %巴特沃兹低通滤波器[C,B,A]=sdir2cas(b,a) %计算二阶节系数,级联型实现[db,mag,pha,w]=freqs_m(b,a,50); %计算幅频响应[ha,x,t]=impulse(b,a); %计算模拟滤波器的单位脉冲响应figure(1);clf;subplot(2,2,1);plot(w,mag);title('Magnitude Response');xlabel('Analog frequency in rad/s');ylabel('H');%axis([0,50,0,1.1])set(gca,'XTickMode','manual','XTick',[0,30,40,50]);set(gca,'YTickMode','manual','YTick',[0,Attn,Ripple,1]);gridsubplot(2,2,2);plot(w,db);title('Magnitude in dB');xlabel('Analog frequency in rad/s');ylabel('decibels');%axis([0,50,-40,5])set(gca,'XTickMode','manual','XTick',[0,30,40,50]);set(gca,'YTickMode','manual','YTick',[-40,-As,-Rp,0]);gridsubplot(2,2,3);plot(w,pha/pi);title('Phase Response');xlabel('Analog frequency in rad/s');ylabel('radians');%axis([0,50,-1.1,1.1])set(gca,'XTickMode','manual','XTick',[0,30,40,50]);set(gca,'YTickMode','manual','YTick',[-1,-0.5,0,0.5,1]);gridsubplot(2,2,4);plot(t,ha);title('Impulse Response');xlabel('time in seconds');ylabel('ha(t)');axis([0,max(t)+0.05,min(ha),max(ha)+0.025]);set(gca,'XTickMode','manual','XTick',[0,0.1,max(t)]);set(gca,'YTickMode','manual','YTick',[0,0.1,max(ha)]);grid%巴特沃兹模拟滤波器的设计子程序function[b,a]=afd_butt(Wp,Ws,Rp,As);if Wp<=0error('Passband edge must be larger than 0')endif Ws<=Wperror('Stopband edge must be larger than Passed edge')endif (Rp<=0)|(As<0)error('PB ripple and /0r SB attenuation must be larger than 0') endN=ceil((log10((10^(Rp/10)-1)/(10^(As/10)-1)))/(2*log10(Wp/Ws))); 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 [db,mag,pha,w]=freqs_m(b,a,wmax);w=[0:1:500]*wmax/500;H=freqs(b,a,w);mag=abs(H);db=20*log10((mag+eps)/max(mag));pha=angle(H);%直接形式转换成级联形式子程序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);endelseif 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运行结果如下(如图6.10所示)。

matlab滤波器设计命令

matlab滤波器设计命令

matlab滤波器设计命令Matlab滤波器设计命令滤波器是数字信号处理中常用的工具,用于去除信号中的噪声、频率干扰或其他不需要的成分。

Matlab提供了一系列有用的滤波器设计命令,使用户能够轻松设计并应用各种类型的滤波器。

在本文中,我们将详细介绍Matlab中常用的滤波器设计命令,包括滤波器设计函数、滤波器类型和设计过程。

I. Matlab中常用的滤波器设计函数在Matlab中,有几种函数可用于设计滤波器,其中最常用的函数是`designfilt`函数和`fir1`函数。

1. designfilt函数`designfilt`函数是Matlab中最灵活和功能强大的滤波器设计函数之一,可用于设计各种类型的IIR和FIR滤波器。

它的基本语法如下:`filt = designfilt(FilterType, 'PropertyName', PropertyValue, ...)`其中,`FilterType`代表滤波器类型,包括低通滤波器(Lowpass)、高通滤波器(Highpass)、带通滤波器(Bandpass)、带阻滤波器(Bandstop)等。

`PropertyName`和`PropertyValue`是可选的参数,用于设置滤波器的各种属性,如阶数(Order)、截止频率(CutoffFrequency)、通带和阻带的最大衰减(MaximumAttenuation)等。

下面是一个使用`designfilt`函数设计低通滤波器的例子:Fs = 1000; 采样频率Fpass = 20; 通带截止频率Fstop = 30; 阻带截止频率designfilt('lowpassiir', 'FilterOrder', 4, 'PassbandFrequency', Fpass, 'StopbandFrequency', Fstop, 'SampleRate', Fs)该命令将设计一个4阶的低通IIR滤波器,其通带截止频率为20Hz,阻带截止频率为30Hz,采样频率为1000Hz。

高斯高通滤波器matlab程序代码

高斯高通滤波器matlab程序代码

%高斯高通滤波器RGB = imread('132.jpg');I0 = rgb2gray(RGB);subplot(2,3,1),imshow(I0);title('原图');I1 = imnoise(I0,'gaussian'); %对原图像加噪声subplot(2,3,2),imshow(I1);title('加入噪声后')%将灰度图像的二维不连续Fourier 变换的零频率成分移到频谱的中心s=fftshift(fft2(I1));subplot(2,3,3),imshow(log(1+abs(s)),[]);title('fftshift'); [M,N]=size(s); %分别返回s的行数到M中,列数到N中%GHPF滤波d0=15; %初始化d0n1=floor(M/2); %对M/2进行取整n2=floor(N/2); %对N/2进行取整fori=1:Mfor j=1:Nd=sqrt((i-n1)^2+(j-n2)^2); %点(i,j)到傅立叶变换中心的距离h(i,j)=1-1*exp(-1/2*(d^2/d0^2)); %GHPF滤波函数s(i,j)=h(i,j)*s(i,j); %GHPF滤波后的频域表示endends=ifftshift(s); %对s进行反FFT移动%对s进行二维反离散的Fourier变换后,取复数的实部转化为无符号8位整数s=uint8(real(ifft2(s)));subplot(2,3,4),imshow(h);title('传递函数'); %显示GHPF滤波器的传递函数subplot(2,3,5),imshow(s);title('GHPF滤波(d0=15)'); %显示GHPF滤波处理后的图像。

matlab滤波器设计代码

matlab滤波器设计代码

在 MATLAB 中,设计滤波器通常可以使用designfilt函数或者相关的设计工具箱函数。

下面是一个简单的示例,演示如何使用designfilt函数设计一个低通滤波器:
在这个示例中,我们使用designfilt函数创建了一个低通滤波器对象,并指定了滤波器的设计参数,如滤波器类型、截止频率、设计方法和阶数。

然后,通过freqz函数绘制了滤波器的频率响应。

你可以根据需要调整滤波器的设计参数,比如滤波器类型、截止频率、设计方法和阶数等。

MATLAB 中还有其他设计工具箱函数,如fir1、butter、cheby1等,用于设计不同类型的滤波器。

请注意,滤波器设计的具体参数取决于你的应用场景和信号特性。

在选择滤波器参数时,通常需要考虑滤波器的类型、频率响应、阶数等因素。

matlab实现滤波器

matlab实现滤波器

虽然matlab提供了很多产生低通滤波器的函数,而且也提供了将低通转换为高通、带通等滤波器的方法函数,以及数字化的函数。

但是为了简化设计及设计者方便考虑,matlab还提供了更为简便的产生各种滤波器的方法。

1 besself功能:贝塞尔(Bessel)模拟滤波器设计。

格式:[b,a] = besself(n,Wn)[b,a] = besself(n,Wn,'ftype')[z,p,k] = besself(...)[A,B,C,D] = besself(...)说明:besself函数可以设计模拟低通、高通、带通和带阻贝塞尔(Bessel)滤波器。

[b,a] = besself(n,Wn)返回截止频率为Wn(单位为弧度/秒)的n阶贝塞尔模拟低通滤波器,b、a分别为滤波器传递函数的分子和分母系数向量(降幂排列)。

当Wn为二元向量,即Wn=[W1 W2] (W1<W2)时,[b,a] = besself(n,Wn)返回一个2n阶模拟带通滤波器,其通带为W1<ω< W2。

[b,a] = besself(n,Wn,'ftype')用于设计高通和带阻滤波器,即·ftype=high时,返回截止频率为Wn的高通滤波器;·ftype=stop时,Wn=[W1 W2] (W1<W2),返回阻带为W1<ω< W2的模拟带阻滤波器。

[z,p,k] = besself(...)得到滤波器的零-极点增益模型,z、p、k分别为零点向量、极点向量和增益系数。

[A,B,C,D] = besself(...)得到滤波器的状态空间模型。

2 butter功能:巴特沃思(Butterworth)模拟/数字滤波器设计。

格式:[b,a] = butter(n,Wn)[b,a] = butter(n,Wn,'ftype')[b,a] = butter(n,Wn,'s')[b,a] = butter(n,Wn,'ftype','s')[z,p,k] = butter(...)[A,B,C,D] = butter(...)说明:butter函数可以设计模拟或数字的低通、高通、带通和带阻Butterworth 滤波器。

Matlab技术滤波器设计工具

Matlab技术滤波器设计工具

MatIab技术滤波器设计工具概述:滤波器是信号处理中常用的工具,用于去除信号中的噪声或改变信号的频率响应。

Mat1ab是一个强大的数学工具,提供了丰富的滤波器设计函数和工具,使得滤波器设计变得简单易用。

本文将介绍Mat1ab中常用的滤波器设计函数和工具,帮助读者了解如何利用MaIIab来设计不同类型的滤波器。

1.常用滤波器设计函数Mat1ab提供了多个函数用于滤波器设计,包括FIR滤波器和HR滤波器。

1FIR滤波器设计函数FIR(FiniteImpu1seResponse)滤波器是-一种常见的线性相位滤波器,其特点是无反馈,具有线性相位和稳定的响应。

Mauab中常用的F1R滤波器设计函数包括fir1、fi 「2、firpm等。

∙fir1函数可以设计标准的低通、高通、带通和带阻滤波器,可以指定截止频率、滤波器类型和滤波器阶数。

-fir2函数可以设计任意的线性相位FIR滤波器,可以指定滤波器的频率响应和频率区间。

■firpm函数可以设计最小最大化滤波器,可以指定滤波器的通带、阻带特性和响应类型。

2.ΠR滤波器设计函数IIR(InfiniteImpu1seResponse)滤波器是一种常见的递归滤波器,其特点是具有反馈,可以实现更高阶和更复杂的滤波器。

MatIab中常用的ΠR滤波器设计函数包括butter、Cheby1、cheby2^e∏ip等。

-butter函数可以设计巴特沃斯滤波器,可以指定滤波器的阶数和截止频率。

-Cheby1和Cheby2函数可以设计Chebyshev滤波器,可以指定滤波器的阶数、通带/阻带最大衰减和截止频率。

■e11ip函数可以设计椭圆滤波器,可以指定滤波器的阶数、通带/阻带最大衰减和截止频率。

I1滤波器设计工具除了上述的滤波器设计函数外,Mat1ab还提供了几个可视化的滤波器设计工具,方便用户通过图形界面进行滤波器设计。

1FDA工具箱Mat1ab中的FDA工具箱(Fi1terDesignandAna1ysis)是一个图形界面工具,用于设计、分析和实现各种滤波器。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

各类滤波器的MATLAB程序一、理想低通滤波器IA=imread('');[f1,f2]=freqspace(size(IA),'meshgrid');Hd=ones(size(IA));r=sqrt(f1.^2+f2.^2);Hd(r>=0;Y=fft2(double(IA));Y=fftshift(Y);Ya=Y.*Hd;Ya=ifftshift(Ya);Ia=ifft2(Ya);figuresubplot(2,2,1),imshow(uint8(IA));subplot(2,2,2),imshow(uint8(Ia));figuresurf(Hd,'Facecolor','interp','Edgecolor','none','Facelighting','phong');二、理想高通滤波器IA=imread('');[f1,f2]=freqspace(size(IA),'meshgrid');Hd=ones(size(IA));r=sqrt(f1.^2+f2.^2);Hd(r<=0;Y=fft2(double(IA));Y=fftshift(Y);Ya=Y.*Hd;Ya=ifftshift(Ya);Ia=real(ifft2(Ya));figuresubplot(2,2,1),imshow(uint8(IA));subplot(2,2,2),imshow(uint8(Ia));figuresurf(Hd,'Facecolor','interp','Edgecolor','none','Facelighting','phong');三、B utterworth低通滤波器IA=imread('');[f1,f2]=freqspace(size(IA),'meshgrid');D=;r=f1.^2+f2.^2;n=4;for i=1:size(IA,1)for j=1:size(IA,2)t=r(i,j)/(D*D);Hd(i,j)=1/(t^n+1);endendY=fft2(double(IA));Y=fftshift(Y);Ya=Y.*Hd;Ya=ifftshift(Ya);Ia=real(ifft2(Ya));figuresubplot(2,2,1),imshow(uint8(IA));subplot(2,2,2),imshow(uint8(Ia));figuresurf(Hd,'Facecolor','interp','Edgecolor','none','Facelighting','phong');四、B utterworth高通滤波器IA=imread('');[f1,f2]=freqspace(size(IA),'meshgrid');D=;r=f1.^2+f2.^2;n=4;for i=1:size(IA,1)for j=1:size(IA,2)t=(D*D)/r(i,j);Hd(i,j)=1/(t^n+1);endendY=fft2(double(IA));Y=fftshift(Y);Ya=Y.*Hd;Ya=ifftshift(Ya);Ia=real(ifft2(Ya));figuresubplot(2,2,1),imshow(uint8(IA));subplot(2,2,2),imshow(uint8(Ia));figuresurf(Hd,'Facecolor','interp','Edgecolor','none','Facelighting','phong');五、高斯低通滤波器IA=imread('');IB=imread('');[f1,f2]=freqspace(size(IA),'meshgrid');D=100/size(IA,1);r=f1.^2+f2.^2;Hd=ones(size(IA));for i=1:size(IA,1)for j=1:size(IA,2)t=r(i,j)/(D*D);Hd(i,j)=exp(-t);endendY=fft2(double(IA));Y=fftshift(Y);Ya=Y.*Hd;Ya=ifftshift(Ya);Ia=real(ifft2(Ya));figuresubplot(2,2,1),imshow(uint8(IA));subplot(2,2,2),imshow(uint8(Ia));figuresurf(Hd,'Facecolor','interp','Edgecolor','none','Facelighting','phong');六、高斯高通滤波器IA=imread('');IB=imread('');[f1,f2]=freqspace(size(IA),'meshgrid');%D=100/size(IA,1);D=;r=f1.^2+f2.^2;for i=1:size(IA,1)for j=1:size(IA,2)t=r(i,j)/(D*D);Hd(i,j)=1-exp(-t);endendY=fft2(double(IA));Y=fftshift(Y);Ya=Y.*Hd;Ya=ifftshift(Ya);Ia=real(ifft2(Ya));figuresubplot(2,2,1),imshow(uint8(IA));subplot(2,2,2),imshow(uint8(Ia));figuresurf(Hd,'Facecolor','interp','Edgecolor','none','Facelighting','phong');七、梯形低通滤波器IA=imread('');IB=imread('');[f1,f2]=freqspace(size(IA),'meshgrid');%D=100/size(IA,1);D0=;D1=;r=sqrt(f1.^2+f2.^2);Hd=zeros(size(IA));Hd(r<D0)=1;for i=1:size(IA,1)for j=1:size(IA,2)if r(i,j)>=D0 & r(i,j)<=D1Hd(i,j)=(D1-r(i,j))/(D1-D0);endendendY=fft2(double(IA));Y=fftshift(Y);Ya=Y.*Hd;Ya=ifftshift(Ya);Ia=real(ifft2(Ya));figuresubplot(2,2,1),imshow(uint8(IA));subplot(2,2,2),imshow(uint8(Ia));figuresurf(Hd,'Facecolor','interp','Edgecolor','none','Facelighting','phong');八、梯形高通滤波器IA=imread('');IB=imread('');[f1,f2]=freqspace(size(IA),'meshgrid');%D=100/size(IA,1);D0=;D1=;r=sqrt(f1.^2+f2.^2);Hd=ones(size(IA));Hd(r<D1)=0;for i=1:size(IA,1)for j=1:size(IA,2)if r(i,j)>=D0 & r(i,j)<=D1Hd(i,j)=(D0-r(i,j))/(D0-D1);endendendY=fft2(double(IA));Y=fftshift(Y);Ya=Y.*Hd;Ya=ifftshift(Ya);Ia=real(ifft2(Ya));figuresubplot(2,2,1),imshow(uint8(IA));subplot(2,2,2),imshow(uint8(Ia));figuresurf(Hd,'Facecolor','interp','Edgecolor','none','Facelighting','phong');九、用其他方法编写的理想低通、理想高通、Butterworth低通、同态滤波程序1、理想低通i1=imread('');i2=imnoise(i1,'salt & pepper',;f=double(i2);k=fft2(f);g=fftshift(k);[N1,N2]=size(g);d0=50;u0=floor(N1/2)+1;v0=floor(N2/2)+1;for i=1:N1for j=1:N2d=sqrt((i-u0)^2+(j-v0)^2);if d<=d0h=1;elseh=0;endy(i,j)=g(i,j)*h;endendy=ifftshift(y);E1=ifft2(y);E2=real(E1);figuresubplot(2,2,1),imshow(uint8(i1)); subplot(2,2,2),imshow(uint8(i2)); subplot(2,2,3),imshow(uint8(E2));2、理想高通i1=imread('');i2=imnoise(i1,'salt & pepper',;f=double(i2);k=fft2(f);g=fftshift(k);[N1,N2]=size(g);n=2;d0=10;u0=floor(N1/2)+1;v0=floor(N2/2)+1;for i=1:N1for j=1:N2d=sqrt((i-u0)^2+(j-v0)^2);if d<=d0h=0;else h=1;endy(i,j)=g(i,j)*h;endendy=ifftshift(y);E1=ifft2(y);E2=real(E1);figuresubplot(2,2,1),imshow(uint8(i1)); subplot(2,2,2),imshow(uint8(i2)); subplot(2,2,3),imshow(uint8(E2));3、Butterworth低通i1=imread('');i2=imnoise(i1,'salt & pepper',;f=double(i2);k=fft2(f);g=fftshift(k);[N1,N2]=size(g);n=2;d0=50;u0=floor(N1/2)+1;v0=floor(N2/2)+1;for i=1:N1for j=1:N2d=sqrt((i-u0)^2+(j-v0)^2);h=1/(1+(d/d0)^(2*n));y(i,j)=g(i,j)*h;endendy=ifftshift(y);E1=ifft2(y);E2=real(E1);figuresubplot(2,2,1),imshow(uint8(i1)); subplot(2,2,2),imshow(uint8(i2)); subplot(2,2,3),imshow(uint8(E2));4、同态滤波I=rgb2gray(imread(''));[M,N]=size(I);T=double(I);L=log(T);F=fft2(L);A=2;B=;for i=1:Mfor j=1:ND(i,j)=((i-M/2)^2+(j-N/2)^2);endendc=;%锐化参数D0=max(M,N);H=(A-B)*(1-exp(c*(-D/(D0^2))))+B;F=F.*H;F=ifft2(F);Y=exp(F);figuresubplot(1,2,1),imshow(I);subplot(1,2,2),imshow(uint8(real(Y)));十、G abor滤波器。

相关文档
最新文档