按照定义公式编写程序实现序列卷积、相关运算

题目所说根据定义自己编写卷积函数,虽然matlab已经提供了强大的conv,但为了加强对卷积定义的理解,所以我们自己动手编写一个卷积函数。(相信你肯定是个学生党~)

 

 

function[s] = my_conv(a,b)  %输入为两个有限长序列,输出s为卷积结果
s = [];
al = length(a);
bl = length(b);
if al < bl  %这里我们将长的序列幅值给a,短的序列为b
    c = a;
    a = b;
    b = c;
    al = length(a);
    bl = length(b);
end   
b = fliplr(b);  %根据定义,b序列先翻转在右移,此处进行的是反转操作。
for i = 1:bl    %第一个大For循环,此处右移1个到bl个,是因为当右移bl+1个时a(1)就不再加入到求和运算了
    sum1 = 0;
    for n = 0:i-1 %此处是对重合部分求和,理解此循环范围可以将i取个定值
        sum1 = sum1 + a(i-n)*b(bl-n);
    end
    s(i) = sum1;
end
sl = length(s);
for x = 1:al-bl %第二个大for循环
    sum2 = 0;
    for y = 1:bl
        sum2 = sum2 + a(x+y)*b(y);
    end
    s(sl+x) = sum2;
end
sl = length(s);
for z = 1:bl-1 %第三个大for循环
    sum3 = 0;
    for w = 1:bl-z
        sum3 = sum3 +a(al-bl+z+w)*b(w);
    end
    s(sl+z) = sum3;
end
%因为matlab索引第一个值是a(1)是1开头的,python和其他一些语言中用a[0]来索引第一个值,书上索引序列第一个也是0来索引,所以可以好好理解一下代码中各个索引值的含义。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值