复数乘法运算的优化方法研究与实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
复数乘法运算的优化方法研究与实现
李立珺
【摘要】The implementation of traditional complex multiplier needs 4 multipliers and 2 adders.Multipliers are very precious in FPGA.This paper gives two optimized methods for complex multiplication.One method can save 25% of the multiplier; the other can save 50%.Also the optimized implementation structure can support high-speed requirements with pipeline in digital signal processing.At the same time,this paper gives the optimized example of FIR filters and conjugate complex multiplication.%传统的复数乘法器实现需要4个乘法器和2个加法器.在现场可编程门阵列(FPGA)中乘法器资源是非常宝贵的,因此,给出了两种复数乘法的优化算法,一种方法可以节省25%的乘法器资源,另一种可以节省50%的乘法器资源,而且其实现架构可以使用流水线满足高速数字信号处理的要求.同时,还给出了数字信号处理中常用的有限冲激响应(FIR)滤波器和共轭复乘的优化实例.
【期刊名称】《电子设计工程》
【年(卷),期】2013(021)013
【总页数】4页(P156-158,161)
【关键词】复数乘法;共轭复乘;有限冲激响应滤波器;现场可编程门阵列
【作者】李立珺
【作者单位】西安邮电大学陕西西安710121
【正文语种】中文
【中图分类】TN79
随着通信及信息处理技术的发展,现代数字信号处理的速度要求越来越高,并且,随着无线传输的频段越来越丰富,无线传输的信道环境越来越差,这就需要大量数字信号处理算法去消除信道引入的干扰。
数字信号处理中,最为关键、采用最多的运算器件就是乘法器。
由于乘法器的实现是耗费资源的,因此在采用逻辑资源实现乘法器以及复数乘法器的优化实现方面,已经有很多研究成果[1-4]。
针对乘法器和复数乘法器如何在FPGA 中更有效的使用,在一些专著中给出了一些优化方法[5,6],以及两大FPGA 提供商也给出了一些指导性的文档[7-9]。
前述研究成果其目的在于如何有效利用逻辑资源去实现乘法器或复数乘法器,前述的专著或指导文档对于FPGA 中如何节约乘法器资源也只是基于数字信号处理的速度比较低,采用时分复用的优化方法。
在高速数字信号处理中,最为常用的复数乘法器以及FIR 滤波器的架构如何优化,这方面的研究较少。
文中针对最常用的复数乘法器给出了两种优化实现的架构,在实现复数乘法运算时分别可以节省25%和50%的乘法器资源。
并结合直接型的FIR 滤波器实现架构给出了直接型FIR 滤波器的资源优化实现架构。
同时也针对共轭复乘给出了相关的优化方法。
本文所给出的优化方法,基本可以适用于所有的数字信号处理电路,尤其对于高速的数字信号处理,可以在节省资源的情况下,能够利用流水线满足高速信号处理的要求。
1 复数乘法器基本结构
复数乘法运算广泛的用于数字信号处理的设计中,假设有两个复数x1=a+bj 和
x2=c+dj 相乘,如式(1)所示:
其中,I=ac-bd,Q=ad+bc。
其直接实现方法就是分别求出ac、bd、ad 和的乘积,然后分别计算I 和Q 的值,其直接实现架构如图1 所示。
由图1 可以看出,复数乘法的直接实现占用了4个乘法器,2个加法器。
在实际设计的过程中,乘法器比加法器要耗费更多的资源;并且即使使用FPGA 中的乘法器IP 核来做乘法,其乘法器的IP 核资源也是十分有限的。
如果设计中所采用的乘法器的运行时钟频率不是很高,远小于FPGA 所能支持的最高速率,可以使用时分复用的方式来节省乘法器资源。
例如,如果要求复数乘法的运行频率为25 M,那么我们可以只使用一个乘法器,使其运行在100 MHz 或更高的频率上,用串行的方式依次计算出、、和的值,然后在利用加法器计算出和的值。
但是,如果复数乘法器的运行时钟频率非常高,接近于FPGA 所能支持的最高速率,那我们就要采用其他方法来节省乘法器资源了。
下面给出几种复数乘法器的优化实现方法。
图1 复数乘法的直接实现Fig.1 Direct implementation of complex multiplication
2 使用3个乘法器的复数乘法优化结构
2.1 原理推导
使用3个乘法器的复数乘法,参考文献[6]给出了一种方法,即对I=ac-bd 做如下分解:
进一步化简得到:
由于式(2)中,计算I 的时候,已经计算出了bc 和ad 的结果,因此,只需再用一个加法器,就可以得到Q 的计算结果。
虽然利用式(2)节省了一个乘法器,但是,其实现架构却不利于完全采用FPGA 中的乘法器IP 核来实现,还必须附加额外的逻辑资源,这样不利用高速(400 M 以上)的复数乘法运算,因此还需对其进一步优化。
注意到,对于式(1)中的I
和Q,还可以作如下分解:
由式(3)和式(4)可以看出,I 和Q 经过因式分解之后,虽然还是4个乘积项
的形式,但是,其中有一项(a-b)d 是I 和Q 的运算中相同的,因此,可以减少一次乘法运算,只需要使用3个乘法器就可以完成复数乘法运算。
其实现架构如
图2所示。
图2 所示的复数乘法实现架构可以完全采用FPGA 中的乘法器IP 核来实现,不需要额外的逻辑资源,可以运行在很高的速率上。
2.2 优化算法应用于复数FIR 滤波器
数字信号处理中,最常用的一类滤波器就是FIR 滤波器,其数学表达式为
如果h(k)和x(n)都为实数,以N=4为例画出其基本的实现架构如图3 所示[5,7]。
在通信信号处理中,我们常会碰到h(k)和x(n)为复数的情况,令h(k)=a (k)+jb(k)以及x(n)=c(n)+jd(n),那么,式(4)可以变换为
图2 使用3个乘法器的复数乘法实现Fig.2 Implementation of complex multiplication with 3 multipliers
图3 FIR 滤波器的实现(N=4)Fig.3 Implementation of FIR filter(N=4)
进一步整理得到
常规的实现方案是根据式(6)利用4个图3 所示的实现架构,分别计算出式(6)
中的4个乘积和项,再利用加法器最终求得y(n)的实部和虚部。
利用式(3)和式(4)的分解方法,可以将式(6)的实部和虚部分别分解为
其中,,其实现架构分别如图4 中的(a)、(b)和(c)所示。
求出yI1(n)、yI2(n)和yQ2(n)之后,就可以利用式(7)和式(8)计算
出yI(n)和yQ(n)的值。
可以看出,相比传统的实现架构,利用图4 的优化
实现架构可以节省N个乘法器,N为FIR滤波器的抽头数,节省比例为25%。
2.3 优化算法应用于共轭复数乘法
数字信号处理中,常常还会遇到的一类复数乘法就是共轭复数乘法。
假设有两个复数x1=a+bj 和x2=c+dj,其共轭复乘的表达形式为
其中,con j(x2)表示x2的共轭。
通常的计算方法是先对x2的虚部d 按照补码的规则取反加1,然后再按照下面的表达式相乘。
图4 复数FIR 滤波器的优化实现Fig.4 Optimized implementation of complex FIR filter
为了省掉对x2的虚部d 取反加1 的步骤,我们可以做适当变通,先将x1的实部
和虚部互换,即令
与x2直接相乘,得到
对比式(9)和式(10)可以看到,两者的实部和虚部是互换的关系,因此,可以取式(10)的实部作为共轭复乘的虚部,取式(10)的虚部作为共轭复乘的实部,这样就省去了对x2的虚部取反加1 的步骤。
最后,再利用上述复数乘法器的优化
方法,得到z=x1×con j(x2)的实部zI和虚部zQ分别为
根据式(11)和式(12),利用3个乘法器即可实现共轭复乘。
3 使用2个乘法器的复数乘法优化结构
如果复数的位宽不大,但是,复数乘法要求的运算速率很高,那么,为了节省乘法器资源,我们可以仅使用两个乘法器来实现复数乘法。
依然采用复数x1=a+bj 和x2=c+dj 相乘来阐述其原理。
假设复数实部和虚部的位宽都小于或等于k 比特,乘法器IP 核可以实现的乘法运算的最大位宽为2k 比特,那么我们可以做如下变换。
令
进一步,可以得到
式(13)和式(14)相减,得到
式(13)和式(14)相加,得到
利用式(15)可以得到复乘之后的虚部值
由式(16)可以得到
如果a、b、c 和d 的位宽都小于k 比特,那么ac 以及bd乘积的位宽都小于2k 比特,因此,从式(18)中,直接取低位的2k 比特(LSB),就是bd 的乘积,直接取高位的2k 比特就是的乘积,进而可以求得复乘之后的实部值I=ac-bd。
上述讨论是基于无符号数而言的,如果a、b、c 和d 都是有符号数,那么可以先将
符号提取出来,根据其符号位计算出结果的符号位,具体乘法运算都按照无符号数来处理。
具体其实现架构如图5 所示。
图5 使用2个乘法器实现复数乘法实现Fig.5 Implementation of complex multiplication with 2 multipliers
4 结论
传统的复数乘法需要占用4个乘法器,文中对此进行了改进,分别给出了使用3
个乘法器和2个乘法器的优化实现方法,并针对基于FPGA 的实现,给出了数字
信号处理中常用的复数FIR 滤波器和共轭复乘的优化实现方法,尤其针对复数FIR 滤波器的实现而言,能够节省25%的乘法器资源,在滤波器的阶数很高的时候,
对于实际的工程设计具有很好的可借鉴性。
【相关文献】
[1]Kong M Y,Langiois J M P,Al-Khalili D.Efficient FPGA implementation of complex multipliers using the logarithmic number system[C]//Circuits and Systems,2008.ISCAS 2008.IEEE International Symposium on.IEEE,2008:3154-3157.
[2]Satoh K,Tada J,Tamura Y,et plex multiplier suited for FPGA
structure[C]//Proc.ITC-CSCC,2008:341-344.
[3]Berkeman A,Owall V,Torkelson M.A low logic depth complex multiplier[C]//Solid-State Circuits Conference,1998.ESSCIRC'98.Proceedings of the 24th European.IEEE,1998:204-207.
[4]Berkeman A,Owall V,Torkelson M.A low logic depth complex multiplier using distributed arithmetic [J].Solid-State Circuits,IEEE Journal of,2000,35(4):656-659.
[5]何宾.FPGA数字信号处理实现原理及方法[M].北京:清华大学出版社,2010.
[6]高亚军.基于FPGA的数字信号处理[M].北京:电子工业出版社,2012.
[7]Xilinx,DSP:Designing for Optimal Results[M].Edition 1.0,March,2005.
[8]Xilinx,Virtex-5 FPGA Xtreme DSP Design Considerations[M].User Guide,UG193(v3.5)January 26,2012.
[9]Altera,Implementing Multipliers in FPGA Devices,Application Note 306[M].ver.3.0,2004.。