线性卷积简洁实用版

前言
线性卷积在信号处理的过程中,面对的基本是离散,有限的序列。所以,我们只讨论这个过程。以下讨论基于序列x[n]=[1,2,3,4] h[m]=[1,2,3],其中x[n]是输入序列,h[n]是卷积核.
1 卷积过程
卷积行为
1 2 3 逆转 为 3 2 1
第一步:
3 2 1             
    1 2 3 4
第二步:
3 2 1
  1 2 3 4
第三步:
3 2 1
1 2 3 4
第四步:
  3 2 1
1 2 3 4
第五步:
    3 2 1
1 2 3 4
第六步:
      3 2 1
1 2 3 4

每次计算重合部分,对应位置相乘,然后相加的总数.结果如下:
1 4 10 16 17 12
同时根据上面可以推算出结果长度为:n+m-1
2 计算过程

可以采取直接计算的方案,我这里就不再叙述,还有另外一种效率不错的方案
[时域卷积等于频域相乘]

import numpy as np
import scipy.signal as sig
from scipy.fftpack import fft, ifft

hx = [1, 2, 3]
x = [1, 2, 3, 4]

res = sig.convolve(hx, x)
print(res)
res2 = sig.fftconvolve(hx, x)
print(res2)
res3 = ifft(fft(hx, len(x)+len(hx)-1) * fft(x, len(x)+len(hx)-1))
print(res3)

result:
[ 1  4 10 16 17 12]
[ 1.  4. 10. 16. 17. 12.]
[ 1.+0.00000000e+00j  4.+1.33226763e-15j 10.+0.00000000e+00j
 16.-1.17892386e-15j 17.+0.00000000e+00j 12.-1.53343765e-16j]
3 其他
因为我这里需要用到互相关的情况,需要去获取如下的计算
hx: 1 2 3
x:  1 2 3 4

hx:  1 2 3
x :1 2 3 4

对应位置相乘相加: 14 26

这个可以使用上面的计算方式来做,即计算 x 与hx反转后的卷积,同时将前后hx-1去除即可,再优化一下
将hx反转,然后补零跟x长度一致,然后进行卷积,最后得到结果长度为len(x),此时将前len(hx)-1去除即可
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值