python实现重叠保留法和重叠相加法分段计算卷积

概念

在音频信号处理中,卷积是很常见的信号处理方式,例如fir滤波器,卷积的计算公式也非常简单,对于输入信号 x ( t ) x(t) x(t)和系统 h ( t ) h(t) h(t),卷积的计算公式如下:

y ( t ) = ∑ m = 0 M x ( t − m ) h ( m ) y(t)=\sum_{m=0}^{M}x(t-m)h(m) y(t)=m=0Mx(tm)h(m)

很明显这种方式需要我们完全知道输入信号 x ( t ) x(t) x(t)才能与 h ( t ) h(t) h(t)计算卷积,实际应用中我们不可能预先获得整个信号,全部输入完之后才开始计算,因为这会造成输出有很大的延时,实际应用中我们往往都是按帧进行音频信号处理,例如每10ms一帧进行处理,然后实时返回处理后的信号,这时候我们就需要根据音频每帧信号,进行分段卷积。

分段卷积根据方式不同,有重叠相加法和重叠保留法两种,下面分别介绍两种方法

重叠相加法

重叠相加法基本思想是将长序列 x ( t ) x(t) x(t)分为若干个子段 x k ( t ) x_k(t) xk(t),每个子段长为 L L L,然后每个子段 x k ( t ) x_k(t) xk(t)分别与长度为M的 h ( t ) h(t) h(t)进行卷积得到每段的卷积结果 y k ( t ) y_k(t) yk(t),每段卷积的结果长度为 L + M − 1 L+M-1 L+M1,其中后 M − 1 M-1 M1为重叠部分,将重叠的部分相加一起合并起来便得到结果 y k ( t ) y_k(t) yk(t),示意图如下:
在这里插入图片描述

为了看的更清楚,我们举一个最简单的例子:
我们定义 x k ( t ) = [ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 ] x_k(t)=[0,1,2,3,4,5,6,7,8,9,10,11] xk(t)=[0,1,2,3,4,5,6,7,8,9,10,11] h ( t ) = [ 0 , 1 , 2 , 3 ] h(t)=[0,1,2,3] h(t)=[0,1,2,3]
使用python计算卷积:

import numpy
x = np.arange(12)
h = np.arange(4)
y = np.convolve(x,h)

输出如下:

x: [ 0  1  2  3  4  5  6  7  8  9 10 11]
h: [0 1 2 3]
y: [ 0  0  1  4 10 16 22 28 34 40 46 52 58 52 33]

我们将x分为3段,每段长为4:

x0 = x[0:4]
x1 = x[4:8]
x2 = x[8:12]

每段 x k ( t ) x_k(t) x

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值