数字信号处理重叠保留法
北邮《数字信号处理》Matlab实验——实现重叠相加和重叠保留算法完成线性卷积的分段计算

实验目的:
实现重叠相加和重叠保留算法,完成线性卷积的分段计算(可任意指定 x(n)及 h(n)) 。
试验内容:
1、对算法的概括性说明
重叠相加法是将待过滤的信号分割成长为 N 的若干段,每一段都可以和有限时宽单位 取样响应作卷积,再将过滤后的各段重叠相加。建立缓存序列,每次输入 N 点序列,通过 计算 x(n)和 h(n) 的循环卷积实现线性卷积运算,将缓存的 M‐1 点序列和卷积结果相加,并 输出前 N 点作为计算结果,同时缓存后 M‐1 点,如此循环,直至所有分段计算完毕,则输 出序列 y(n)为最终计算结果。
5、总结实验过程中出现的问题以及解决问题的具体措施
1.利用自定义函数解决代码重复使用的问题,避免多次输入同样代码。 2.构造分段补零不会实现,通过上网查资料后获得实现相关功能的代码。
可见, 用重叠相加法和重叠保留发分别计算的卷积结果与直接利用线性卷积计算的结果 一致。算法正确性得以验证。
4、结合教材 3.5.1 节作运算量分析
若有限长因果序列 x(n)和 h(n)的长度分别为 N 和 M,计算其线性卷积 y(n),需 MN 次乘 法运算,(M‐1)(N‐1)次加法运算。如果利用循环卷积方法,按基 2 时域抽选法实现 L 点 FFT 和 IFFT,需
3、实验结果
输入(参考教材例 3.4、3.5) :
n = 0:9; xn = n+1; hn = [1,0,-1]; N = 6;
y1 = conv(hn, xn) y2 = overlap_add(xn, hn, N) y3 = overlap_save(xn, hn, N)
输出:
y1 = 1 y2 = Columns 1 through 10 1.0000 2.0000 2.0000 2.0000 2.0000 2.0000 2.0000 2.0000 2.0000 2 2 2 2 2 2 2 2 2 -9 -10
DSP大作业2

重叠相加法和重叠保留法对于很长序列和短序列进行卷积,可采用重叠相加法和重叠保留法进行快速实现。
课本上只是通过公式图形来讲解,十分抽象。
许多人对这两种方法产生混淆,不理解,不会应用,特别是重叠保留法。
下面就先给出基本原理,再用实例讲解分析。
设h(n)的点数为M,信号x(n)为很长的序列。
重叠相加法是将长序列x(n)分解为很多段,每段x i(n)长度为L,L和M数量级相同。
将每段x i(n)和h(n)补零到N点(N>=L+M-1),用圆周卷积得到每段线性卷积的值,相邻两段输出序列的重叠M-1值相加得到正确值。
重叠保留法也是将长序列x(n)分解为很多段x i(n),但是每相邻段重叠M-1值取值(对第一段采取前面补M-1个零值),使得每段长度为N点,做N点的x i(n)和h(n)圆周卷积,将每段输出结果前M-1值去掉,剩下的值连结起来就是正确值。
下面就举例说明它们的用法。
例题1:已知 x(n)=(n+1),05≤≤, h(n)={1,0,1},分别用重叠相n加法和重叠保留法求解x(n)*h(n)。
解:通过直接卷积可知x(n)*h(n)值为 {1 2 2 2 2 2 -5 -6}。
解法一:重叠相加法已知M=3,令L=4, 将x(n)分段,得:x1(n)={1 2 3 4 };x2(n)={5 6 0 0 };将每段做N=8的圆周卷积。
x1(n) ⑧ h(n) ={1 2 2 2 -3 -4 0 0 }x2(n) ⑧ h(n) ={5 6 -5 -6 0 0 0 0}则:y1=x1(n)* h(n)= {1 2 2 2 -3 -4}y2=x1(n)* h(n)= {5 6 -5 -6}将y1尾部和y2头部值重叠 M-1=2点相加,得到y(n)={1 2 2 2 2 2 -5 -6}。
与直接卷积x(n)*h(n)值比较,发现两值相等。
说明此法正确。
解法二:重叠保留法已知M=3, 将x(n) 重叠 M-1=2点分段,每段长度为4,得:x1(n)={0 0 1 2 };x2(n)={1 2 3 4 };x3(n)={3 4 5 6 };x4(n)={5 6 0 0 };将每段做N=4的圆周卷积,得:y1=x1(n) ④ h(n) ={-1 -2 1 2 };y2=x2(n) ④ h(n) ={-2 -2 2 2 };y3=x3(n) ④ h(n) ={-2 -2 2 2 };y4=x4(n) ④ h(n) ={5 6 -5 -6 };每段输出去掉前M-1点,将剩下的值连接起来,得到y(n)={1 2 2 2 2 2 -5 -6}。
重叠相加法和重叠保留法的原理与实现

重叠相加法与重叠保存法的原理实现侯凯(吉林大学 通信工程学院 吉林 长春 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 -1d.求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()0i 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)卷积,然后再将这些卷积结果相加起来就可得到输出序列,这样,每一段的卷积都可用上面讨论的快速卷积来计算。
重叠相加法 重叠保留法点数与序列的关系

重叠相加法重叠保留法点数与序列的关系重叠相加法和重叠保留法是在数值计算中常用的两种方法,用于计算序列或信号的运算结果。
1. 重叠相加法(Overlap-Add Method):
重叠相加法主要用于将长序列分解为多个较短的子序列进行处理。
具体步骤如下:
a. 将长序列划分为多个重叠的子序列,通常称为帧(Frame),帧之间有一定的重叠区域。
b. 对每个帧进行一定的处理(例如滤波、变换等)得到相应的子序列结果。
c. 将所有子序列结果进行重叠相加,得到最终的运算结果。
重叠相加法的优点是可以处理长序列,同时在处理过程中可以利用较短的子序列进行计算,从而减少计算量。
但是在相加过程中会引入重叠部分的累加误差,需要注意处理。
2. 重叠保留法(Overlap-Save Method):
重叠保留法也是将长序列分解为多个较短的子序列进行处理的方法,与重叠相加法不同的是,重叠保留法中的子序列是没有重叠的。
具体步骤如下:
a. 将长序列划分为多个不重叠的子序列,通常称为块(Block)。
b. 对每个块进行一定的处理得到相应的子序列结果。
c. 在处理过程中保留每个块的部分结果,将所有块的结果进
行拼接得到最终的运算结果。
重叠保留法的优点是可以避免重叠相加带来的累加误差,但是需要注意保留和拼接过程中的精度控制。
总结:
重叠相加法和重叠保留法都是在处理长序列时常用的方法。
它们通过将长序列分解为多个较短的子序列进行处理,从而减少计算量。
重叠相加法引入了重叠部分的累加误差,而重叠保留法通过不重叠的方式避免了此类误差。
具体选择使用哪种方法取决于应用场景和计算需求。
“数字信号处理”中重叠保留法的证明

一
Ke wo ds: v ra a e meh d;cr u a o v l to y r o el p s v t o ic l rc n ou in;l a o v l to i rc n ou i n ne
>
1●J
L
,L
离散 线 性 时 不 变 系统 的 响应 为 系 统 脉 冲 响 应 序列 ( ) 凡 与输入序列 ( ) 几 的线性卷积 , 通常 h n ()
v r o ri fnt e u n e e y lng o n i s q e c .Asf ra n w,ma y txbo k n d gt i n lp o e sn e c i e t e se f i e a s we k o n e t o s o iia sg a r c s i 来自 d s rb h tp o l
=
Z +地 。
卷积 , 而离 散傅 里 叶变 换 可 以通 过 快速 傅 里 叶变 换
“ 信号与系统” 课程 中给出的 ( ) h n 的线 n与 ()
性卷 积定 义 为
完成。例如 , 计算一段语音信号通过一个 FR滤波 I 器的响应就是这种情况 。先 简单介绍 “ 数字信 号处 理 ” 程 中的循 环卷 积 的定义 。 课
第3卷 3
第 6期
电气电子教学学报
J 0UR NAL OF EE E
No _ 3 No 6 l3 .
De . 01 c2 l
21 0 1年 1 2月
‘ 字 信 号 处 理 " 重 叠 保 留 法 的 证 明 ‘ 数 中
李昌利 霍冠英 ,
( 河海大学 计算机与信息学院, . 南京 2 10 , . 1 江苏 1 10 2 江苏 常州 2 32 ) 102
数字信号处理课后答案西电

1.2 教材第一章习题解答1. 用单位脉冲序列及其加权和表示题1图所示的序列。
解:2. 给定信号:(1)画出序列的波形,标上各序列的值;(2)试用延迟单位脉冲序列及其加权和表示序列;(3)令,试画出波形;(4)令,试画出波形;(5)令,试画出波形。
解:(1)x(n)的波形如题2解图(一)所示。
(2)(3)的波形是x(n)的波形右移2位,在乘以2,画出图形如题2解图(二)所示。
(4)的波形是x(n)的波形左移2位,在乘以2,画出图形如题2解图(三)所示。
(5)画时,先画x(-n)的波形,然后再右移2位,波形如题2解图(四)所示。
3. 判断下面的序列是否是周期的,若是周期的,确定其周期。
(1),A是常数;(2)。
解:(1),这是有理数,因此是周期序列,周期是T=14;(2),这是无理数,因此是非周期序列。
5. 设系统分别用下面的差分方程描述,与分别表示系统输入和输出,判断系统是否是线性非时变的。
(1);(3),为整常数;(5);(7)。
解:(1)令:输入为,输出为故该系统是时不变系统。
故该系统是线性系统。
(3)这是一个延时器,延时器是一个线性时不变系统,下面予以证明。
令输入为,输出为,因为故延时器是一个时不变系统。
又因为故延时器是线性系统。
(5)令:输入为,输出为,因为故系统是时不变系统。
又因为因此系统是非线性系统。
(7)令:输入为,输出为,因为故该系统是时变系统。
又因为故系统是线性系统。
6. 给定下述系统的差分方程,试判断系统是否是因果稳定系统,并说明理由。
(1);(3);(5)。
解:(1)只要,该系统就是因果系统,因为输出只与n时刻的和n时刻以前的输入有关。
如果,则,因此系统是稳定系统。
(3)如果,,因此系统是稳定的。
系统是非因果的,因为输出还和x(n)的将来值有关.(5)系统是因果系统,因为系统的输出不取决于x(n)的未来值。
如果,则,因此系统是稳定的。
7. 设线性时不变系统的单位脉冲响应和输入序列如题7图所示,要求画出输出输出的波形。
【免费下载】数字信号处理杨毅明习题答案

《数字信号处理》杨毅明,部分练习题参考答案1《数字信号处理》杨毅明,部分练习题参考答案第1章1.(1)模拟信号。
(2)模拟信号。
(3)数字信号。
2.(1)分时测量。
(2)数字信号。
3.(1)麦克风。
(2)模拟信号。
4. 数字信号。
5. 数字信号处理。
6. 数字信号处理的方法。
7. 模拟电路的功率放大器。
8. 光电信号转换、低通滤波、模数转换、数字信号处理、数模转换、低通滤波和电声信号转换。
12. 数字方式。
第2章1. x(n)=18δ(n-8)+20δ(n-10)+21δ(n-12)+21δ(n-14)+20δ(n-16)+17δ(n-18)。
2. x(n)=0.5δ(n)+0.866δ(n-1)+δ(n-2)+0.866δ(n-3)+0.5δ(n-4)。
4. x(n)=2R 5(n+5)+2R 5(n-10)。
5.(1)x(n)不是周期序列。
(2)y(n)是周期序列。
6. 自然频率f=10Hz 。
7.(1)根据标准的相关系数公式,v(n)的波形比w(n)的更像u(n);(2)根据简化的相关系数公式,不能确定v(n)和w(n)哪个最像u(n)。
9. 。
)2()1(2)(2)1()(-+-+++=n n n n n r xy δδδδ10. 卫星和地球表面的距离=1200km 。
11. 该系统没有线性性质,但有时不变性质。
12. 该系统不是线性时不变系统,但它是时不变系统。
13. 。
)3()2(2)1(2)()1()()(33-+-+-+=-+=n n n n n R n R n y δδδδ14. 将R 3(n+2)向右平移2点。
15.(1)不能绝对可和。
(2)乘上一个绝对值小于1的指数序列。
16. 。
)()5.0(2)(n u n h n-=17. 。
)1(6.0)(3)(-+=n y n x n y 18. 。
)1()()(-+=n ay n bx n y 20. 。
)()()(d n n As n s n x -+=21. 。
数字信号处理判断题

判断题1、 信号可定义为传载信息的函数2、模拟信号就是时间连续的信号3、连续时间信号就是时间连续的信号4、离散时间信号就是时间离散的信号5、数字信号就是时间幅度都是离散的信号6、系统就是反映信号处理因果关系的设备或运算7、连续时间系统就是输入输出都是连续时间信号的系统8、数字信号处理精度高9、数字信号处理不可时分复用10、数字信号处理可靠性强,但灵活性不大1、√2、×3、√4、√5、×6、√7、√8、√9、× 10、×1、理想取样可以看成实际取样的科学的本质的抽象2、连续时间的取样造成频谱的周期重复3、连续时间信号的取样可能发生频谱混叠4、离散时间信号可用序列表示5、两序列相乘就是对应序列值相乘6、所有正弦序列都是周期的7、所有复指数序列都是周期的8、当h(n)为因果序列时,系统一定是因果的9、当h(n)绝对可和时,系统一定是稳定的 10、)(1)(n u n n h =,则系统是稳定的 11、)(2)(n u n h n -=,系统是非因果的不稳定系统 12、2)()(+=n x n y ,系统是线性的 13、)()(n x a n y n =,系统是时变的14、离散时间线性非时变系统可用常系数线性差分方程描述15、系统频率响应是指系统对不同频率的正弦序列的不同传输能力16、系统频率响应是连续的非周期的17、系统频率响应是周期的,周期为2π18、任何序列的傅里叶变换都是存在的19、实序列的傅里叶变换是共轭对称的20、Z 变换的收敛域可以是方形区域21、Z 变换的收敛域是以极点来限定边界的22、双边序列的Z 变换的收敛域为环域23、)(n ∂的收敛域为整个Z 平面24、傅里叶变换就是单位圆上的Z 变换25、系统函数收敛域包括单位圆,则系统稳定26、系统函数的收敛域在环内,则系统是因果的27、极点、零点都在单位圆内,系统是最小相位系统28、极点在单位圆内,零点有在单位圆内,也有在单位圆外,则系统是最大相位系统29、极点在单位圆内,零点有在单位圆内,也有在单位圆外,则系统是非最小相位系统30、非最小相位系统可以看成最小相位系统和全通函数相乘1、√2、√3、√4、√5、√6、×7、×8、√9、√ 10、×11、× 12、× 13、√ 14、√ 15、× 16、× 17、√ 18、× 19、√ 20、×21、√ 22、√ 23、√ 24、√ 25、√ 26、× 27、√ 28、× 29、√ 30、√1、离散傅里叶变换在一个域里边是周期的,则另一个域是连续的2、离散傅里叶变换在一个域里边是非周期的,则另一个域是离散的3、离散傅里叶变换一个域里边周期的倒数是另一个域的周期4、DFT 是DFS 取主值5、DFT 不隐含周期性6、DFT 不是连续傅里叶变换的近似7、DFT 是X(z)在单位圆上的等间隔取样8、DFT 的综合就是X(z)9、DFT 和IDFT 可用一套程序计算10、补零增长可使谱线变密11、x(n)反转,X(k)也反转。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计任务书学生姓名:专业班级:指导教师:黄朝兵工作单位:信息工程学院题目:基于重叠保留法圆周卷积的实现初始条件:具备数字信号处理的理论知识;具备Matlab编程能力;分析重叠保留法的圆周卷积的原理;提供编程所需要的计算机一台要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1、独立编写程序实现基于重叠保留法的圆周卷积2、用Matlab验证程序结果,并分析重叠保留法的圆周卷积的原理3、完成符合学校要求的设计说明书时间安排:一周,其中3天程序设计,2天程序调试指导教师签名:年月日系主任(或责任教师)签名:年月日目录摘要 (1)1 概述 (2)2 理论分析 (3)2.1圆周卷积与线性卷积 (3)2.2圆周卷积的计算 (4)2.3重叠保留法 (5)3 程序设计 (7)3.1程序流程 (7)3.2程序流程图 (8)3.3具体程序设计 (9)3.4编写完整的程序 (10)4 结果及分析 (11)5 心得体会 (12)参考文献 (13)摘要重叠保留法在运用时,随着数据规模的增大,运算耗时呈线性增长。
当数据达到千万量级时,运算延时最少大约为2.335s,由此可见,此方法可运用于对信号的实时处理,同时重叠保留法具有较好的时间和空间复杂度。
本次课程设计以matlab为工具得到重叠保留法的源程序,通过对序列的线性卷积计算,进而对重叠保留法进行更深层次的认识。
关键字:重叠保留法序列线性卷积 matlab1 概述对于一个长序列()n x 1和一个短序列()n x 2,长度分别为N ,M ,圆周卷积的长度为L ,在长序列的前面加上1-M 个零,然后对长序列进行分段,使得每段的长度为L 不足的用零补。
且前一分段的后1-M 个抽样值和后一分段的前1-M 个抽样值相同。
这样形成的分段序列为:.()()⎩⎨⎧-≤≤+-+=其他,010,11L n M kN n x n x k (1.1)分成的段数为:12+⎥⎦⎤⎢⎣⎡-+=L M N k (1.2) 然后计算()n x 2与各个分段之间的圆周卷积,()()()()()⎩⎨⎧≤≤==其他,,01-L n 1-M y ⊙y '12'n n y n x n x n k k k k (1.3)显然,()n k 'y 的前1-M 个值发生了混叠,不等于()n x 2和()n x k 1的圆周卷积,把()n k 'y 的前1-M 个值舍去,保留没发生混叠的后N 个值,形成序列:()()⎩⎨⎧≤≤=其他,,01-L n 1-M y 'n n y k k (1.4)最后将各段相加就可以得到最终的结果,()()∑+∞-∞=-+-=k kM kN n y n y 1 (1.5)2 理论分析2.1圆周卷积与线性卷积设)(1n x 和)(2n x 为长度为N 的有限长序列,且[])()(11k X n x DFT =,[])()(22k X n x DFT =,如果()()()k X k X k Y 21=,则()()[]k Y IDFT n y =()()()()n R m n x m x N N N m -=∑-=1102 (2.1.1)证明:相当于将)(~),(~21n x n x 作周期卷积和后,再取主值序列。
将)(k y 周期延拓:)(~)(~~21k X k X k Y =)(则有:[]()()⎥⎦⎤⎢⎣⎡-=-==∑∑-=-=10211021))(()(~)(~)(~)(~N m N N N m m n x m x m n x m x k Y IDFS n y (2.1.2)在主值区间)())((,1011m x m x N m N =-≤≤ ,所以:()()()n R m n x m x n R n y n y N N m N N ⎥⎦⎤⎢⎣⎡-==∑-=1021)()()(~)( (2.1.3) 同样可以证明:()())()()(1012n R m n x m x n y N N m N ⎥⎦⎤⎢⎣⎡-=∑-= (2.1.4)定义式(1)为序列)(1n x 与)(2n x 的圆周卷积,习惯表示为()()()n n x y 21x ⊙n = (2.1.5) 从以上的证明过程也可以得出圆周卷积与周期卷积之间的关系,即有限长序列圆周卷积结果的周期延拓等于它们周期延拓后的周期卷积。
也就是说,周期卷积的主值序列是各周期序列主值序列的圆周卷积。
线性卷积是求离散系统响应的主要方法之一,许多重要应用都建立在这一理论基础上,如卷积滤波等。
用圆周卷积计算线性卷积的方法归纳如下:将长为N2的序列x(n)延长到L,补L-N2个零,将长为N1的序列h(n)延长到L,补L-N1个零。
如果L ≥N1+N2-1,则圆周卷积与线性卷积相等,此时,可有FFT 计算线性卷积,方法如下:a.计算X(k)=FFT[x(n)]b.求H(k)=FFT[h(n)]c.求Y(k)=H(k)X(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)接近,其处理方法有两种:重叠相加法和重叠保留法。
本文讨论重叠保留法。
2.2计算圆周卷积圆周卷积的具体步骤为:第一步:在哑元坐标上做)(1m x 与)(2m x ; 第二步:把)(2m x 沿着纵坐标翻转,得到)(2m x -; 第三步:对)(2m x -做圆周移位,得()()()n R m n x N N -2;第四步:)(1m x 与()()()n R m n x N N -2对应的相同m 的值进行相乘,并把结果进行相加,得到的对应于自变量n 的一个()n y ;第五步:换另一个n ,重复第三、四步,直到n 取遍[0,N-1]中的所有值,得到完整的()n y 。
2.3重叠保留法为了克服重叠相加法中分段卷积后,仍然需要相加的缺点,人们提出了重叠保留法。
这种方法和重叠相加法稍有不同,即将重叠相加法中补零的部分不是补零,而是保留原来的输入序列值,且保留在各段的前端,这时,如利用DFT 实现h(n)和xi(n)的圆周卷积,则每段卷积结果的前N1-1个点不等于线性卷积值需舍去。
为了清楚地看出这点,研究一下x(n)中一段长为N 的序列xi(n)与h(n)(长为N1)的圆周卷积情况: 10()()()()(())()N i i i N N m y n x n h n x m h n m R n -==⊗=-∑ (2.3.1)由于h(n)的长度为N1,当0≤n ≤N1-2时,h((n-m))N 将在xi(m)的尾部出现有非零值,所以0≤n ≤N1-2这部分yi(n)值中将混入xi(m)尾部与h((n-m))N 的卷积值,从而使yi(n)不同于线性卷积结果,但当n=N1-1~N-1时,则有h((n-m))N =h (n-m ),因此从n=N1-1点开始圆周圈卷积值完全与线性卷积值一样,yi(n)的后面N2点才是正确的卷积值,而每一段卷积运算结果的前N1-1点个值需去掉。
图2.1 重叠保留过程为了不造成输出信号遗漏,对x(n)分段时,需使相邻两段有N1-1个点的重叠(对于第一段,x(n)由于没有前一段保留信号,在其前填补N1-1点个零点)。
为此将xi(n)定义为21(1)01()0i x n iN N n N x n +-+≤≤-⎧=⎨⎩其它每段和h(n)的圆周卷积以yi(n)表示,()()()i i y n x n h n =⊗ ,由FFT 算出,去掉yi(n)的前N1-1点,再把相邻各段输出顺次连接起来就构成了最终的输出序列y(n)。
重叠保留法每一输入段均由N-N1+1=N2个新点和前一段保留下来的N1-1个点所组成。
值得注意的是,对于有限长时间序列x(n)(长度为L=MN2),在结束段(i=M-1)做完后,我们所得到的只是L点的线性卷积,还少了N1-1点,实际上就是h(-n)移出x(n)尾部时的不完全重合点,或者说是最后一段的重叠部分N1-1少做了一次卷积,为此,因再补做这一段N1-1点,在其后填补N2点个零点保证长度仍为N点,一样舍去前取N1-1点,并从N1-1点开始,保留N1-1点。
重叠保留法与重叠相加法的计算量差不多,但省去了重叠相加法最后的相加运算。
一般来说,用FFT作信号滤波,只用于FIR滤波器阶数h(n)大于32的情况下,且取N2=(5~10)N1,这样可接近于最高效的运算。
3 程序设计3.1程序流程要实现基于重叠保留法的圆周卷积,假设有两个长度分别为N,M (M N >)的序列()n x 1,()n x 2,要求做()n x 1和()n x 2L 的圆周卷积。
首先要对长序列序列()n x 1进行分段,分段的长度选圆周卷积的长度L ,形成的分段序列:()()⎩⎨⎧-≤≤+-+=其他,010,11L n M kN n x n x k (3.1.1)然后将()n x 2逐一和各分段()n x k 1进行圆周卷积,得到:()n x x n y k k 12⊙)(= (3.1.2)()()()∑-=-=112L m L LkR m n x m x最后输出序列:()()∑+∞-∞=-+-=k kM kN n y n y 1 (3.1.3)这样即完成了基于重叠保留法的圆周卷积的实现。
同样,我们可以根据FFT 计算线性卷积,方法如下: a.计算Xi(k)=FFT[xi(n)] b.求H(k)=FFT[h(n)]c.求Y(k)=H(k)Xi(k) k=0~L-1d.求y(n)=IFFT[Y(k)] n=0~L-1可见,只要进行二次FFT,一次IFFT 就可完成线性卷积计算。
3.2程序流程图图3-2 重叠保留法圆周卷积运算流程图3.3具体程序设计首先编写基于重叠保留法的圆周卷积的主函数。
这个主函数的功能应当是计算出两个序列的长度Lx、M,将长序列进行分段,然后再将短序列和长序列的各个分段分别进行圆周卷积,将分段卷积的的结果序列的前M-1个值舍去,将各个结果合并到一个序列中去,输出这个新序列,程序功能基本完成。
主函数的编写过程如下:定义主函数:function [Y]=overlpsav(x,h,N)计算两个序列的长度:Lx=length(x);M=length(h);计算FFT运算序列长度:L=M+N-1;x序列前加M-1个0,序列后加N个0:x=[zeros(1,M-1),x,zeros(1,N)];求截取的段数:a=floor((Lx+M-1)/N);对h做快速傅里叶变换:c=fft(h,L);设置for循环,截取x的某一段xk,对xk进行FFT变换,对Y(k)=X(k)*H(k)进行反傅里叶变换,截取前M-1点,保留其余点:for K=0:axk=x(K*N+1:K*N+L);b=fft(xk,L);H=ifft(b.*c,L);Y(K*N+1:K*N+N)=H(M:L);end将所有保留的点相连:Y=Y(1:Lx+M-1);3.4编写完整的程序function [Y]=overlpsav(x,h,N) Lx=length(x); M=length(h);L=M+N-1;x=[zeros(1,M-1),x,zeros(1,N)]; a=floor((Lx+M-1)/N); c=fft(h,L); for K=0:a xk=x(K*N+1:K*N+L); b=fft(xk,L); H=ifft(b.*c,L); Y(K*N+1:K*N+N)=H(M:L); end Y=Y(1:Lx+M-1);4 结果及分析假设有这样的两个序列,序列1为x={1,2,3,4,5,6,7,8,9},序列2为h={3,2}要求这两个序列基于重叠保留法的的圆周卷积。