matlab怎样求卷积?
function [f,k]=sconv(f1,f2,k1,k2,p)
%计算连续信号卷积积分f(t)=f1(t)*f2(t)
%f:卷积积分f(t)对应的非零样值向量
%k:f(t)的对应时间向量
%f1:f1(t)非零样值向量
%f2:f2(t)的非零样值向量
%k1:f1(t)的对应时间向量
%k2:f2(t)的对应时间向量
%p:取样时间间隔
f=conv(f1,f2);
f=f*p;
k0=k1(1)+k2(1);
k3=length(f1)+length(f2)-2;
k=k0:p:k0+k3*p;
subplot(2,2,1)
plot(k1,f1);
title('f1(t)');
xlabel('t');
ylabel('f1(t)');
subplot(2,2,2);
plot(k2,f2);
title('f2(t)')
subplot(2,2,3)
plot(k,f);
h=get(gca,'position');
h(3)=2.5*h(3);
set(gca,'position',h);
title('f(t)=f1(t)*f2(t)')
xlabel('t');
ylabel('f(t)')
如果你就当这两个都是从1开始的, 直接卷积掉, 结果是5个数, 第一个数就是x(1)*h(1), 这也是你要的卷积当中的一个, 只是在你要的结果里,这个是x(0)*h(-1) ,所以在结果的序号是-1而不是1, 所以你只要把结果平移就可以了
因为matlab不支持负数序号的数组, 所以你最好只是“在心里平移”就好了, 就是说你保存的还是这个结果, 只是写程序的时候记住了, 这个是从-1开始的
你只需要在画图的时候指定横坐标
plot(-1:3, conv(x, h))
2013-11-19
在MATLAB中,可以用函数y=filter(p,d,x)实现差分方程的仿真,也可以用函数 y=conv(x,h)计算卷积;
即y=filter(p,d,x)用来实现差分方程,d表示差分方程输出y的系数,p表示输入x的系数,而x表示输入序列。输出结果长度数等于x的长度。