离散卷积函数
function [f,k]=dconv(f1,f2,k1,k2) %f=f1*f2
f=conv(f1,f2)
k0=k1(1)+k2(1); %f非零样值起点位置
k3=length(f1)+length(f2)-2; %f非零样值宽度
k=k0:k0+k3 %f非零样值序号向量
subplot(2,2,1)
stem(k1,f1)
axis([(min(min(k1),min(k2)-1)),(max(max(k1),max(k2))+1),(min(f)-0.5),(max(f)+0.5)])
title('f1(k)')
xlabel('k')
ylabel('f1(k)')
subplot(2,2,2)
stem(k2,f2)
axis([(min(min(k1),min(k2)-1)),(max(max(k1),max(k2))+1),(min(f)-0.5),(max(f)+0.5)])
title('f2(k)')
xlabel('k')
ylabel('f2(k)')
subplot(2,2,3)
stem(k,f)
axis([(min(min(k1),min(k2)-1)),(max(max(k1),max(k2))+1),(min(f)-0.5),(max(f)+0.5)])
title('f1(k)*f2(k)')
xlabel('k')
ylabel('f(k)')
h=get(gca,'position');h(3)=2.5*h(3);
set(gca,'position',h) %横坐标扩大2.5倍
例程
f1=ones(1,4);
k1=0:3;
f2=ones(1,3);
k2=0:2
dconv(f1,f2,k1,k2)
运行结果
解差分方程
代码
a=[1 -3 2]
b=[1 0 2];
k=0:20;
x=(1/2).^k;
dk=zeros(1,length(k));
dk(1)=1; %单位单位冲击序列
uk=ones(1,length(k));
subplot(4,1,1)
stem(k,x)
title('输入序列x(k)')
ydk=filter(b,a,dk); %单位冲激响应样值
subplot(4,1,2)
stem(k,ydk)
title('单位冲激响应')
yuk=filter(b,a,uk); %单位阶跃响应样值
subplot(4,1,3)
stem(k,yuk)
title('单位阶跃相应')
y=filter(b,a,x);
subplot(4,1,4)
stem(k,y)
title('激励信号为x(k)的零状态响应')
运行结果