欢迎来到天天文库
浏览记录
ID:24697267
大小:225.01 KB
页数:13页
时间:2018-11-11
《基于重叠相加法圆周卷积的实现》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、武汉理工大学《信号分析与处理》课程设计说明书目录摘要Ⅰ1理论学习11.1圆周卷积原理11.2重叠相加法21.3重叠相加法圆周卷积41.4线性卷积、圆周卷积、重叠相加法、DFT、FFT之间的联系52程序设计62.1程序设计思路62.2程序设计流程图72.3程序代码73程序调试与结果与分析9心得体会11参考文献1212武汉理工大学《信号分析与处理》课程设计说明书1理论学习1.1圆周卷积原理对两个N点序列和,除了可以做线性卷积外,还有一种很重要的卷积运算,就是圆周卷积。令则圆周卷积结果长度不变,为N.由上式可以得出圆周卷积与周期卷积的关系,就是有限长序列圆周卷积结果的周期延拓,
2、等于它们周期延拓后的周期卷积。也就是说,周期卷积的主值序列,是各周期序列主值序列的圆周卷积。若、分别是长度为N、M的序列则与线性卷积至多M+N-1个非零值,如果LM+N-1时,周期延拓才不会发生混叠。之所以讨论用圆周卷积来计算线性卷积的条件,是因为圆周卷积可在频域下利用DFT求得,从而可采用DFT的快速算法FFT来计算,这样就可以利用FFT来计算线性卷积,大大提高运算效率。12武汉理工大学《信号分析与处理》课程设计说明书圆周卷积的实现步骤如下图:图1.1圆周卷积的实现步骤1.2重叠相加法DFT是连续傅里叶变换
3、在时域和频域上都离散的形式,将时域信号的采样变换为在离散时间傅里叶变换频域的采样。在形式上,变换两端(时域和频域上)的序列是有限长的。DFT具备明确且合理的物理含义,适合应用于数字系统,同时可以方便地由计算机进行运算。对于线性非移变离散系统,可由线性卷积表示时域输入输出关系,即y(n)=x(n)*h(n)12武汉理工大学《信号分析与处理》课程设计说明书通常采用循环卷积降低运算量,但实际中往往无法满足对信号处理的实时性要求。因此,产生了重叠相加法,用以快速计算线性卷积,成为了DFT的一个重要应用。重叠相加法是将待过滤的信号分割成长为N的若干段,如图1所示,每一段都可以和有限
4、时宽单位取样响应作卷积,再将过滤后的各段重叠相加。具体算法实现原理如图2所示,建立缓存序列,每次输入N点序列,通过计算x(n)和h(n)的循环卷积实现线性卷积运算,将缓存的M-1点序列和卷积结果相加,并输出前N点作为计算结果,同时缓存后M-1点,如此循环,直至所有分段计算完毕,则输出序列y(n)为最终计算结果。图1.2重叠相加法的分段示意图图1.3重叠相加法算法示意图12武汉理工大学《信号分析与处理》课程设计说明书1.3重叠相加法圆周卷积在实际应用中利用FFT来计算两个序列的圆周卷积从而实现计算其线性卷积,但是常遇到的问题是参加卷积的两个序列的长度相差较大,这样长度小的序
5、列就需要补很多的零点,这样就需要较大的存储量,运算时间也会变长。所以常用到的解决方法有两种,其中一种就是重叠相加法。h(n)长度为N,x(n)长度为无限长,x(n)取M点,且与N尽量接近x(n)与h(n)的卷积为图1.4重叠相加法的卷积示意图重叠相加法的步骤如下(1)将h(n)补零延长到L=M+N-1,并计算长为L的FFT,得到H(k)。12武汉理工大学《信号分析与处理》课程设计说明书(2)分别将xk(n)补零延长到L=M+N-1,并计算长为L的FFT,得到Xk(k)(3)计算,并求长为L的反变换,即(4)将yk(n)的重叠部分相加,最后得到结果为1.4线性卷积、圆周卷积
6、、重叠相加法、DFT、FFT之间的联系由时域与频域的关系可知,两序列和在时域下进行线性卷积的结果等于这两个序列在频域下相乘后进行反变换回时域的结果。圆周卷积在一定条件下(L>M+N-1)与线性卷积得到的结果相同,而圆周卷积可在频域下利用DFT求得,从而可采用DFT的快速算法FFT来计算,这样就可以利用FFT来计算线性卷积,大大提高运算效率。而在利用FFT来计算圆周卷积的过程中当两序列的长度相差较大时采用重叠相加法来进行计算可有效提高计算的效率,减小存储空间的消耗。12武汉理工大学《信号分析与处理》课程设计说明书2程序设计2.1程序设计思路函数conv(x1,x2,L)设计
7、(1)x1(n)进行N点快速傅里叶变换得X1(k)(2)x2(n)进行N点快速傅里叶变换得X2(k)(3)进行频域相乘Y(k)=X1(k)*X2k(4)对Y(k)进行反变换得到时域卷积结果y(n)函数overlap_add(x,h,N)设计方案1:(1)首先取长序列x(n)进行分段的长度N,以使其分段后的长度与较短的相近(2)确定圆周卷积的周期L(3)填充序列使得循环中对序列的索引不会超出范围(4)确定分段数K(5)对序列进行分段调用conv()函数计算圆周卷积(6)各段重叠相加(7)取出实际的输出序列方案2:(1)首先取圆周
此文档下载收益归作者所有