前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一维序列卷积之Python实现

一维序列卷积之Python实现

作者头像
Python小屋屋主
发布2018-04-16 14:21:58
3.4K0
发布2018-04-16 14:21:58
举报
文章被收录于专栏:Python小屋Python小屋

在数字信号处理中经常会用到卷积计算,例如各种滤波器的设计。两个序列的卷积计算大体需要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])

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2016-07-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python小屋 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档