MATLAB-巴特沃兹滤波器.docx
相位是信号的一个事要参数,所以一般在滤波中希望实现零相位偏移或具有线性相位偏移.现在大致有两类方法实现零相位偏移:1、将滋波器与一个全通漉波器级联,用后者的相位响应矫正前者。须要附加全通淹波器的设计运算量以及额外的矫正算法运算量;2、运用两个完全相同的遮波器,将通过第一个波波器后的信号反转再通过其次个速波器,再将其次个滤波器的输出序列反转作为整个系统的输出。综上我们采纳其次种方法,用MAT1.AB实现:clearclccloseall%生成一个信号Fs=I(XX);t=(O:l/Fs:l);y=sin(2*pl*5t+pi4)+sin(2*p50t+pl5)+sln(2*pi*60*t+pl12);yy=sin(2,pi*5*t+pi4);figure(l)subplot(211)Pot(t,y),gridontitle('输入信号波形,)XlabeI(V)ylabel(lmagnitudel)subplot(212)plot(t,angle(y)title。输入信号相位)XlabeICf)ylabel(,angle')%设计一个低通泄波器fp=10So0;%通带截止频率fs=3O/5OO;%阻带极止频率WP=3;%通带最大衰减ws=30;%阻带最大衰减(n,fc)=buttord(fp,fs.wp,ws);(b,a=btter(n,fc);figure(4)freqz(b,a);%将生成的信号通过低通滤波器z=filter(b,a,y);figure(2)subplot(221)Pot(t,z)title('通过第一个泄波器后的波形)XlabeICf)ylabel('output')axis(01-11)subplot(222)plot(t,angle(z)title('通过第一个滤波器后的相位)XlabeICt')ylabel(,a11ge')subplot(223)Pot(t,yy)titled理论上过迪后的波形xlabel('f)ylabel('output')a×is(01-11)subplot(224)plot(t,angle(y);title('原相位')XlabeICt');ylabel(,angle')zf=fliplr(z);%对经过第一个滤波器后的信号序列反转zfz=filter(b,a,zf);%对经过第一个谑波器后的信号序列反转再通过滤波器zz=fliplr(zfz);%时经过两次浊波器后的输出反转作为最终输出figuresubplot(221)Pot(t,zz)HtIeC通过两个泄波器后的波形)XlabeICt')ylabel('output')a×is(01-11)subplot(222)plot(t,angle(zz)title(,通过两个浊波器后的相位,)XlabeICt')ylabel(,angle,)subplot(223)Pot(t,yy)title。理论上过港后的波形,)xabel(,f)ylabel(,output,)axis(01-11)subplot(224)plot(t,angle(yy);title。原相位,)xabel(,f);ylabel(,angle,)%波形的前端和后渊有失真,所以对信号进行延拓fori=l=llytleft(i)=y(1002-i);ytright(i)=y(l2-i);endyt=ytleftyytright;tt=(0:3/(length(yt)-l):3);figure(5)subplot(211)plot(ttzyt)HtIeC通过镜像延拓后的输入信号波形)XlabeICt')ylabel(,input')subplot(212)plot(tt,angle(yt)titled通过镜像延拓后的输入信号的相位?xlabel('t')ylabel(,angle')%将生成的信号通过低通滤波器z=filter(b,a,yt);figure(6)subplot(221)Pot(tt,z)title。通过第个泄波器后的波形,)XlabeICt')ylabel(,output,)a×is(l211)subplot(222)plot(tt,angle(z)title(通过第一个滤波器后的相位,)xabel(,f)ylabel(,angle')axis(1204)subplot(223)plot(t,yy)titled理论上过油后的波形)XlabeICt')ylabel('output')axis(01-11)subplot(224)plot(t,angle(yy);Htle('原相位xlabel(,t,);ylabel(,angle,)axis(0104)zf=fliplr(z);zfz=filter(b,a,zn;%对经过第一个浊波器后的信号序列髭转再通过泄波器zz=fliplr(zfz);figure(7)subplot(221)fori=l:1001output(i)=zz(1001+i);endplot(t,output)HtIeC通过两个灌波器后的波形)xlabel('t')ylabel('output')axis(01-11)subplot(222)plot(t,angle(output)tit®,通过两个迪波器后的相位)xlabel('t')ylabel(,angle')axis(010411subplot(223)Pot(t,y)HtIeC理论上过滤后的波形xlabel('t')y1abel(,output,)axis(01-11)subplot(224)plot(t,angle(yy);titled原相位,)XlabeICt');ylabel('angle,)axis(010411输出结果:,1.WndgH>*口口目口1KEdtVwWtTdDHlaBO"d>、Y;/-2000010203040506070809NormalizedFfeqiMccy(Rnd<gg旬0010203040506070809NormalizedFrequency(Krsd>s3me)OF34file£dtVwIn«edTookDetkxopWindowHdpdj:,壮/-0口目;Q2000-100200-300-400BJ"e7