您当前的位置:首页 > 计算机 > 编程开发 > Python

一维序列卷积之Python实现

时间:09-05来源:作者:点击数:

在数字信号处理中经常会用到卷积计算,例如各种滤波器的设计。两个序列的卷积计算大体需要3步:1)翻转其中一个序列;2)移动翻转后的序列,并计算每次移动后两个序列的重叠面积;3)重复第2步,直至两个序列没有重叠部分。

def conv(lst1, lst2):

    '''用来计算两个列表所表示的信号的卷积,返回一个列表'''

    result = []

    #翻转第一个列表

    lst1.reverse()

    length1 = len(lst1)

    length2 = len(lst2)

    #移动翻转后的第一个列表,直到“完全移入”

    for i in range(1, length1+1):

        t = lst1[length1-i:]

        #计算重叠“面积”

        v = sum((item1*item2 for item1, item2 in zip(t,lst2)))

        result.append(v)

    #继续移动翻转后的第一个列表,直到“完全移出”

    for i in range(1, length2):

        t = lst2[i:]

        v = sum((item1*item2 for item1, item2 in zip(lst1,t)))

        result.append(v)

    return result

print(conv([1, 2, 3], [4, 5]))

当然,上面的代码主要是演示卷积的原理,在真正使用时,可以直接使用Python扩展库numpy和scipy来实现,例如下面的代码:

>>> import numpy as np

>>> import scipy.signal

>>> x = np.array([1,2,3])

>>> y = np.array([4, 5])

>>> scipy.signal.convolve(x, y)

array([ 4, 13, 22, 15])

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门