×
FPGA/DSP > 可编程逻辑 > 详情

基于FPGA乘法器的FIR 低通滤波器整体设计

发布时间:2020-05-16 发布时间:
|

  针对传统的FIR 滤波器的缺点,介绍了一种基于FPGA 乘法器的FIR 滤波器设计方法,该滤波器利用FPGA 自带的18位乘法器MULT18 × 18SIO 进行乘法计算,利用寄存器对相乘结果进行累加,实现了FIR 滤波功能。该滤波器具有占用极少的资源、提高滤波速度和高速灵活性等优点。

  在通信系统、航空航天系统、雷达系统、遥感遥测系统等工程技术领域,无论是在信号的获取、传输,还是信号的处理和转换都离不开滤波技术。由于FIR 滤波器具有严格的线性相位和在系统中具有稳定性,因此FIR 滤波技术具有广泛的应用[1-4]。

  1 FIR 低通滤波器整体设计

  本文主要介绍的是FIR 低通滤波器,该FIR 低通滤波器主要由硬件电路和FPGA 程序组成。FIR 滤波器硬件电路主要由信号调理电路、AD 转换电路、FPGA 控制电路、FT245RL 电路和上位机组成,其中FPGA 内部程序模块包括AD 采集控制模块、FIR 滤波器采样模块、MULT 18 ×18SIO 乘法器模块、累加模块、36 位数据拆分模块、FIFO模块和FT245 控制模块。该滤波器主要功能是利用信号发生器产生特定频率的正弦波,通过信号调理电路进行调理后经过12 位的AD 转换器进行转换输出数字信号,FIR 滤波器采样模块工作在60 MHz 的时钟内,并且以10 kHz 的采样率对AD 输出的数字信号进行采样,采样到的数字信号值连同FIR 滤波系数输出到18 位乘法器模块,经过乘法运算后进行累加,累加出来的是36 位数据,最终通过FT245 组成的USB 接口传给上位机进行曲线显示,所得结果即为滤波后的数据,系统组成原理如图1 所示。

  2 硬件电路设计

  2. 1 AD 转换器电路

  本系统中对于输入电压的采样率为10 kHz,因此采用了AD 公司的高性能逐次逼近型A/D 转换芯片AD7492BRU-5,最大转换速率为1. 25 ×10 次/s ,具有12位的并行数据输出接口,并且具有三态功能,能够满足系统采样要求。

  由于AD7492BRU-5 的基准电压为2. 5 V,而输入的模拟信号范围为0 ~5 V,因此在模拟信号进入AD 转换器之前还需要对信号进行适当的调理,调理电路如图2 所示。采用两个10 kΩ 电阻对输出的模拟信号进行分压,使其范围满足A/D 转换器的输入要求,并通过电压跟随器进行输出,信号不会失真。

  

  2. 2 FT245 接口电路

  本系统中FPGA 发送的滤波数据通过USB 接口回传给上位机,上位机读取USB 的数据,并对数据进行存盘。USB 接口电路采用FTDI 公司的FT245RL 作为USB 接口芯片实现上位机与FPGA 的数据通信。FT245RL 无需编写固件程序,可以使用FTDI 公司提供的驱动程序,并且兼容USB1. 1 及USB2. 0 协议。USB 连接电路如图3 所示,该电路中数据传输线接一个共模电感ACM-2012-900,当传输差分信号USBDM 和USBDP 上有共模干扰时,由于共模信号产生磁场叠加,在共模电感上形成高阻抗,从而达到滤除共模干扰的目的。USB 口接地端接一个磁珠,这样连接可以更好地防止电源不稳对数据传输的干扰。USB 接口从FPGA 读取数据,FPGA 内部只要判断到FIFO 中产生半满信号,就将数据传输到USB 接口,最终利用上位机进行读取。

  

  3 FIR 滤波器程序设计

  本设计采用Xilinx 公司XC3S400 的FPGA 进行程序验证,XC3S400 是高密度的可编程逻辑器件。它的主要特点包括具有最小5 ns 的引脚到引脚的逻辑时延,全局时钟最高引脚最高输入频率为66 MHz,内核用1. 2 V 供电,I /O 口可设置在3. 3 V 工作。该器件具有丰富逻辑的资源,包括16 个MULT18 × 18SIO,可以进行大量的乘法运算[8]。

  FIR 滤波器程序主要由采样模块、乘法器模块、累加和模块组成,采样模块功能是采集60 个采样值、并把滤波系数输出到乘法器与采样值进行相乘。乘法器模块主要功能是对60 个采样值和60 个滤波系数进行相乘,所得的相乘结果输入累加器。累加器就是将输入的60 个结果进行累加,得到36 位的滤波结果[9-10]。

  3. 1 采样模块

  采样模块主要是对AD 转换后输出的值进行采样,本设计中采样率为10 kHz,也就是AD 的采样率为10 kHz,而滤波器对AD 转换后输出的值的采样率也是10 kHz,它们的实现在程序上是同步的。在AD 输出模块当中,每当数据转换完成输出时,会产生一个rdy 上升沿信号,采样模块接收并辨别rdy 上升沿信号后接收第一个数据,并把第一个滤波系数输出到MULT18 × 18SIO 乘法器,同时给乘法器CLK 端产生一个上升沿信号,启动乘法器进行相乘,相乘结果时间极短,所以可以实现高速相乘运算。

  

  采样模块利用VHDL 语言进行编写,利用状态机实现,在模块中采用4 个状态来实现采样和滤波,第1 个状态为采样,只要判断rdy 上升沿信号就利用寄存器进行采样,并给寄存器赋值; 第2 个状态取出对应的滤波系数; 第3 个状态为产生乘法器时钟clk,且计数器counter 加1; 第4 个状态判断计数器是否加到60,如果是则跳出采集,输出滤波结果,其采集和控制流程图如图4 所示。

  

  采样模块当中还包括60 个滤波系数,滤波器系数由Matlab 产生,Matlab 中FDATool( Filter Design & Analysis Tool) 是Matlab 信号处理工具箱专用的滤波器设计分析工具,操作简单、灵活,可以采用多种方法设计FIR 滤波器。本文设计的FIR 滤波器为60 阶,采样率为10 kHz,截止频率为200 Hz 的FIR 低通滤波器,通带内纹波抖动为1 dB,阻带下降60 dB,并将其系数量化成16 bit 后保存到COE文件中。本设计当中滤波系数扩大32 767 倍,具体的量化过程如下:

  

  量化后的数据为10 进制数,需转化为二进制数,并将十进制的负数转化为二进制补码形式才可以用于乘法器进行相乘。在采样模块当中,定义了一个可以存60 个系数数组的寄存器,FIR 滤波器系数就存在于60 个数组当中,在运算中可以灵活取出滤波系数进行相乘。

  3. 2 乘法器

  Xilinx FPGA 开发环境软件自带的18 位乘法器模块MULT18 ×18SIO 如图5 所示,该乘法累加器A( 17: 0) 为AD 转换后的数据输入端口,B( 17: 0) 为滤波系数输入端口,C 端口为乘法器时钟clk 输入端,上升沿有效,CE 为使能端高电平有效,R 端为复位端低电平有效,P( 35: 0)为滤波器数据输出端。因为MULT18 × 18SIO 乘法器为FPGA 内部自带的硬核资源,可以直接调用,因此几乎不占用任何FPGA 资源,并且可以提高乘法速度,只要在clk端给予一个上升沿就可以对其操作,使用起来方便、快捷。

  

  3. 3 累加和模块

  累加和模块主要对乘法结果进行累加,在累加模块中定义一个36 位的寄存器,在累加上升沿脉冲到来时对乘法器输出的结果进行累加,一共进行59 次累加,累加后的结果送入36 位数据拆分模块,拆分成5 byte 的数据压入FIFO 进行发送,上位机通过FT245 读取到滤波数据。

  4 试验验证

  针对FIR 滤波器电路系统,设计了一个专门与配套USB 接口FT245 通信的软件,该软件能读取USB 数据,并把USB 数据保存在以DAT 为后缀名的文件中。用该软件对该数据进行还原转化,即可得到其电压值,并能通过软件把结果显示出来。

  用信号发生器同时给滤波器系统发送频率为100 Hz( 小于200 Hz) 和250 Hz,幅值为0 ~ + 5 V 正弦波输入信号,正弦波信号经过信号调理及AD 转换后由FPGA 进行FIR 低通滤波,最终通过USB 接口将数据传输到计算机的上位机当中。读取到的滤波数据如图6 所示,图中阴影部分为一个滤波数据值007F00A59F,转化为电压值过程如下: 007F00A59F 转化为十进制数,得到N =2 130 748 831,由量化过程得到传递值f = 524 062( 32 767除以最大系数得到) ,则AD 输出值x = N/f = 4 065,那么电压值V = ( 4 065 /4 095 ×2. 5) V =2. 48 V,则输入电压值Vin = ( 2. 48 ×2) V =4. 96 V。

  

  根据以上转换关系,利用上位机软件对读取到的数据进行曲线绘制,所得到的曲线为0 ~ +5 V 正弦波,如图7 所示。由试验数据可知,频率大于200 Hz 的信号幅值经过滤波器后受到衰减,不能通过FIR 低通滤波器,低于200 Hz 的信号却能顺利通过滤波器,可见所设计的滤波器满足要求。

  

  5 小结

  试验结果表明,基于FPGA 乘法器的FIR 滤波器在采样控制、数字信号处理等方向,相比传统FPGA 的FIR 滤波器设计具有简单、快捷且有更高的执行效率和速度的特点。在该设计当中,FPGA 的资源占用率只有10%,留有足够的资源以设计其他逻辑电路功能。基于FPGA乘法器的FIR 滤波器高速、高灵活性的优点,使其可广泛应用于高速数字信号处理领域。


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
FPGA学习误区汇总