摘要:FIR数字滤波器以其良好的线性相位特性被广泛使用,属于数字信号处理的基本模块之一。FPGA具有的灵活的可编程逻辑可以方便地实现高速数字信号处理。为了提高实时数字信号处理的速度,利用FPGA芯片内部的ROM实现一种查找表结构的FIR数字滤波器。并用MATAB对实验结果进行仿真和分析,证明了设计的可行性。
关键词:有限冲击响应滤波器;硬件描述语言;查找表;现场可编程门阵列
引言
数字滤波器是数字信号处理的重要组成部分,其作用是从接收信号中提取出需要的信息同时抑制干扰,由于FIR滤波器的冲击响应是有限长的,因而有可能做成具有严格线性相位的。通常用以下两种方法来实现数字滤波器:一是把滤波器所要完成的运算编成程序并让计算机执行,也就是采用计算机软件实现;另一种是设计专用的数字硬件、专用的数字信号处理器或采用通用的数字信号处理器来实现。
常用的实时数字信号处理的器件有可编程的数字信号处理(DSP)芯片、专用集成电路(ASIC)、现场可编程门阵列(FPGA)等。在工程实践中,往往要求对信号处理要有高速性、实时性和灵活性,而已有的一些软件和硬件实现方式则难以同时达到这几方面的要求。随着电子信息技术的快速发展,很多信号处理器件开始用FPGA来取代传统的实现方法。与传统的实现方法相比,FPGA的显著优点是它的并行处理特性,可以显著提高滤波器的数据吞吐率。
随着可编程逻辑器件和EDA技术的发展,使用FPGA来实现数字信号处理,既具有实时性,又兼顾了一定的灵活性。FPGA具有的灵活的可编程逻辑可以方便地实现高速数字信号处理,突破了并行处理、流水级数的限制,有效地利用了片上资源,加上反复的可编程能力,越来越受到国内外从事数字信号处理的研究者的青睐。
1 FIR滤波器的结构特点
数字滤波器通常分为有限冲击响应(FIR)和无限冲击响应(IIR)两大类。FIR滤波器由以下几个特点:
(1)系统的单位冲击响应h(n)在有限个n值处不为零;
(2)系统函数H(Z)在|Z|>0处收敛,在|Z|>0处只有零点,有限z平面只有零点,而全部极点都在z=0处(因果系统);
(3)结构上主要是非递归结构,没有输出到输入的反馈,但有些结构(例如抽样频率结构)也包含有反馈的部分;
设FIR滤波器的单位冲击响应h(n)为一个N点序列,0≤n≤N-1,则滤波器的系统函数为:
就是说它有N-1阶极点在z=0处,有个N-1零点位于有限z平面的任何位置。
FIR滤波器有以下几种基本结构:横截型(卷积型、直接型);级联型;频率抽样型。这里,我们主要讨论直接型FIR滤波器的实现。
式(1)的系统的差分方程表达式为:
很明显,这就是线性移不变系统的卷积和公式,也是x(n)的延时链的横向结构。
2 FPGA概述及特点
FPGA即现场可编程门阵列,是20世纪90年代发展起来的。大部分FPGA采用基于SRAM的查找表(look up table,LUT)结构,也有一些军品和宇航级FPGA采用FLASH或者反熔丝工艺的查找表结构以提高可靠性。它是在PAL、GAL、EPLD等可编程器件的基础上进一步发展的产物,具有更高的集成度,更强的逻辑实现能力和更好的设计灵活性。FPGA由许多独立的可编程逻辑模块组成,用户可以通过编程将这些模块连接起来实现不同的设计。FPGA器件的产生将半定制的门阵列电路的优点和可编程逻辑器件的用户可编程特性结合在一起。既解决了定制电路的不足,又克服了原有可编程逻辑器件门电路数量有限的缺点。
FPGA采用了逻辑单元阵列LCA(Logic Cell Array)这样一个新概念,内部包括可配置逻辑模块CLB(Configurable Logic BLOCk)、输入输出模块IOB(InputOutput Block)和内部连线(Interconnect)三个部分。FPGA的基本特点如下。
(1)采用FPGA设计ASIC电路,用户不需要投片生产,就能得到可用的芯片;
(2)FPGA内部有丰富的触发器和I/O引脚资源;
(3)FPGA可做其他全定制或半定制ASIC电路的中试样片;
(4)FPGA是ASIC电路中设计周期最短,开发费用最低,风险最小的器件之一。
(5)FPGA采用高速CHMOS工艺,功耗低,可以与CMOS、TTL电平兼容。
可以说,FPGA芯片是小批量系统提高集成度、可靠性的最佳选择之一。随着集成度密度的不断提高,FPGA器件几乎可以实现所有的数字电路功能。目前,器件集成度已经达到了数百万门数量级,工作频率可达300MHz以上。一般可在几个小时或几天内完成一个设计,并可随时修改。这加速了产品设计开发的进程,免去了昂贵的ASIC(专用集成电路(器件半导体生产工艺费用及投资风险,因此,FPGA技术已经成为电子工程师不可缺少的好帮手。
www.55dianzi.com3 查找表结构的FIR算法
LUT本质上是一个RAM。目前FPGA中多使用4输入的LUT,所以每一个LUT可以看成一个具有4位地址线的16×1的RAM。当用户通过原理图或HDL语言描述了一个逻辑电路后,FPGA开发软件会自动计算逻辑电路的所有结果,并把结果写到RAM中,当输入一个信号进行运算就等于输入一个地址,找出对应的内容,然后输出。
由式(2)可见FIR滤波器系统函数是一种卷积的运算形式。如果用FPGA直接实现则计算速度很慢且占用大量的LE(逻辑单元),达不到系统对实时性的要求,于是想到能否将上述卷积运算转化成加减运算。
分布式算法(distributed arithmetIC,DA)早在1973年就已经被Croisier提出来了,但是直到FPGA出现以后,才被广泛应用在FPGA中计算乘积和。
设FIR滤波器的阶数为N,输入数据x(n)的位宽为k,则x(n)可表示为:
也就是说:我们可以把每个输入数据的每一位的值分别与相应的FIR系数相乘(因为x(n)为数字信号,每个输入数据的每一位的值都为0或1,所以与h(n)相乘的结果非0即为h(n))然后再相加,然后再把所有位的相加值错位相加,可得到卷积的结果从而实现了将卷积运算转换成加法运算。
这样我们就可以针对N阶FIR滤波器的系数预先建立一个2的N次方的一个存储表,将系数和存放在对应的存储单元中。进行卷积运算时把输入数据的每一位组合成地址码,通过地址查找到相应的系数和,然后把所有位数的系数和移位相加即可完成卷积运算。通过查表的方式可以大大减少求和的次数,提高运算速度。
4 设计思路及步骤
4.1 FPGA系统设计的方法
用FPGA实现数字系统设计一般可分成以下几个步骤:设计输入、功能仿真、编译综合生成网表文件、设计实现、时序仿真、下载到芯片进行硬件验证。在每一步检查到的错误或缺陷都可以返回到上一层进行修改。
随着数字系统规模的不断增大,其复杂度也随之增大。层次化设计将系统逐层分为较小的、规模可控制的模块,是控制数字系统设计复杂度的一种有效方法。
层次化设计中有两个重要的核心思想,即模块化和原件重用。模块化是指将系统划分为几个子模块,而这些子模块又分别划分为更小的模块,直至不可再分。每个模块都可以看成是上一层模块的一个元件。原件重用是指同一个原件可以被不同的实体调用,或者被同一个实体多次调用。这样不但大大减轻了设计者的工作量,而且使程序结构更加优化,具有更好的可读性。
4. 2 设计实例的参数选取及生成
MATLAB的信号处理工具箱中包括许多可用于设计FIR数字滤波器的M文件。根据要设计的滤波器的参数、通带截止频率、阻带截止频率、采样频率、通带或阻带波纹要求等参数,可以利用MATLAB中的数字信号处理工具箱生成滤波器的系数。
在设计中,采用16阶FIR,输入数据宽12位,滤波器系数以及由这些系数演算出的ROM的初始化数据文件*.mif文件可以通过MATLAB计算生成。
因为是16阶的FIR,这样就需要65536个ROM单元来实现,ROM单元的位宽采用16位。利用器件中的ROM建立这样的查找表,首先要将ROM的初始化数据写到*.mif文件中,然后在OUARTsus II中将其指向对应的ROM设计模块。
当FIR的阶数增大时,ROM的存储量是以2的倍数增长的,因此采用一个ROM快分时查找表的方法来降低对ROM存储容量的要求。
4.3 模块化设计
用原理图和VHDL相结合的输入方式,分模块进行设计,项层模块采用图形化输入,在Quartsus II中进行设计输入。
系统由控制模块、输入数据移位模块、地址发生模块、存储器模块、运算模块等组成。下面介绍每一模块的基本功能。
(1)控制模块的作用是产生一系列的控制信号,对上述各种模块进行精确的控制。控制模块在收到A/D转换结束信号后,依次产生移位寄存器使能信号、并行到串行转换的装入信号、移位相加的装入信号、加减控制信号和滤波器结果输出信号等控制信号。使上述各个模块按照一定的时序进行操作,最终完成滤波功能。该模块采用VHDL的描述方式比较方便。
[1] [2] 下一页
本文关键字:滤波器 滤波-陷波电路,单元电路 - 滤波-陷波电路