重叠相加法和重叠保留法的原理与实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
重叠相加法与重叠保存法的原理实现
侯凯
(吉林大学 通信工程学院 吉林 长春 130012)
0概述
线性卷积是求离散系统响应的主要方法之一,许多重要应用都建立在这一理论基础上,如卷积滤波等。
用圆周卷积计算线性卷积的方法归纳如下:
将长为N 2的序列x(n)延长到L,补L-N 2个零,将长为N 1的序列h(n)延长到L,补L-N 1个零。如果L ≥N1+N2-1,则圆周卷积与线性卷积相等,此时,可有FFT 计算线性卷积,方法如下:
a.计算X(k)=FFT[x(n)]
b.求H(k)=FFT[h(n)]
c.求Y(k)=H(k)Y(k) k=0~L-1
d.求y(n)=IFFT[Y(k)] n=0~L-1
可见,只要进行二次FFT,一次IFFT 就可完成线性卷积计算。 上述结论适用于x(n)、h(n)两序列长度比较接近或相等的情况,如果x(n)、h(n)长度相差较多。例如,h(n)为某滤波器的单位脉冲响应,长度有限,用来处理一个很长的输入信号x(n),或者处理一个连续不断的信号,按上述方法,h(n)要补许多零再进行计算,计算量有很大的浪费,或者根本不能实现。为了保持快速卷积法的优越性,可将x(n)分为许多段后处理,每小段的长与h(n)接近,其处理方法有两种:重叠相加法和重叠保留法。
1重叠相加法——由分段卷积的各段相加构成总的卷积输出
假定x i (n)表示图中第i 段x(n)序列如下图:
22()(1)1
()0
i x n iN n i N x n ≤≤+-⎧=⎨
⎩
则输入序列可表为:()()i
i x n x n ∞
=-∞
=
∑
图1 长序列分段滤波
于是输出可分解为: ()()*()()*()()i
i
i
i i y n x n h n x n h n y n ∞∞
=-∞
=-∞
==
=∑∑
其中 ()()*()i i y n x n h n =
由此表明,只要将x(n)的每一段分别与h(n)卷积,然后再将这些卷积结果相加起来就可得到输出序列,这样,每一段的卷积都可用上面讨论的快速卷积来计算。先对h(n)及x i (n)补零,补到具有N 点长度,N=N1+N2-1。 一般选择N=2M ,然后用基2 FFT 算法通过正反变换计算 ()()*()i i y n x n h n =
由于y i (n)长度为N ,而x i (n)的长度为N 2,因此相邻两y i (n)序列必然有N-N 2=N 1-1点发生重叠,这个重叠部分应该相加起来才能构成最后的输出序列。
计算步骤:
a. 事先准备好滤波器参数()[()]H k DFT h n =,N 点
b.用N 点FFT 计算[()]i i X DFT x n =
c.()()()i i Y k X k H k =
d.用N 点IFFT 求()[()]i i y n IDFT Y k =
e.将重叠部分相加 ()()i
i y n y n ∞
=-∞
=
∑
图2 重叠相加法示意图
2重叠保存法
这种方法和第一种方法稍有不同,即将上面分图序列中补零的部分不是补零,而是保留原来的输入序列值,且保留在各段的前端,这时,如利用DFT 实现h(n)和x i (n)的圆周卷积,则每段卷积结果的前N 1-1个点不等于线性卷积值需舍去。
为了清楚地看出这点,研究一下x(n)中一段长为N 的序列x i (n)与h(n)(长为N1)的圆周卷积情况: 1
0()()()()(())()N i i i N N m y n x n h n x m h n m R n -==⊗=-∑
由于h(n)的长度为N 1,当0≤n ≤N 1-2时,h((n-m))N 将在x i (m)的尾部出现有非零值,所以0≤n ≤N 1-2这部分y i (n)值中将混入x i (m)尾部与h((n-m))N 的卷积值,从而使y i (n)不同于线性卷积结果,但当n=N 1-1~N-1时,则有h((n-m))N
=h (n-m ),因此从n=N 1-1点开始圆周圈卷积值完全与线性卷积值一样,y i (n)的后面N 2点才是正确的卷积值,而每一段卷积运算结果的前N 1-1点个值需去掉。
图2 重叠保留过程
为了不造成输出信号遗漏,对x(n)分段时,需使相邻两段有N 1-1个点的重叠(对于第一段,x(n)由于没有前一段保留信号,在其前填补N 1-1点个零点)。为此将x i (n)定义为
21(1)01()0
i x n iN N n N x n +-+≤≤-⎧=⎨
⎩其它
每段和h(n)的圆周卷积以y i (n)表示,()()()i i y n x n h n =⊗ ,由FFT 算出,去掉y i (n)
的前N 1-1点,再把相邻各段输出顺次连接起来就构成了最终的输出序列y(n)。
重叠保留法每一输入段均由N-N 1+1=N 2个新点和前一段保留下来的N 1-1个点所组成。值得注意的是,对于有限长时间序列x(n)(长度为L=MN 2),在结束段(i=M-1)做完后,我们所得到的只是L 点的线性卷积,还少了N 1-1点,实际上就是h(-n)移出x(n)尾部时的不完全重合点,或者说是最后一段的重叠部分N 1-1少做了一次卷积,为此,因再补做这一段N 1-1点,在其后填补N 2点个零点保证长度仍为N 点,一样舍去前取N 1-1点,并从N 1-1点开始,保留N 1-1点。
重叠保留法与重叠相加法的计算量差不多,但省去了重叠相加法最后的相加运算。一般来说,用FFT 作信号滤波,只用于FIR 滤波器阶数h (n )大于32的情况下,且取N 2=(5~10)N 1,这样可接近于最高效的运算。 3应用举例 例:已知有长序列X=[1,2,3,4,5,6,7,8,9,1,2,3,4,5,6,7,8,9,0,0,1,2,3,4,5,6,7,8,9,0,], h=[3,2,1,4,5],求线性卷积。 解:重叠相加法得:
Y=[3,8,14,24,39,54,69,84,99,87,84,90,69,39,54,69,84,99,84,76,79,53,14,24,39,54,69,84,99,84,76,76,45,0] 程序:function [Y]=overpl(x,h,N) %N 为分段段长度;x 为长序列;h 为短序列 Lx=length(x); M=length(h);
x=[x,zeros(1,N)];