2 、基于FPGA的常规实现方法
首先用A/D芯片对输入信号进行实时采样,将数据量化为12位有符号数(最高位为符号位)。对于imag和real两路中的其中一个通道而言,乘本振序列模块可用一个16×16的有符号乘法器及一个32×16位的只读ROM实现。因为时钟频率为200 MHz,对于序列cos(2π70Mn)和sin(2π70Mn)只需要在ROM中存20个点就可以成为一个周期,固ROM的数据深度选32,宽度选16。滤波模块实质是一个“乘累加”结构,23阶的LPF须配置24个乘法器和20个加法器。最后抽取只需在滤波模块输出后每8个点取一个点。
根据这样的流程在ISE下编写代码,并用Modelsim仿真,所得波形如图4所示。
图4中共有4路输出波形,其中上2路分别为滤波后抽取之前的实部和虚部的输出,数据频率为200 MHz;而下面2路分别为1/8抽取后的实部和虚部的输出,数据频率为200/8=25 MHz。
对上述实现方法的评价:该方法完全按照算法的流程,结构比较清晰,容易理解,也能够最后得到理想的波形。但具有一定的弊端,主要有以下2点:(1)资源耗费太大,该种实现方式实部,虚部通道各需要24个乘法器和20个左右的加法器;(2)难以满足信号实时处理要求的运算速度。对于该方法,流程中所需要的乘法器和加法器都必须工作在200 MHz时钟下,这对于现有的硬件设备(如VertexⅡ)来讲是难以实现的,故需要采用更优化的实现方法,即下面所要介绍的多相滤波结构。
3 、运用多相滤波结构进行设计
对于上面所述的常规实现方法,之所以在合理性上存在一定弊端,归其原因是将FPGA大量的资源和运算周期都浪费在了不必要的运算点上。因为最后要得到的是时域信号的1/8抽取,即每8个点只保留一个点。因此大可以去寻找一种办法使得FPGA只计算需要的点即抽取后的点,直接以25 MHz的速度输出,这样既可以满足运算速度的要求,又能节省资源,这样的方法就是多相滤波的方式。
设数字滤波器(诸如内插,抽取器中的低通滤波器)的冲击响应为h(n),则其Z变换H(z)定义为: