基于FPGA的FIR滤波器的设计(毕业设计)----可用(共44页).doc
精选优质文档-倾情为你奉上目 录专心-专注-专业基于FPGA的FIR滤波器的设计摘要:本文设计了一个基于FPGA的16阶FIR低通滤波器,使用分布式算法作为滤波器的硬件实现算法,并对其进行了详细的讨论。针对分布式算法中LUT规模过大的缺点,采用多块查找表的方式减小硬件规模。在设计中采用了自顶向下的层次化、模块化的设计思想,将整个滤波器划分为多个模块,利用VHDL语言的描述方法进行了各个功能模块的设计,最终完成了FIR数字滤波器的系统设计。文章采用CycloneII系列器件实现一个16阶的FIR低通滤波器的设计实例,用QuartusII软件进行了仿真,并用Matlab对仿真结果进行了分析,证明所设计的FIR滤波器功能正确。仿真结果表明,本论文所设计的FIR滤波器硬件模较小,采样率达到了10MHz。同时只要将查找表进行相应的改动,就能分别实现低通、高通、带通FIR滤波器,体现了设计的灵活性。关键词:FIR滤波器;FPGA器件;VHDL语言;分布式算法;查找表Design of FIR Filters Based on FPGAAbstract: In this paper, a sixteen tapped low pass FIR filter is designed based on FPGA, a scheme of hardware implementation is worked out using distributed arithmetic algorithm, and is discussed in detail. As the scale of the LUT in the distributed arithmetic algorithm is so large, the thesis reduces it with the using of multiple coefficient memory banks. From the clew of implementing a top-down stratified modular design, the thesis describes the hardware designed of all functional modules and the FIR system with the VHDL and schematic diagram designed methods.In this thesis, A sixteen tapped low-pass FIR filter implemented using CycloneII taken as an example, and the simulation designed carried out using QuartusII. The result of the simulation is analyzed with the use of Matlab, and it proved that the functional of the design if correct.The result of the simulation indicates that the scale of the design is small,and the sample rate of the FIR filter can search 10MHz. Modifying the LUT can realize the low-pass, high-pass and band-pass FIR filters and respectively and incarnates the flexibility of the design.Key Words:FIR Filter;FPGA;VHDL;Distribute Darithmatic;LUT1 引言滤波技术是信号分析、信号处理技术中的重要分支。无论是信号的获取、传输,还是信号的处理、转换都离不开滤波技术。滤波技术对信号安全可靠和有效灵活的传递至关重要1。在电子系统中,由于滤波器的好坏直接影响系统的性能,所以滤波技术己成为备受关注而热门的课题,滤波器的研制己受到各国研究者越来越多的重视。我国在上世纪50年代后期开始广泛使用滤波器,主要应用在报路和话路滤波。经过半个多世纪的发展,我国滤波器在研制、生产、应用等方面己进入国际发展轨道,但由于缺少专门研制机构,加之集成工艺和材料工业发展步伐的缓慢,使得我国在许多新型滤波器的研制和应用方面与国外仍有较大的差距。数字滤波器是对离散时间信号进行滤波处理以得到期望的响应特性的离散时间系统。数字滤波器一般由寄存器、延时器、加法器和乘法器等基本数字电路来实现。数字滤波器能满足滤波器对幅度和相位特性的严格要求,避免模拟滤波器所无法克服的电压漂移、温度漂移和噪声等问题。随着集成电路技术的发展,数字滤波器性能不断提高而成本却不断降低。数字滤波器在语音信号处理、图像信号处理、医学生物信号处理以及其他应用领域都得到了广泛应用。随着电子计算机和大规模集成电路技术的发展,数字滤波器可用计算机软件实现,也可用大规模集成数字硬件实时实现,数字滤波器已具备了高精度、高可靠性、可程控改变性或复用、便于集成等众多优点。按照数字滤波器(DF)的特性,可分为线性与非线性、因果与非因果、无限长冲激响应(IIR)与有限长冲激响应(FIR)等类型。在这些滤波器中,线性时不变的数字滤波器是最基本的类型。由于数字系统可以对延时器加以利用,因此若在数字滤波器中引入一定程序的非因果性,就可获得比传统的因果滤波器更灵活强大的特性。相对于IIR滤波器,FIR滤波器具有易于实现和系统绝对稳定的优势,因此得到广泛的应用2。1.1 国内外研究现状在国内外的研究中,设计FIR滤波器所涉及的乘法运算方式有:并行乘法、位串行乘法和采用分布式算法的乘法。并行乘法虽然速度快,同时占用的硬件资源极大。如果滤波器的长度增加,乘法器位数也将变大,硬件规模将变得十分庞大。位串行乘法器的实现方法主要是通过对乘法运算进行分解,用加法器来完成乘法的功能,也即无乘法操作的乘法器。但由于一个8*8位的乘法器输出为16位,为了得到正确的16位结果,串行输入的二进制补码数要进行符号位扩展,即将串行输入的8位二进制补码前补8个0(对正数)或8个1(对负数)后才输入乘法器。如果每一位的运算需要一个时钟周期的话,这个乘法器需要16个时钟周期才能计算出正确结果,这就意味着此类乘法器要完全计算出结果的延迟必将会很大。所以位串行乘法器虽然使得乘法器的硬件规模达到了最省,但是由于是串行运算,使得它的运算周期过长,速度与规模折衷考虑时不是最优的。分布式算法(distributed arithmetic,AD)的主要特点是巧妙的利用ROM查找表将固定系数的乘累加(Multiply-accumulator,MAC)运算转化为查表操作,它与传统算法实现乘累加运算的不同在于执行部分积运算的先后顺序不同。分布式算法在完成乘累加功能时是通过将各输入数据每一对应位产生的部分积预先进行相加形成相应的部分积,然后再对各个部分积累加产生最终结果,而传统算法是等到所有乘积已经产生之后再来相加来完成乘累加运算的。就小位宽来说,AD算法设计的FIR滤波器的速度可以显著的超过基于MAC的设计。相对于前两种方法,DA算法既可以全并行实现,又可以全串行实现,还可以串并行结合实现,可以在硬件规模和滤波器速度之间作适当的折中,是现在被研究的主要方法。FIR数字滤波器的实现,大体可以分为软件实现和硬件实现方法两种。软件实现方法即是在通用的微型计算机上用软件实现。利用计算机的存储器、运算器和控制器把滤波所要完成的运算编成程序通过计算机来执行,软件可由使用者自己编写,也可以使用现成的。国内外的研究机构、公司已经推出了不同语一言的信号滤波处理软件包。但是这种方法速度慢,难以对信号进行实时处理,虽然可以用快速傅立叶变换算法来加快计算速度,但要达到实时处理要付出很高的代价,因而多用于教学与科研。硬件实现即是设计专门的数字滤波硬件,采用硬件实现的方法一般都比采用软件实现方法要困难得多,目前主要采用的方法有以下几种3:(1)采用DSP(Digital Signal Processing)处理器实现DSP处理器是专为数字信号处理而设计的,如TI公司的TMS32OCX系列,AD公司的ADSPZXI,ADSP210X系列等。它主要数字运算单元是一个乘累加器(Multiply-accumulator MAC),能够在一个机器周期内完成一次乘累加运算,配有适合于信号处理的指令,具备独特的循环寻址和倒序寻址能力。这些特点都非常适合数字信号处理中的滤波器设计的有效实现,并且它速度快,成本低,在过去的20多年的时间里,软件可编程的DPS器件几乎统治了商用数字信号处理硬件的市场。(2)采用固定功能的专用信号处理器来实现,适用于过程固定而又追求高速的信号处理任务,是以指定的算法来确定它的结构,使用各种随机逻辑器件组成的信号处理器。它们体积小、保密性好,具有极高的性能,然而灵活性差。二者相比,固定功能的DSP专用器件可以提供很好的实时性能,但其灵活性差,研发周期长,难度也比较大;DSP处理器的成本低且速度较快,灵活性好,但由于软件算法在执行时的顺序性,限制了它在高速和实时系统中的应用。在一些高速应用中,系统性能的要求不断增长,而DSP性能的提高却落后于需求的增长。现在,大规模可编程逻辑器件为数字信号处理提供了一种新的实现方案。分布式算法可以很好地在FPGA(Field Programmable Gate Array)中实现,然而却不能有效的在DSP处理器中实现,所以采用FPGA使用分布式算法实现FIR数字滤波器有着很好的发展前景。采用现场可编程门阵列FPGA来实现FIR数字滤波器,既兼顾ASIC器件(固定功能DSP专用芯片)的实时性、又具有DSP处理器的灵活性。FPGA和DSP技术的结合能够更进一步提高集成度、加快速度和扩展系统功能。用FPGA设计的产品还具有体积小、速度快、重量轻、功耗低、可靠性高、仿制困难、上批量成本低等优点。但是,DA算法中的查找表的规模随着FIR数字滤波器长度的增加呈指数增长,而且随着滤波器系数的位数的增加,查找表的规模也会增加,这将极大的增加设计的硬件规模。所以如何减小查找表的规模成为尚待解决的问题。1.2 本论文的研究内容及主要工作本论文重点研究的是FIR低通数字滤波器的研究与设计,具体内容分为五节:第一节引言主要介绍了本课题的来源及研究意义、国内外现状。第二节主要介绍了FIR数字滤波器的原理以及线性相位FIR滤波器的结构和设计方法。第三节介绍了FPGA设计优点及DA算法优化研究,重点是分布式算法的原理以及DA算法优化的研究与设计,并对具体的分组优化方法做了详细的讨论。第四节首先利用Matlab制定设计指标,提取16阶FIR低通数字滤波器的抽头数并进行量化。然后基于FPGA分模块对其进行研究设计,并进行综合系统仿真和验证。最后介绍了A/D、D/A模块的具体设计方法,给出了电路原理图。文章最后给出了现场测试的一些照片。2 FIR数字滤波器设计2.1 数字滤波器基础数字滤波器在数字信号处理中属于预处理的部分,因而起着基础性的作用,数字滤波器包括IIR和FIR数字滤波器。数字滤波器具有精度高、稳定性好、灵活性强、不要求阻抗匹配,易于修改等特点。下面将首先介绍一下数字滤波器,然后重点讨论FIR数字滤波器的设计原理和结构4。2.1.1 数字滤波器简介一个简单的数字滤波系统如图2-1所示。图中,x(t)为模拟信号,经过A/D转换器后变为一个有着先后顺序的数字序列x(n)。然后x(n)通过数字滤波系统H(z),即得到数字滤波器的输出y(n)。H(z)为该数字滤波系统的单位脉冲响应h(n)的Z变换,即: (2-1)若h(n)为无限长序列,则得到的数字滤波器为IIR数字滤波器,又称递归滤波器;反之,若h(n)为有限长序列,则得到的数字滤波器为FIR滤波器,也称非递归滤波器。一个线形时不变因果滤波器可表示为: (2-2)其中N为h(n)的长度,即滤波器的长度。图2-1 数字滤波系统IIR滤波器主要是基于对模拟滤波器如巴特沃斯滤波器、椭圆滤波器等的幅频响应进行逼近,而其相频响应是非线性的。与IIR滤波器不同,FIR滤波器可以把相位特性设计成线性。这使得FIR数字滤波器在信号无失真传输、数据通信、图像传输与处理、语音信号处理等有线性相位要求的领域应用广泛。FIR滤波器的优点是软硬件实现结构简单,不用考虑系统的稳定性问题;缺点是实现较高性能的频率响应需要较高的滤波器阶数。2.1.2 FIR数字滤波器的结构由于FIR数字滤波器实现算法的不同,我们可以把FIR滤波器的结构划分为直接型、级联型、频率采样型和快速卷积型四种基本形式。本文主要讨论前两种结构。(1)直接型结构由式2-2可直接画出FIR数字滤波器的直接型结构,如图2-2所示。对于直接型结构来说,一个长度为N的FIR滤波器,每产生一个输出数据,要经过N次乘法,N-1次加法。对于使用FPGA开发FIR数字滤波器,这样的结果显然不令人满意。图2-2 直接型结构于是本文做了一下改进,这种改进是基于线性相位的FIR数字滤波器的。以严格线性相位,N为偶数的FIR滤波器为例,如图2-3所示。图2-3 直接型的改进由于关于对称,我们可以将经过延时环节的位置关于对称的数据预先相加,然后可以再乘以相应的滤波器系数进行累加得到最终的输出结果。这样,每产生一个输出,经过次乘法,次加法,比原来减少次乘法。(2)级联型结构对式(2-2)进行因式分解,并将零点共轭的因式放在一起,这样产生了若干个一阶子式和二阶子式,将一阶子式看作二阶子式的一个特例,则系统函数可以表示为: (2-3)FIR数字滤波器的级联型结构如图2-4所示。图2-4 级联型结构从图中可以看出,级联型结构每产生一个输出,需要次乘法,次加法。级联型的最大特点是可以分别独立调整每个子系统的零点之值,当需要精确控制滤波器的零点位置时,往往采用这种结构5。2.2 FIR数字滤波器设计方法FIR数字滤波器的设计方法主要有三种:时窗函数法、频率采样法和等波纹设计法6。下面将分别讨论一下这三种方法的设计原理,然后给出设计步骤,最后在比较一下这三种方法的优缺点。2.2.1 窗函数法一个理想低通滤波器的幅频特性如图2-5所示。的表达式为 (2-4)图2-5 理想低通滤波器频谱图对进行离散时间傅里叶逆变换,得 (2-5)是一个关于对称的无限长序列,是系统的单位脉冲响应,这说明系统是非因果的,在物理上不可实现。为了能够得到一个可实现的系统,可以将截取一部分,并顺序右移,使之成为一个因果的有限长序列。这种方法就好比在时域打开一个窗口一样,因而称为窗函数法。可以预见,使用这种方法截取的序列越长,对理想的幅频特性逼近的越好。常见的时窗函数有矩形窗、汉宁窗、汉明窗、布莱克曼窗、凯塞窗等。矩形窗的表达式为:,为整数。当用矩形窗设计FIR滤波器时,所产生的频率响应,与理想滤波器的频率特性相比,在理想特性不连续点处附近形成了过渡带,并在过渡带两侧形成持续时间很长,逐渐衰减的波纹,即通带内产生了波动,而阻带内产生了余振,这种现象称之为吉布斯(Gibbs)效应。吉布斯效应直接影响到滤波器的性能,因为通带内的波动会影响到滤波器的平稳性,阻带内的波动则影响阻带最小衰减。窗函数的选择原则是:(1)具有较低的旁瓣幅度,尤其是第一旁瓣幅度。(2)旁瓣幅度下降速度要快,以利增加阻带衰减。(3)主瓣的宽度要窄,以获得较陡的过渡带。但是这几个标准之间彼此是有矛盾的,即主瓣宽度越大,旁瓣水平才可能越低。因此实际上。因此,实际选用的窗函数往往是它们的折中。在保证主瓣宽度达到一定要求的条件下,适当牺牲主瓣宽度来换取旁瓣波动的减少。六种窗函数的主要参数如表2-2所示。应当说明的是,用时窗函数法设计的FIR滤波器通带波纹幅度近似等于阻带波纹幅度。一般阻带最小衰减达到40dB以上,则通带最大衰减就小于0.1dB。最后,总结一下利用窗函数设计FIR数字滤波器的步骤:(1) 给定所要求的频率响应函数;(2) 求;(3) 有过滤带宽及阻带最小衰减的要求,利用下表选定窗的形状及N的大小,一般N要通过几次试探而最后确定。(4) 求的所设计的FTR的单位抽样响应 (5)求,检验是否满足设计要求,如不满足,则需重新设计。表2-2 六种窗函数参数表的比较窗函数窗谱性能指标加窗后滤波器性能指标旁瓣峰值/db主瓣宽度/()过滤宽度/阻带最小衰减/db矩形窗-1320.9-21巴特列特-2542.1-25汉宁窗-3143.1-44海明窗-4143.3-53布拉克曼窗-5765.5-74凯泽窗-575-802.2.2 频率采样法频率采样法是一种基于频率域抽样来逼近所要设计的FIR滤波器的频率特性的一种方法。频率设计法的基本设计流程如图2-6所示。图2-6 频率设计法流程为了保证具有线性相位条件,其单位采样响应是实序列,且满足条件。对于偶对称的情况来说,线性相位条件如下: (2-6) (2-7)令代入式(2-6)、(2-7),得到 (2-8)式中, ,N为奇数 ,N为偶数。频率响应函数在各采样点上等于,而采样点之间的值是由各采样值之间的内插函数叠加形成,因而有一定的逼近误差,误差的大小取决于理想频率响应的曲线形状。采样点之间的理想频率特性变化越陡,则内插值与理想值之间的误差就越大,因而在理想频率响应特性的不连续点附近,就会产生肩峰和波纹;反之,理想频率响应特性变化越平缓,则内插值越接近理想值,逼近误差小。因此,可以在理想频率下响应特性的通带与阻带之间设置过渡带,从而减小逼近误差。过渡带的采样点个数m与所设计的滤波器的阻带最小衰减有关,具体如表2-3所示。此外过渡带的带宽与采样点数m之间的关系为: (2-9)表2-3 过渡带采样点数与阻带最小衰减的关系12342044-5465-7585-95综上,频率采样法的设计步骤为:A. 根据阻带最小衰减,确定过渡带的样点数m。B. 根据过渡带宽度的要求,估算滤波器的长度。C. 构造希望逼近的频率响应函数,一般为具有理想频率特性,并满足线性相位的要求。D. 对进行频域等间隔N点采样,得到。E. 对进行N点IDFT,得到。2.2.3 等波纹最佳逼近法等波纹最佳逼近法是基于最大误差最小化的设计原则。最大误差最小化能使幅度误差在整个逼近频段上均匀分布,即所设计的FIR数字滤波器的幅度特性在通带和阻带范围内是等波纹的,且可以分别独立控制通带和阻带的波纹幅度,并且在滤波器长度给定的情况下,加权的幅度波纹误差最小。定义加权幅度误差函数为 (2-10),式中为幅度误差加权函数,用来控制不同频带的幅度逼近误差。一般地,在要求逼近精度高的频带,取值大,而要求逼近误差精度低的频带,取值小。设计过程中是由设计者根据通带最大衰减和阻带最小衰减的指标要求取定的已知函数。对于FIR数字低通滤波器,常取: (2-11)式中,和分别为滤波器设计指标中通带和阻带的振荡波纹幅度,k为正的系数。滤波器的通带最大衰减和阻带最小衰减与通带和阻带的振荡波纹幅度和的换算关系为: (2-12) (2-13)等波纹最佳逼近法的设计,在于找到滤波器的系数向量,使得在通带和阻带频带内的最大绝对值幅度误差为最小。帕克斯-麦克莱伦采用基于交替定理的雷米兹交替算法,通过逐次迭代逼近的运算求得滤波器的系数向量,从而实现等波纹最佳逼近法。 一般情况下,估计滤波器长度N的凯塞经验公式为: (2-14)综上,用等波纹最佳逼近法设计FIR数字滤波器的步骤为:(1)根据滤波器的设计指标要求:边界频率、通带最大衰减、阻带最小衰减等,估计滤波器的长度,并确定幅度误差加权函数。(2)采用雷米兹交替算法,获得所设计的滤波器的单位脉冲响应。2.2.4 三种设计方法的比较 综述可得,窗函数法设计的基本思想是把给定的频率响应通过离散时间傅里叶逆变换IDTFT(Inverse Discrete Time Fourier Transform),求得脉冲响应,然后利用加窗函数对它进行截断和平滑,以实现一个物理可实现且具有线性相位的 FIR 数字滤波器的设计目的。其核心是从给定的频率特性,通过加窗确定有限长单位取样响应h(n);频率采样法设计的基本思想是把给出的理想频率响应进行取样,通过 IDFT 从频谱样点直接求得有限脉冲响应;等波纹切比雪夫逼近法则是利用 MATLAB 提供的 remez 函数实现Remez算法,设计滤波器逼近理想频率响应。 比较以上三种滤波器的设计方法,在同样的阶数下,等波纹切比雪夫逼近法可以获得最佳的频率特性和衰耗特性,具有通带和阻带平坦,过渡带窄等优点。频率采样设计法可以设计某些特殊滤波器,且其设计过程简单,但阻带衰减明显,若适当选取过渡带样点值,会取得较窗函数设计法略好的衰耗特性。窗函数设计法在阶数较低时,阻带特性基本满足设计要求,当滤波器阶数较高时,使用汉宁窗、海明窗、布莱克曼窗和凯泽窗即可以达到阻带衰耗要求3 FPGA 设计优点以及分布式算法3.1 使用FPGA器件进行开发的优点使用FPGA器件设计数字电路,不仅可以简化设计过程,而且可以降低整个系统的体积和成本,增加系统的可靠性。它们无需花费传统意义下制造集成电路所需大量时间和精力,避免了投资风险,成为电子器件行业中发展最快的一个系列。使用FPGA器件设计数字系统电路的主要优点如下:(1)设计灵活使用FPGA器件,可以不受标准系列器件在逻辑功能上的限制。而且修改逻辑可在系统设计和使用过程的任一阶段中进行,并且只须通过对所用的FPGA器件进行重新编程即可完成,给系统设计提供了很大的灵活性。(2)增大功能密集度功能密集度是指在给定的空间能集成的逻辑功能数量。可编程逻辑芯片内的组件门数高,一片FPGA可代替几片、几十片乃至上百片中小规模的数字集成电路芯片。用FPGA器件实现数字系统时用的芯片数量少,从而减少芯片的使用数目,减少印刷线路板面积和印刷线路板数目,最终导致系统规模的全面缩减。(3)提高可靠性减少芯片和印刷板数目,不仅能缩小系统规模,而且它还极大的提高了系统的可靠性。具有较高集成度的系统比用许多低集成度的标准组件设计的相同系统具有高得多的可靠性。使用FPGA器件减少了实现系统所需要的芯片数目,在印刷线路板上的引线以及焊点数量也随之减少,所以系统的可靠性得以提高。(4)缩短设计周期出于FPGA器件的可编程性和灵活性,用它来设计一个系统所需时间比传统方法大为缩短。FPGA器件集成度高,使用时印刷线路板电路布局布线简单。同时,在样机设计成功后,由于开发工具先进,自动化程度高,对其进行逻辑修改也十分简便迅速。因此,使用FPGA器件可大大缩短系统的设计周期,加快产品投放市场的速度,提高产品的竞争能力。(5)工作速度快FPGA/CPLD器件的工作速度快,一般可以达到几百兆赫兹,远远大于DPS器件。同时,使用FPGA器件后实现系统所需要的电路级数又少,因而整个系统的工作速度会得到提高。(6)增加系统的保密性能很多FPGA器件都具有加密功能,在系统中广泛的使用FPGA器件可以有效防止产品被他人非法仿制。(7)降低成本使用FPGA器件实现数字系统设计时,如果仅从器件本身的价格考虑,有时还看不出来它的优势,但是影响系统成本的因素是多方面的,综合考虑,使用FPGA的成本优越性是很明显的。首先,使用FPGA器件修改设计方便,设计周FPGA器件进行系统设计能节约成本。期缩短,使系统的研制开发费用降低;其次,FPGA器件可使印刷线路板面积和需要的插件减少,从而使系统的制造费用降低;再次,使用FPGA器件能使系统的可靠性提高,维修工作量减少,进而使系统的维修服务费用降低。总之,使用FPGA器件进行系统设计能节约成本7。3.2 分布式算法3.2.1 分布式算法基础分布式算法(Distributed Arithmetic,DA)是一项重要的FPGA技术,它广泛地应用在计算积之和之中。= (3-1)进一步假设系数是已知常数,是变量。无符号DA系统假设变量的表示方式如下: , (3-2)其中表示的第位,而也就是的第次采样,而内积可以表示方式为: (3-3)重新分配求和的顺序(也就是“分布式算法名称的由来” )其结果如下: (3-4)或者可以写成更为简洁的如下形式: (3-5)函数的实现需要特别注意。首选方法是利用一个LUT实现映射。也就是说预先编程个字的一个LUT,以接受一个N位输入向量,输出为。各个映射都由相应的二次幂加权并累加。利用如图3-2所示的移位加法器就能够有效地实现累加。在N次查询循环后就能完成了对内积y的计算8。图3-2 移位加法器DA体系结构3.2.2 有符号的DA系统下面我们要讨论的是如何修复式(3-1)使之能够处理有符号补码。在补码中,最高位有效位用来区别正数和负数。例如变-3的编码是。所以我们将采用下面的(B+1)位表示方法: (3-6)与式(3-3)联立得到输出y的定义如下: (3-7)要实现有符号DA系统,可以通过两种选择来修改无符号DA系统。这就是:(1)带有加/减控制的累加器(2)采用具有一个额外输入的ROM本文使用最常见的可转换累加器,因为LUT表中额外的输入位还需一个两倍字长的LUT表9。4 基于FPGA的FIR滤波器设计本章为全文的核心内容,首先确定基于Matlab的FIR数字低通滤波器的指标系数,再利用分布式算法结构, VHDL硬件语言完成设计与仿真,最后实现硬件系统以及硬件测试。4.1 基于Matlab的FIR数字低通滤波器抽头系数的提取 4.1.1 滤波器的设计指标采样频率:10MHz截止频率:100KHz类型:低通阶数:Kaiser窗函数16阶系数 Beta=0.54.1.2 滤波器的具体设计方法启动Matlab设计软件后,依次打开startToolboxesFilter DesignFilter Design & Analysis Tool(FDATOOL)就可以看到如图4-1的FDATOOL界面。选择所需要的参数指标,就会生成FIR低通数字滤波器的特性曲线以及重要的幅度相位波形图,如图4-2、图4-3所示,验证了其技术指标。图4-1 FDATOOL界面图4-2 幅度特性曲线图4-3 相位特性曲线冲激响应曲线4.1.3 参数提取与量化利用Matlab软件的FDATOOL图形用户界面工具,输入设计指标后便会自动生成所设计的FIR低通数字滤波器的系数即抽头数,一般线性相位的FIR低通数字滤波器的单位冲激响应都为实数,满足奇或偶对称的条件。所得单位冲激响应系数如表4-1所示:表4-1 FIR低通数字滤波器系数序数序列FIR滤波器的参数序数序列h(0)-0.6445h(15)h(1)-0.7191h(14)h(2)-0.6170h(13)h(3)0.8987h(12)h(4)0.3592h(11)h(5)0.1519h(10)h(6)0.1901h(9)h(7)0.8212h(8)计算的结果可通过File下的菜单中的Export命令取出,点击Export打开对话框,如图所示,点击OK可将滤波器系数数据存放到当前工作空间,并且以Num命名。冲激系数输出对话框保存并关闭当前窗口回到工作空间,在命令区输入Num回车,出现以下图如上图所示,根据设计所求出的16阶FIR低通数字滤波器的系数是实数,而在FPGA硬件仿真中要求输入的数据为整数,因此在这里,要对系数做归一化处理,即将h(n)扩大=2048倍,再分别进行四舍五入处理,最后转化为12位二进制补码(有效位为11位,最高位为符号位)结果如下所示:h(0)=h(15)=-82h(1)=h(14)=-77h(2)=h(13)=-35h(3)=h(12)=44h(4)=h(11)=149h(5)=h(10)=259h(6)=h(9)=351h(7)=h(8)=4034.2 FIR滤波器的FPGA实现4.2.1 模块划分自顶向下的实现方法,FIR滤波器的模块划分:输入模块(包括移位寄存器模块,加法与地址码形成模块)、查找表模块树状移位加法器模块、控制模块和包含参数的程序包。整个设计的层次结构如图4-4所示:图4-4 FIR滤波器的结构框图各模块实现的功能:各模块实现的功能:(1)输入模块,输入模块是完成对输入信号的处理,为后续电路做准备。它主要由移位寄存器和加法器与地址码形成模块组成。 (2)查找表模块,查找表模块的功能是对输入模块产生的地址码对应成输出值。查找表模块由4个LUT和加法模块组成。(3)树桩移位加法器模块,将LUT的输出值做树状移位加法运算。(4)控制模块,控制模块产生其他模块的控制信号,实现对输入模块、移位寄存器模块、查找表模块,锁存模块的控制,使各模块按照一定的时序依次执行各自的功能,从而完成滤波。它主要由控制器单元和计数器单元组成。4.2.2 FIR滤波器各模块的实现(1)板载频率分频本设计所用到的系统板上的晶振频率是50MHz,而设计用到的是10MHz,这样就要进行分频。CycloneII系列FPGA提供两个嵌入式锁相环。在图形编辑模式下输入ALTPLL就可以看到如图4-5(a)所示的界面,设置设计所需的参数就可以实现分频。本设计产生的分频模块图标如图4-5(b)所示。图4-5(a) ALTPLL界面图4-5(b) 分频模块(2)数据预处理-输入信号转换进程,对输入的二进制原码转换为二进制补码输出-加此进程的目的是方便仿真,硬件实现时不用library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity signed_buma isport ( X_in:in std_logic_vector(7 downto 0);-输入 clk:in std_logic;-输入信号50MHz buma:out std_logic_vector(7 downto 0)-补码输出 );end signed_buma;architecture arc of signed_buma issignal temp:std_logic_vector(7 downto 0);-中间信号signal b:std_logic;-中间信号beginb<=X_in(7);a:process(clk)beginif clk'event and clk='1' thenif b='1' thentemp<=(X_in(7)&(not X_in(6)&(not X_in(5)&(not X_in(4)&(not X_in(3)&(not X_in(2)&(not X_in(1)&(not X_in(0)+'1'else temp<=X_in;end if ;end if;end process;buma<=temp;end arc;(3)输入模块输入模块由移位寄存器和加法器与地址码形成模块组成。移位寄存器模块实现对并行输入信号的延迟输出,其寄存器的个数由FIR滤波器的阶数决定。加法与地址码形成模块首先实现B(i)=X(i)+X(N-i)的运算,即考虑了滤波器系数的对称性,把与相同两个滤波系数相乘的两个采样值预先相加,以减少硬件规模10。移位寄存器模块的VHDL代码如下所示:library ieee;use ieee.std_logic_1164.all;-延时entity delay isport( X_in: instd_logic_vector(7 downto 0);-滤波器输入 clk: instd_logic;-输入时钟 a0,a1,a2,a3,a4,a5,a6,a7: buffer std_logic_vector(7 downto 0); -寄存器 a8,a9,a10,a11,a12,a13,a14,a15:buffer std