一种基于FPGA的IIR数字滤波器的设计方法
【摘 要】无论是信号的获取、传输,还是信号的处理和交换都离不开数字滤波,它对于信号安全有效的传输是至关重要的。 IIR(无限脉冲响应)滤波器被广泛使用,它可以使用相对较低的阶数来获得较高的选择性,FPGA(现场可编程门阵列)以其优越的实时性和设计灵活性成为了控制系统中不可或缺的一部分。故本设计采用了一种基于FPGA的IIR数字滤波器的设计方法,首先分析了IIR数字滤波器的原理及基本结构,然后通过quartusⅡ的设计平台,将整个IIR数字滤波器分为三个功能模块:延时、加法器,乘法器。分别进行了仿真和综合。结果仿真表明,本课题所设计的IIR数字滤波器综合来说运算速度较快,系数改变灵活,有很好的参考价值。
【关键词】IIR数字滤波器;quartusⅡ的设计平台;FPGA(现场可编程门阵列)
1 IIR数字滤波器的基本网络结构
IIR(Infinite Impulse Response)数字滤波器,又名“无限脉冲响应数字滤波器”,或“递归滤波器”。递归滤波器,也就是IIR滤波器,顾名思义,具有反馈,一般认为具有无限的脉冲响应。
IIR的滤波器的传递函数在平面上有极点存在,其单位脉冲响应应延续到无限长,对于给定的传递函数或差分方程,其结构并不是唯一的,基本网络结构有三种,即直接型、级联型和并联型。
直接型IIR网络是利用加法器、乘法器和延时器等基本运算单位,以给定的形式直接实现差分方程。IIR数字滤波器的系统函数一般表示为:
级联型一个N阶的系统函数可以用它的零点与极点表示,IIR数字滤波器的级联型结构有以下特点:
(1)简化实现,用一个二阶节,通过变换系数就可以实现整个系统;
(2)调整系数β1i和β2i能单独的调整IIR数字滤波器的第k对零点,其它的零点不受影响。同样,调整系数α1i和α2i能单独地调整IIR数字滤波器的第k对极点,其他极点不会受到影响。即每个二阶节系数单独控制一对零点和一对极点;
(3)二阶节的极,零点的搭配是可以互相换位置的,用合理的组合来减小运算中的误差;
(4)前一级的输出是后一级的输入,前级的误差会传输给后一级,使误差越来越大。
2 FPGA的工作原理
FPGA是由存放在片内RAM中的程序来设置其工作状态的,因此,工作时需要对片内的RAM进行编程。用户可以根据不同的配置模式,采用不同的编程方式。
加电时,FPGA芯片将EPROM中数据读入片内编程RAM中,配置完成后,FPGA进入工作状态。掉电后,FPGA恢复成白片,内部逻辑关系消失,因此,FPGA能够反复使用。FPGA的编程无须专用的FPGA编程器,只须用通用的EPROM、PROM编程器即可。当需要修改FPGA功能时,只需换一片EPROM即可。这样,同一片FPGA,不同的编程数据,可以产生不同的电路功能。因此,FPGA的使用非常灵活。
FPGA有多种配置模式:并行主模式为一片FPGA加一片EPROM的方式;主从模式可以支持一片PROM编程多片FPGA;串行模式可以采用串行PROM编程FPGA;外设模式可以将FPGA作为微处理器的外设,由微处理器对其编程。
3 基于Quartus II的时序仿真
在FPGA的设计中,仿真是Z后一个重要的环节。对工程编译通过后,必须对其功能和时序性质进行仿真测试,以了解设计结果是否满足原设计要求。我们知道时序仿真与VHDL设计的程序有关,还与延时也有关。时序仿真更加要贴近生活与实际,是对VHDL设计的系统与硬件器件特性仿真。但功能仿真的仿真与系统硬件没有关系,硬件延时不考虑。仅仅在理想情况下可对系统进行功能上的检测。
其仿真流程的详细步骤如下:
(1)打开波形编辑器;
(2)设置仿真时间区域;
(3)波形文件存盘;
(4)将工程的端口信号名选入波形编辑器中;
(5)编辑输入波形(输入激励信号);
(6)总线数据格式设置;
(7)仿真器参数设置;
(8)启动仿真器;
(9)观察仿真结果。
4 IIR滤波器数字滤波器的单元电路设计
数字滤波器主要由加法器,乘法器和延时模块三部分组成,我们可以通过硬件描述语言来设计所需要的模块。这里研究的是延时模块,乘法器,加法器与顶层模块。
4.1 延时模块的设计
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_arith.all;
entity delay is
port (clk:in std_logic;
res:in std_logic;
......
4.2 加法器的设计
加法器是数字系统中Z基本的运算电路,其他运算电路如减法器,乘法器等都可以利用加法器实现。
设计程序如下:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY adder4_beyond IS
PORT (a,b:IN std_logic_vector(3 downto 0);
cin:IN std_logic;
c:out std_logic_vector(3 downto 0); cout:out std_logic
)
END adder4_beyond;
ARCHITECTURE action OF adder4_beyond IS
SIGNAL m:std_logic_vector(2 downto 0);
......
4.3 乘法器的设计
设计程序如下:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_unsigned.ALL;
USE IEEE.STD_LOGIC_arith.ALL;
ENTITY mul_4 IS
PORT (multiplicand:IN STD_LOGIC_VECTOR(3 downto 0);
multiplier:IN STD_LOGIC_VECTOR(3 downto 0);
out_data:OUT STD_LOGIC_VECTOR(7 downto 0)
)
END mul_4;ARCHITECTURE bhv OF mul_4 IS
……
通过对IIR滤波器进行单位模块的设计, Z终实现了IIR滤波器系统设计。 IIR数字滤波器可用相对来说较低的阶数获得较好的选择性,FPGA具有体系结构和逻辑单元灵活、集成度高以及适用范围广等特点,兼容了PLD和通用门阵列的优点,可实现较大规模的电路,编程也很灵活。与门阵列等其它ASIC相比,它又具有设计开发周期短、设计制造成本低、开发工具先进、标准产品无需测试、质量稳定以及可��时在线检验等优点,因此被广泛应用于产品的原型设计和产品生产之中。
【参考文献】
[1]刘泉,列大顺.数字信号处理与实现[M].北京:电子工业出版社,2005:2-12.
[2]林争辉,林涛.基于可重构FPGA技术的自适应FIR滤波器的实现[J].电子工程师,2004(12):8-50.
[3]苏金明,刘宏,刘波.MATLAB高级编程[M].北京:电子工业出版社,2005:331-337.
[责任编辑:杨玉洁]
下一篇:数显表如何调节电流变比?视频教程