一种分段卷积快速算法的设计与实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一种分段卷积快速算法的设计与实现
陈悦
【摘要】常用的线性卷积方法要求两个输入序列的持续时间相同,但在实际工程中经常会遇到某个输入序列具有较长持续时间的情况,从而无法达到信号"实时"处理的要求.在这种情况下,分段卷积是一种有效的解决方案.设计了一种分段卷积快速算法模块,在FPGA中采用流水线结构进行实时处理.经检验该方法正确且能很好地满足对信号进行实时处理的要求.
【期刊名称】《现代电子技术》
【年(卷),期】2008(031)017
【总页数】3页(P146-147,150)
【关键词】分段卷积;实时处理;重叠相加法;FPGA
【作者】陈悦
【作者单位】南京航空航天大学,金城学院,江苏,南京,211156
【正文语种】中文
【中图分类】TN911.72
1 引言
在理论上,信号x(n)(长度为M)通过数字系统h(n)(长度为N)后得到输出y(n)(长度为M+N-1),其中y(n)=x(n)*h(n)。
在实际工程中,这两个输入序列的长度可能相差很大,如N≪M。
在这种情况下,常采用快速线性卷积的方法来完成数据的
处理,该方法是先将长序列x(n)存储完毕之后再和短序列h(n)做卷积运算[1,2]。
但是,这样做存在以下两个问题:
(1) 需要对短序列h(n)补充零点使其长度和长序列x(n)一致,这样必然带来计算机存储量和存储空间的增加;
(2) 需要等待长序列x(n)全部产生之后才能将其输入系统并处理,这样必然使得整个系统存在较大的延时,不能实现对信号进行“实时”处理的要求。
为了解决这个问题,本文设计了一种工程应用型的准实时处理快速线性卷积的方法,即采用分段卷积[3,4]的设计思想将长序列x(n)分解成若干个较小的段,如每段长
为L,得xk(n),k=1,2,…M/L。
然后对每一个输入段xk(n)分别计算与h(n)做卷积得到的相应的输出yk(n),并将yk(n)按一定的规则首尾相加,即可得到完整的输
出y(n)。
由于数字系统的单位抽样响应h(n)一般比较短(如FIR数字滤波器),这样做即可以实现数字信号的“实时”处理要求。
根据分段方式的不同,分段卷积法分为重叠相加法(Overlap-add Method)和重叠保留法(Overlap-save Method)两种,本文主要以前者为基础完成设计。
2 重叠相加法的基本原理
假设x(n)的长度为M,h(n)的长度为N,且N≪M,将长序列x(n)按如下方式分成长度为L的连续有限长序列:
即子段之间不存在重叠。
因此,根据卷积的分配律得:
因此,将原始序列按不重叠分段后,x(n)和h(n)线性卷积等于各子段xk(n)和h(n)线性卷积yk(n)之和。
由于xk(n)和h(n)长度分别为L和N,所以yk(n)的长度为
L+N-1。
由于每一个子段的起点和后面紧邻的子段的起点相隔L-1个点,yk(n)和yk+1(n)将有M-1个非零点重叠。
因此,应该把该重叠部分加在一起才能得到正确的输出,这也正是重叠相加法名字的由来。
3 系统的总体结构
系统原理框图如图1所示,雷达信号由天线接收经微波前端折叠后,可得中频信号x(t),该信号经过A/D采样后得到数字信号x(n)并缓存在FIFO中,用于后续分段卷积数据的读取。
在控制模块的控制下,把缓存的采集数据进行分段并读取L 点数据xk(n)和干扰数据h(n)完成多次快速线性卷积,得到yk(n),将分段卷积结果yk(n)的重叠部分相加即得x(n)直接与干扰数据h(n)卷积的结果y(n),y(n)再经过D/A转换为中频干扰信号y(t),最后经微波前端折叠后由天线发射,从而完成了一次卷积干扰。
其中,虚框中为实现快速线性卷积方法的硬件平台,其各部分功能如下:
图1 系统原理框图
(1) 控制模块为该系统的控制核心,它负责整个系统的逻辑控制,包括记录x(n)的长度M,并根据M决定快速线性卷积的次数,控制重叠相加模块进行yk(n)的叠加,实时得到y(n)等。
(2) FIFO缓冲的主要功能是把A/D采集数据进行缓冲并为后续的信号处理提供
x(n)数据,适应ADC采样时钟和信号处理时钟不一致性。
(3) 干扰数据h(n)是预存储在FLASH里的被卷积数据,在实际中,使用频域相乘的方法代替卷积,所以用Matlab[5,6]把h(n)从时域转换到频域,故存储在FLASH中为干扰数据h(n)的频域数据,而非时域数据。
(4) 信号处理模块的主要功能是完成原始A/D采集数据的时频域转换、频域相乘和频时域转换操作。
在实现中,基本的线性卷积采用了在频域中相乘后转换到时域的方法来完成快速线性卷积。
该算法在硬件FPGA中实现,采用流水线式IP核来完
成FFT/IFFT,频域中把FFT结果和h(n)的频域值相乘来完成时域上的卷积运算,达到实时处理的目的。
(5) 重叠相加模块的主要功能是将分段卷积的重叠部分相加,即先对yk(n)进行N 个周期的延时,然后每输入一个线性卷积结果则和其N个周期前的结果相加即得最后结果y(n)。
4 分段卷积快速算法的验证
为了验证该分段卷积快速算法在实际应用中的正确性,可以将实际得到的结果和经Matlab计算得到的结果进行对比。
首先利用FPGA的虚拟逻辑分析仪Chipscope 把A/D原始数据x(n)、干扰数据h(n)和卷积结果y(n)以及部分中间结果采集到计算机里,然后利用Matlab把采集到的原始数据x(n)和干扰数据h(n)进行直接卷积得到计算结果y′(n),最后将采集到的卷积结果y(n)与计算结果y′(n)进行比较。
序列x(n)的长度M和h(n)的长度N可在FPGA编程中预先设置,但需要满足IP 核对FFT/IFFT数据长度的要求。
本文中为更好的说明问题,x(n)与h(n)的长度都较短,取M=256,N=128,但在实际工程应用上可以取N≪M。
Chipscope采集到的256点A/D原始数据x(n)、128点干扰数据h(n)以及部分中间结果y1(n)和y2(n)的数据显示结果如图2所示,采集到的实际分段卷积的最终结果y(n)以及利用Matlab对x(n)和h(n)进行直接卷积的结果y′(n)如图3所示。
图2 采集数据显示波形
从图3中可以看出,分段卷积后的累加结果与Matlab计算的结果是大体相同的,但数值上有所区别,
这是由于采用FPGA进行频谱变换的计算精度会远低于计算机的计算精度,因此可以认为分段卷积快速算法的计算结果与直接卷积结果是相同的。
图3 计算结果与采集波形比较
5 结语
本文阐述了分段卷积快速算法的实现方案。
由实际使用的效果表明,该系统能够很好地完成两个长度相差很大的序列进行卷积,满足对数据进行“实时”处理的要求。
参考文献
[1] Proakis J G,Manolakis D G.Introduction to Digital Signal
Processing[M].New York:Macmillan Publishing Company,1988.
[2] Sophocles J O.Introduction to Signal Processing[M].Prentice-Hall,1996.
[3] 胡广书.数字信号处理[M].北京:清华大学出版社,2004.
[4] 邵朝,阴亚芳,卢光跃.数字信号处理[M].北京:北京邮电大学出版社,2003.
[5] 刘敏,魏玲.Matlab通信仿真与应用[M].北京:国防工业出版社,2001.
[6] 张志涌.精通Matlab 6.5版[M].北京:北京航空航天大学出版社,2003.。