1、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)实现 yk=xk+2*xk-1y1=x1+2*0=1%(x1之前状态都用0)y2=x2+2*x1=2+2*1=4 a. 下面程序是用来实现h和x的卷积得,分别用了filter和conv函数,两者函数得出的结果一样。h = 3 2 1 -2 1 0 -4 0 3; % impulse response
2、x = 1 -2 3 -4 3 2 1; % input sequencey = conv(h,x);n = 0:14;subplot(2,1,1);stem(n,y);xlabel(Time index n); ylabel(Amplitude);title(Output Obtained by Convolution); grid;x1 = x zeros(1,8);y1 = filter(h,1,x1);subplot(2,1,2);stem(n,y1);xlabel(Time index n); ylabel(Amplitude);title(Output Generated by F
3、iltering); grid; 要实现下式的冲击响应和阶跃响应,可以分别采用三种方法。yn+0.75yn-1+0.125yn-2=xn-xn-1。b. 单位冲激响应:(1)用filter函数 a1=1,0.75,0.125;b1=1,-1;n=0:20;x1=1 zeros(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=1 zeros(1,10);h=impz(b1,a1,10);y1conv
4、=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,a
5、1,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(y1n);(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表示冲击响应输出的序列个数。