线性卷积与圆周卷积的计算方法

本文介绍线性卷积和圆周卷积的计算方法。通过实例详细解释了如何进行乘积及位移操作,展示了两种卷积之间的数据一致性特点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

现在很多工具里都已经为我们实现好了线性卷积和圆周卷积的函数,所以在实现方面简单调用一下即可。如matlab中,
conv用于计算线性卷积,而cconv用来计算圆周卷积

在国内搜了很多计算圆周卷积的例子,居然鲜有人提到cconv函数,而都是人云亦云都抄袭一套自实现函数,真是有点意想不到。

下面直接上干货,简单介绍一下线性卷积和圆周卷积的计算方法

线性卷积

线性卷积的计算网上有很多,这里就不一一介绍了。我个人使用的方式也很好理解,
例如
x(n) = {1,5,7,3,2,1,6,9}
h(n) = {2,4,6,1,3}

可以通过将x(n)中的每个数字从左往右乘以h(n)

1|  2   4     6    1    3
5|       10    20  30    5  15
7|              14   28    42 7    21
..................                   

以此类推,如下图示,乘积后的结果再错位相加。得到的结果即为线性卷积结果。
线性卷积计算图示

圆周卷积

介绍圆周卷积的方法真的比较少,大多讲诉的都不易理解。我个人的计算方法是这样的,参考链接可以看这里

首先,将h(n)根据x位数在尾部补零,即为 h(n) = {2,4,6,1,3,0,0,0}.
翻折

第二步,将h翻折,开始位移。
在位移一步时,剩下的位子,将尚未移动的部分填充。
填充
第三步,填充后,对应的每一位相乘后再相加。
相乘相加

对应上面的结果就是

1*2+5*0+7*0+3*0+2*3+1*1+6*6+9*4 = 2+0+0+0+6+1+36+36=81

这个实际上就是圆周卷积的y[0]

后面重复上面的步骤,位移,填充,相乘相加,直到h位移结束
示例图如下,
圆周卷积示例图

数据一致性

这里可以看到,圆周卷积和线性卷积的结果不是完全一致的。相同部分我用绿色标注出来了。有一个结论,关于圆周卷积和线性卷积。大家可以记一下

一般的,如果两个有限长序列的长度为N1 和 N2,且满足 N1>=N2 ,则圆周卷积的后
N1-N2+1个点,与线性卷积的结果一致。

这里N1=8,N2=5,所以 8-5+1=4个点后的结果一致

那么是不是必然这样吗?
如果N1>2*N2的话,这种方法的圆周卷积出来的结果是完全一致的。
下面是一个例子,
另外的例子

注意事项

  1. 上面数据一致性的讨论(特别是完全一致时)是基于我在本文中的圆周卷积实现方法的前提下说的
  2. matlab中的cconv函数计算出来的圆周卷积是和线性卷积一致的,并且它的结果是浮点型。效果如下,
    matlab效果

最后我把计算线性卷积和圆周卷积的方法做成了excel,大家如果有兴趣的话可以在这里下载。https://download.csdn.net/download/mimiduck/13105696

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值