matlab求卷积
发布网友
发布时间:2022-04-26 08:53
我来回答
共2个回答
热心网友
时间:2022-06-26 04:09
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)')
这个程序可以实现任何情况的卷积
热心网友
时间:2022-06-26 04:09
就这个问题来说, 如果你就当这两个都是从1开始的, 直接卷积掉, 结果是5个数, 第一个数就是x(1)*h(1), 这也是你要的卷积当中的一个, 只是在你要的结果里,这个是x(0)*h(-1) ,所以在结果的序号是-1而不是1, 所以你只要把结果平移就可以了
因为matlab不支持负数序号的数组, 所以你最好只是“在心里平移”就好了, 就是说你保存的还是这个结果, 只是写程序的时候记住了, 这个是从-1开始的
你只需要在画图的时候指定横坐标
plot(-1:3, conv(x, h))