基于FPGA的DDC滤波器设计与仿真

时间:2012-08-07

  近年来,软件无线电已经成为通信领域一个新的发展方向,数字下变频技术(Digital Down Converter-DDC)是软件无线电的技术之一,也是计算量的部分。基于FPGA的DDC设计一般采用CIC、HB、FIR级联的形式组成。同时,由于CIC滤波器的通带性能实在太差,所以中间还要加上PFIR滤波器以平滑滤波器的通带性能。而众所周知用FPGA从事算法的开发是一件难度比较大的工作,而Xilinx公司开发的System Generator工具为算法的快速开发及仿真带来了巨大的方便。本文首先对CIC、HB、FIR滤波器的原理及设计作了简单的说明,用Matlab结合System generator对本文所设计的DDC滤波器作了一个仿真。

  1 总体结构设计

  数字下变频技术作为数字信号处理中的一个关键技术,它通常由以下儿部分组成。首先,CIC滤波器,它实现简单而且能实现较大的下抽率。其次,由于CIC滤波器带内平坦性能太差,因此在CIC滤波器之后一般要加上PFIR来平滑带内平坦度。,由于CIC滤波器的抽取因子小宜取得过大,冈此还要用HB滤波器的级联来进一步增加抽取率。下面本文以如何设计一个原信号采样率为72 MHz的、有效信号带宽为2.05 MHz的、下抽率为14的、主旁瓣衰减80 dB以上的、通带平坦度小于0.2 dB的下抽滤波器为例说明下抽滤波器的设计。

  实际中常用的DDC的实现框图如图1所示。

DDC的实现框图

  2 CIC滤波器设计

  CIC滤波器是近年来在下变频中用得多的一种技术,CIC滤波器在多速率信号处理中具有特别重要的位置,它可以充当内插滤波器,也可以充当抽取滤波器,主要取决于积分器和梳状滤波器的连接顺序。由于CIC(级联积分梳状)滤波器不需要乘法运算和存储系数,因此实现非常简单,在采样率变换过程中经常使用CIC滤波器进行数字滤波。

  考虑到CIC滤波器的除数及抽取因子不宜取得过大,所以实际巾的下抽滤波器一般都是采用CI协同HB来完成下抽的任务。比如这里我们要下抽14,一般的做法是先用CIC下抽7然后用HB下抽2 如果这时HB仍然不满足要求的话,我们可以通过适当增加HB的级联数目来完成下抽。例如,如果要下抽28,那么可以先下抽7,然后通过两级HB来完成下抽4,进而达到下抽28的目的。

  在MATLAB中通过设置下抽因子,需要的通带截止频率等参数可以方便的设计出想要的CIC滤波器。下图为本次设计中设计出的CIC滤波器的幅频响应。

CIC滤波器的幅频响应

  通过将其通带细节图放大,可以发现在2.05 MHz处通带的衰减为4.508 dB。

CIC滤波器的幅频响应

  3 PFIR滤波器设计

  PFIR滤波器的设计目标是在满足通带波纹和过渡带宽尽可能窄的同时使得阻带衰减尽可能大,PFIR的阶数越高,PFIR滤波器的通带波纹,过渡带宽,阻带衰减等特性就越好。

  PFIR存在的意义是它能够改善CIC滤波器带内平坦度较差的问题,因此,其带内的幅频响应的走势和CIC正好相反,从而在一定程度上平滑CIC滤波器通带内衰减的趋势。在设计好了上CIC滤波器的基础上,通过输入已经完成的上级滤波器参数在MATLAB中可以自动生成与其互补的PFIR滤波器,它的幅频响应如图4所示。

幅频响应

  通过将这里设计的PFIR滤波器与上节设计的CIC滤波器进行级联,级联后的滤波器的幅频响应较之于之前设计的CIC滤波器其通带性能有了很大的提高,级联前的CIC滤波器的通带波纹为4.508 dB,而级联后仅为0.11 dB将其通带细节图如图5所示。

通带细节图

  4 HB滤波器设计

  半带滤波器是一种特殊的FIR滤波器,在多速率信号处理中有着至关重要的作用。在常见的下抽滤波器设计中第二级一般采用HB滤波器要用到第二级的原因是综合考虑到带内平坦度和阻带衰减度等因素使得级CIC抽取滤波器的级数和抽取因子不宜过大,HB滤波器的带内平坦度好,计算效率高,在高速率信号处理中发挥着重要的作用,在抽取因子为2的幂次方的场合更是如鱼得水。

  HB滤波器的通带和阻带具有对称的关系,因此其通带波纹和阻带波纹相等。但是使其成为数字信号处理中非常常用的一种滤波器的主要原因却是因为其系数有一半均为0。如此,在低速率数字信号处理中或许还不是很重要,但是在那些对实时性要求非常高的系统中,这种将计算量减半的性能就使得其得到了广泛的应用。

  综合考虑前方中提出的设计的要求,文中设计的HB滤波器的幅频响应如图6所示。

HB滤波器的幅频响应

  将文中设计的CIC,PFIR,HB级联之后得到的总的滤波器的幅频响应如图7所示,可以发现较之于CIC滤波器的通带性能,此时级联滤波器的通带性能已经有了较大的提高。其通带细节图如图8所示。

总的滤波器的幅频响应

通带细节图

  5 system generator仿真

  system generator for dsp是业内的系统级FPGA开发工具。本次设计是在基于Xilinx(赛林思)的system generator的基础上完成的。赛林思是的可编程逻辑完整解决方案的供应商,它研发、制造并销售范围广泛的集成电路、软件设计工具以及作为预定义系统级功能的IP(InteIlectual Property)核,客户使用Xilinx及其合作伙伴的自动化软件工具和IP核对器件进行编程。System generator是Xilinx公司进行数字信号处理开发的一种设计工具,它通过将Xilinx开发的一些模块嵌入到MATLAB的Simulink库中,可以在Simulink中进行定点的仿真,可以设置定点信号的类型,这样就可以比较定点仿真与浮点仿真的区别。并且它还可以生成HDL文件,或者网表直接供ISE调用。较之于直接用MATLAB进行算法的仿真其主要优势作于它是基于定点的,同时,它是由各个供应厂商直接提供的库,因此它能够充分认识FPGA内部的资源等,其仿真也更可靠。

  虽然,system generator能直接生成供底层FPGA调用的代码以及网表,但是,通常并不这样做。相对于人工编写的代码,system genera tor生成的代码相对冗余度高,资源利用也不及人工编写的代码合理。但是,在某些需要快速进行算法开发的项目中,这种方式无疑为用FPGA从事快速的算法开发提供了一个捷径。

  将MATLAB与system generator集成后,由图1所示的原理框图,搭建了用于仿真的system generator模块,如图9所示。

仿真的system generator模块

  在输入端输入幅频响如下图所示的信号,其有用信号范围173~25.5 MHz。另外为了方便仿真结果的观察,又加入了2个大的噪声信号分别位于32.4MHz,12.4 MHz。

原输入信号频谱图

  将上图所示的信号送入DDC网络后,信号变成I/Q两路信号,将这两路信号组合成复数信号后得到的复数信号的频谱图如图11(a)所示。

复数信号的频谱图

  图11(a)为原输入信号的有用信号附近的细节图,而图11(b)为经过DDC网络后得到的复数信号的幅频响应图。由于simulink的频谱绘制工具显示刷新的问题它们看起来有了一点点的误筹,但是,也可以发现经下变频后的信号有效的恢复了原信号的频谱信息。它将原输入信号的负边频线性搬移到了以0频为中心的带宽为4.1MHz的频谱上来。

  6 结束语

  实际项目中接触到的信号处理任务大多为带通信号,如果直接采用传统的奈奎斯特采样定理对模拟信号进行采样,然后进行数字信号处理任务,这样对后端的DSP器件的实时性要求太高。因此,通常我们都要先用一个FPGA来完成数字信号的下变频操作,之后再由后端的DSP器件来完成信号处理任务。因此,如何合理的设计DDC下变频就显得特别重要。本文针对如何设计DDC滤波器以及基于FPGA的System Generator的仿真都作了简单的介绍。

上一篇:用液位控制器控制变频器工作频率
下一篇:语音汽车倒车雷达系统的设计与实现

免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

相关技术资料