重叠相加法计算卷积

本文详细介绍了线性时不变系统中如何使用重叠相加法进行线性卷积的计算,以降低计算量,实现实时滤波。这种方法通过将输入序列拆分为小区间,与系统冲激响应进行卷积,再叠加重叠部分,有效减少了运算复杂度。同时,文章给出了C语言实现的算法流程,包括FFT和IFFT的运用,以及具体的代码示例。

一 原理

​ 我们知道,对于一个线性时不变系统来说,当给定其离散的输入序列时,要想计算该序列通过该线性时不变系统所引起的零状态响应时,可以使用该序列与该系统的冲激响应序列相卷积进行求解,也即式(1-1-1).
y(n)=∑k=−∞∞x(k)h(n−k)(1-1-1) y(n)=\sum_{k=-\infty}^{\infty}x(k)h(n-k) \tag{1-1-1} y(n)=k=x(k)h(nk)(1-1-1)
实际进行编程时,我们可能需要使用三重循环来进行计算,但是当输入的数据序列无限长,而线性时不变系统的冲激响应序列比较短时,该方法会有很大的计算量.尤其是进行实时滤波,我们不可能要把所需要使用的输入序列都收集完毕后再进行运算,而是希望能够一边输入序列,一边进行计算.重叠相加法计算线性卷积是这样的,首先将输入序列x(n)x(n)x(n)拆分成许多的小区间,
然后用每一个小区间和冲击序列h(n)h(n)h(n)进行卷积计算,最后将所得的每一个序列重叠部分进行叠加即可,算法的可行性见式(1-1-2),示意图见式(1-1-3).
y(n)=x(n)∗h(n)=h(n)∗∑k=0∞xk(n)=∑k=0∞yk(n)(1-1-2) y(n)=x(n)*h(n)=h(n)*\sum_{k=0}^{\infty}x_k(n)=\sum_{k=0}^{\infty}y_k(n) \tag{1-1-2} y(n)=x(n)h(n)=h(n)k=0xk(n)=k=0yk(n)(1-1-2)
在这里插入图片描述

实际上计算输入序列小区间和冲激序列卷积时,可以利用圆周卷积计算,而圆周卷积的计算可以用FFTFFTFFT进行.

二 算法流程

  1. i=0,L=M+N−1i=0,L=M+N-1i=0,L=M+N1;计算并保存H(k)=DFT[h(n)]LH(k)=DFT[h(n)]_LH(k)=DFT[h(n)]L;

  2. 读入xi(n)=x(n)RM(n−iM)x_i(n)=x(n)R_M(n-iM)xi(n)=x(n)RM(niM),并计算保存X(k)=DFT[xi(n)]LX(k)=DFT[x_i(n)]_LX(k)=DFT[xi(n)]L;

  3. Yi(k)=H(k)Xi(k)Y_i(k)=H(k)X_i(k)Yi(k)=H(k)Xi(k)

  4. yi(n)=IDFT[Yi(k)]L,n=0,1,2,⋯ ,L−1y_i(n)=IDFT[Y_i(k)]_L,n=0,1,2,\cdots,L-1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值