信号与系统

线性卷积

信号x[n]={1, 2, 3, 4, 5, 6, 7, 8, 9},系统脉冲响应h[n]={1, 2, 4},把信号输入到系统,即做卷积y[n]=x[n]*h[n]

从直观的时间顺序来看,时间轴从左往右,则x[1]应该在x[0]的左边,所以把x[n]反转一下来展示,如下是0时刻的情况,只有x[0]进入系统,则输出是1\times 1=1

时间-8-7-6-5-4-3-2-1012
信号987654321  
系统        124

 

如下是1时刻的情况,只有x[0]x[1]进入系统,则输出是2\times 1+1\times2=4

时间-8-7-6-5-4-3-2-1012
信号 987654321 
系统        124

 

同理可得其余输出,注意最有一个输出是只有x[8]在系统中的情况,因此输出是9\times4=36

用如下代码可以计算出以上结果:

import numpy as np

xn = np.array([i for i in range(1, 10)])
hn = np.array([1, 2, 4])
yn = np.convolve(xn, hn)

print(yn)

#输出:[ 1  4 11 18 25 32 39 46 53 50 36]

接下来不用np来实现这个操作。计算时无需反转x[n]。如下表,用x[n]\times h[0],得到下表的第一行,然后用x[n]\times h[1],得到下表的第二行;第三行同理。然后把前三行累加即可得到第四行。

123456789  
 24681012141618 
  4812162024283236
14111825323946535036

 

实现代码如下:

import numpy as np

xn = np.array([i for i in range(1, 10)])
hn = np.array([1, 2, 4])

out_len = len(xn) + len(hn) - 1
out = np.array([0 for _ in range(out_len)])

for i, v in enumerate(hn):
    tmp = xn * v
    out[i:len(tmp)+i] += tmp
print(out)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值