您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 国内外标准规范 > Matlab中filter,conv,impz用法
Matlab中filter、conv、impz函数的区别在MATLAB中,可以用函数y=filter(p,d,x)实现差分方程的仿真,也可以用函数y=conv(x,h)计算卷积,用y=impz(p,d,N)求系统的冲激响应。实现差分方程先从简单的说起:filter([1,2],1,[1,2,3,4,5])实现y[k]=x[k]+2*x[k-1]y[1]=x[1]+2*0=1%(x[1]之前状态都用0)y[2]=x[2]+2*x[1]=2+2*1=4a.下面程序是用来实现h和x的卷积得,分别用了filter和conv函数,两者函数得出的结果一样。h=[321-210-403];%impulseresponsex=[1-23-4321];%inputsequencey=conv(h,x);n=0:14;subplot(2,1,1);stem(n,y);xlabel('Timeindexn');ylabel('Amplitude');title('OutputObtainedbyConvolution');grid;x1=[xzeros(1,8)];y1=filter(h,1,x1);subplot(2,1,2);stem(n,y1);xlabel('Timeindexn');ylabel('Amplitude');title('OutputGeneratedbyFiltering');grid;要实现下式的冲击响应和阶跃响应,可以分别采用三种方法。y[n]+0.75y[n-1]+0.125y[n-2]=x[n]-x[n-1]。b.单位冲激响应:(1)用filter函数a1=[1,0.75,0.125];b1=[1,-1];n=0:20;x1=[1zeros(1,20)];y1filter=filter(b1,a1,x1);stem(n,y1filter);title('y1filter');xlabel('x');ylabel('y');(2)用conv函数a1=[1,0.75,0.125];b1=[1,-1];x1=[1zeros(1,10)];[h]=impz(b1,a1,10);y1conv=conv(h,x1);n=0:19;stem(n,y1conv,'filled')(3)用impz函数a1=[1,0.75,0.125];b1=[1,-1];impz(b1,a1,21);c.单位阶跃响应:(1)用filter函数a1=[1,0.75,0.125];b1=[1,-1];n=0:20;x2=ones(1,21);y1filter=filter(b1,a1,x2);stem(n,y1filter);title('y1filter_step');xlabel('x');ylabel('y');(2)用conv函数a1=[1,0.75,0.125];b1=[1,-1];x2=ones(1,21);[h]=impz(b1,a1,20);y1=conv(h,x2);y1conv=y1(1:21);%为何y1conv要取y1中1:21的值,解释见n1=0:20;%y2单位阶跃响应用conv函数中注释stem(n1,y1conv,'filled');title('y1conv');xlabel('n');ylabel('y1[n]');(3)用impz函数a=[1,0.75,0.125];b=1;impz(b,a)即y=filter(p,d,x)用来实现差分方程,d表示差分方程输出y的系数,p表示输入x的系数,而x表示输入序列。输出结果长度数等于x的长度。而y=conv(x,h)是用来实现卷级的,对x序列和h序列进行卷积,输出的结果个数等于x的长度与h的长度之和减去1。y=impz(p,d,N)是用来实现冲击响应的,d和p的定义见filter,N表示冲击响应输出的序列个数。
本文标题:Matlab中filter,conv,impz用法
链接地址:https://www.777doc.com/doc-3967256 .html