首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

DSP硬件实现的优化(一)—FPGA中复数乘法器的优化

DSP硬件实现的优化(一)—FPGA中复数乘法器的优化

在数字信号处理中,特别是在通信信号处理的应用中,经常会遇到复数乘法器。有些朋友可能会感到奇怪,信号都是实信号,哪来的复数呢?其实在通信信号中,基带信号会被分为I,Q两路,然后用QPSK/DQPSK进行调制。接收端解调后又会得到两路信号。所以一般来说为了表示和运算方便,一般把I路信号当成实部,Q路信号当成虚部。打个比方,输入信号(I,Q两路)进行FFT变换为频率信号后(有实部和虚部)表示为a+b*i和另一个复数(cosx+sinx*i,表示为c+d*i)进行相乘,等效为时域上I,Q两路信号的移相。那么此时就用到了复数乘法器。粗浅的看上去,一个复数乘法器需要4个乘法器,3个加法器(减法其实就是补码加法):
(a+b*i)*(c+d*i) = (a*c - b*d) + (b*c + a*d)*i = x + y*i



但是该式子可以化简成:
其中x 可以等效为
a*c - b*d + (b*c - a*d) - (b*c - a*d)


于是化简为
a*c - b*c + a*d - b*d + (b*c - a*d) = (c+d)*(a-b) + (b*c - a*d) = x


由于x的计算中已经包含了b*c和a*d的结果,因此只需算出x即可算出y。算出x只需要3个乘法器即可。如此节省了一个乘法器。       如果使用了FPGA的DSP48作为乘法器的话,那么这种优化方法是非常有效的,因为省去了其中一个DSP48。当然,如果是使用Xilinx的IPCORE并且use DSP48来实现复数乘法器的话,Xilinx生成的乘法器也是差不多这种架构。但是如果是在ASIC设计或者是使用LUT来实现乘法器,那么这种架构未必节省资源。
继承事业,薪火相传
返回列表