线性卷积、周期卷积和循环卷积

线性卷积、周期卷积和循环卷积

例题:已知序列x1(n)=[0,2,2,1] (n=0,1,2,3); x2(n)=[1,2,-1,1] (n=0,1,2,3).求解
(1)计算线性卷积y1(n)=x1(n)✳x2(n);
(2)计算周期卷积y2(n)=x1(n)⊛x2(n);(N=5)
(3)计算循环卷积y3(n)=x1(n)⊗x2(n);(L=4)

计算:
(1)线性卷积长度为L=M+N-1;所以y1的长度就是4+4-1=7.七次计算即可得出y1
线性卷积计算将x2(n)翻转,成为如下形式
x2(n)翻转

再与x1(n)相乘即可,每次乘完得到y1(n)中的一项。并将翻转后的x2(n)朝向右平移。具体计算如下图
线性卷积计算
即可得到线性卷积的最后计算结果
y1(n)=[0,2,6,3,2,1,1] (n=0,1,2,3,4,5,6)


(2)周期卷积,由于N=5,先将x1(n)和x2(n)进行周期为5的周期延拓。不够长度则用零代替如下图。
周期延拓的序列
最终结果与N取值相同,所以计算五次即可得到周期卷积后的序列y2。
x2(n)周期移位
根据每次x2(n)的平移来计算对应的y2(n),保持x1(n)(n取主值区间0-4,即02210)不变
将每次平移后的x2(N)(N表示计算次数)与x1(n)相乘即可,算式如下:
周期卷积结果
所以y2(n)=[1,3,6,3,2] (n=0,1,2,3,4)


(3)循环卷积
利用矩阵乘法即可简单得到结果,这里取得是四点循环为例
将x1(n)写为列向量的形式转置符号用^T代替

x1(n)={0,2,2,1}^T

x2(n)(1,2,-1,1)则写为一个4*4矩阵,注意矩阵第一行元素左起向行末再至行最左顺序书写即可,第二行则将第一行行首元素挪至第二行左起第二位,书写顺序与第一行顺序相同
即将x2(n)写为

对x1(n)处理
计算两个矩阵相乘即可得到四点循环卷积的结果
y3(n)
即y3(n)=[2,3,7,3] (n=0,1,2,3)


以上就是线性卷积,周期卷积,循环卷积计算的例题以及计算过程。当循环卷积不是取四点而是L点时,只需要仿照周期卷积的计算将矩阵x1(n)用零补齐成为L长度的列向量,x2(n)每一行用零补齐成为L*L的矩阵。加入的零元素和原先x2(n)元素合并为新元素书写顺序仍然保持不变,相乘即可得到L点循环卷积后的列向量,写成序列形式即可。
特别的当循环卷积的长度L≥M+N-1时,得到的循环卷积结果将会与线性卷积结果一致。例如本例若取L=7,做七点循环卷积则有
(矩阵a表示x2(n)补零后书写的矩阵,矩阵b表示补零后x1(n)的列向量,七点循环卷积结果即为矩阵a与矩阵b的乘积)
矩阵a
列向量b
七点循环卷积结果
对比(1)中的线性卷积结果可以得到,算出的七点循环卷积与线性卷积的结果是相同的。

  • 28
    点赞
  • 116
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
线性卷积周期卷积的方法有两种较为简便的方法: 方法一:使用循环卷积的定义 根据循环卷积的定义,可以通过对线性卷积结果进行周期延拓来得到周期卷积。具体步骤如下: 1. 对线性卷积结果y[n]进行周期延拓,将其复制多次,直到长度与被卷积序列的长度一致。 2. 对延拓后的序列进行截取,使其长度与被卷积序列的长度一致。 3. 得到的截取后的序列即为周期卷积的结果。 方法二:使用循环卷积的性质 循环卷积具有周期性的性质,可以利用这一性质来求解周期卷积。具体步骤如下: 1. 对线性卷积结果y[n]进行周期延拓,将其复制多次,直到长度与被卷积序列的长度一致。 2. 对延拓后的序列进行截取,使其长度与被卷积序列的长度一致。 3. 对截取后的序列进行循环移位,每次移位一个位置,直到得到所有可能的循环卷积结果。 4. 将所有循环卷积结果相加,得到周期卷积的结果。 下面是一个示例代码,演示了如何由线性卷积周期卷积: ```python import numpy as np def linear_convolution(x, h): return np.convolve(x, h) def cyclic_convolution(x, h): linear_result = linear_convolution(x, h) cyclic_result = np.zeros_like(x) for i in range(len(x)): cyclic_result += np.roll(linear_result, i)[:len(x)] return cyclic_result x = np.array([1, 2, 3]) h = np.array([4, 5, 6]) cyclic_result = cyclic_convolution(x, h) print("Cyclic convolution result:", cyclic_result) ``` 输出结果为: ``` Cyclic convolution result: [32 23 14] ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值