1、用VHDL语言编程实现FIR滤波器精品资料摘要本课题是基于VHDL的数字滤波器的设计与实现,要求完成数字滤波器的VHDL语言的模块描述,通过MAX+PLUSII进行各模块及顶层的仿真,并下载实现数字滤波器功能。本设计采用窗函数法实现线性FIR数字滤波器的设计,并以一个十六阶低通FIR数字滤波器的实现为例说明了设计过程。首先,根据FIR数字滤波器的基本原理设计出系统总体框图;其次,用窗函数法计算出特性参数;接着用VHDL语言编写各模块的程序并仿真;最后,按照系统总体框图连接各模块实现数字滤波器的功能。实现滤波器的关键乘加运算,给出了将乘加运算转化为移位相加的算法,并采用了CSD码与并行加法结构来
2、提高速度。设计的电路通过软件进行了验证,结果表明:电路工作正确可靠,速度快,能满足设计要求。关键词:FIR滤波器,VHDL,窗函数,CSD码AbstractThis subject is design and realization of digital filter based on VHDL. It requires to complete the description of digital filter module which is based on VHDL language , simulate each module and the top layer using MAX+PL
3、USII and download to realize function of digital filter. This design uses window function method to realize the design of linear FIR digital filter and illustrate the design process according to the realization of a 16 steps low pass FIR digital filter. Firstly, design the total system diagram accor
4、ding to the basic principle of FIR digital filter; Secondly, use window function method to calculate characteristic parameters; Then compile and simulate the program of each module using VHDL language; Finally, connect the modules according to the whole system diagram to realize function of digital
5、filter. The key of realizing FIR filtermultiply and add operation, an operation of changing multiply and add operation to shift add will be given, besides, canonic signal digital and parallel add structure will be adopted to increase speed. The circuit that is designed is proved through the software
6、. The result shows that the circuit works correctly, reliably and quickly, meeting the designing requirement.Keywords: FIR digital filter, VHDL, Window Function, Canonic Signal Digital (CSD)目录第一章 绪论1一、课题的提出1(一) 课题的任务及内容1(二) 课题实现的可行性1二、国内外的研究情况2第二章 课题的初步设计4一、FIR滤波器的基本原理4(一) FIR滤波器的概述与结构4(二) FIR滤波器的线性
7、相位条件5(三) FIR滤波器的幅度特性6(四) FIR滤波器的零点特性8二、窗函数设计法8三、系统框图13四、设计特点13第三章 用VHDL语言编程实现FIR滤波器16一、参数设计16二、CSD码19(一) 传统的CSD码介绍19(二) 本设计中所使用的CSD码20三、设计框图21第四章 程序实现及调试过程24一、MAX+PLUSII软件介绍24二、VHDL语言介绍24三、VHDL的实现及各模块仿真结果25(一) VHDL的实现25(二) 各模块仿真结果25第五章 结果分析28第六章 结论及改进32致谢33参考文献34附录35仅供学习与交流,如有侵权请联系网站删除 谢谢48第一章 绪论一、
8、课题的提出(一) 课题的任务及内容本课题的任务是完成数字滤波器的VHDL语言的模块描述,并通过MAX+PLUSII进行各模块及顶层的仿真,并下载实现数字滤波器功能。主要内容有:(1)完成基于VHDL的并行FIR数字滤波器的设计。 (2)用MAX-PLUSII编程实现。 (3)完成数字滤波器算法的仿真。(二) 课题实现的可行性数字滤波器在需要进行数字信号处理的许多系统中起着重要作用,实际上,语音处理设备、图像处理设备和数字通信系统中都使用数字滤波器。数字滤波器能满足对幅度和相位特性的严格要求,避免了模拟滤波器所无法克服的电压漂移、温度漂移和噪声等问题。模拟滤波器是数字滤波器的基础,而现在,更多的
9、利用数字滤波器代替模拟滤波器作为频率选择性滤波器。从滤波器的单位冲激响应来看,滤波器可分为无限长单位冲激响应的IIR滤波器和有限长单位冲激响应的FIR滤波器。有限冲激响应(FIR)滤波器能在设计任何频率特性的同时保证严格的线性特性相位。目前FIR滤波器的实现方法有三种:利用单片通用数字滤波器集成电路、DSP器件和可编程逻辑器件实现。单片通用数字滤波器使用方便,但由于字长和阶数的规格较少,不能完全满足实际需要。使用DSP器件实现虽然简单,但由于程序顺序执行,执行速度必然不快。FPGA有着规整的内部逻辑阵列和丰富的连线资源,特别适合于数字信号处理任务,相对于串行运算为主导的通用DSP芯片来说,其并
10、行性和可扩展性更好。但长期以来,FPGA一直被用于系统逻辑或时序控制上,很少有信号处理方面的应用,其原因主要是因为在FPGA中缺乏实现乘法运算的有效结构。现在这个问题得到了解决,使FPGA在数字信号处理方面有了长足的发展。当今社会是数字化的社会,是数字集成电路广泛应用的社会。数字集成电路本身在不断地进行更新换代。随着微电子技术的发展,设计与制造集成电路的任务已不完全由半导体厂商来独立承担。系统设计师们更愿意自己设计专用集成电路(ASIC)芯片,而且希望ASIC的设计周期尽可能短,最好是在实验室里就能设计出合适的ASIC芯片,并且立即投入实际应用之中,因而出现了现场可编程逻辑器件(FPLD),其
11、中应用最广泛的当属现场可编程门阵列(FPGA)和复杂可编程逻辑器件(CPLD)。是现代电子工程师的必备工具。现场可编程门阵列FPGA(Field Programmable Gate Array) 是一种常见的高密集度可编程逻辑器件,它的特点是速度快,功耗低,通用性好,适应性强,不仅可以代替传统的数字集成电路,而且还可以代替一般的PLD器件和半定制的ASIC,特别是用于复杂系统的设计。使用FPGA可以非常大的减小硬件规模,降低设计成本,缩短设计周期,提高系统的可靠性、灵活性和保密性。FPGA已经成功的用于计算机硬件、工业控制、遥感遥测、雷达声纳、数据处理、智能仪表、广播电视和医疗电子等领域中。在
12、现代通信中,FPGA已经成功的用作程控交换、数字复接、编码译码和调制解调等。ALTERA公司的FLEX10K是工业界第一个嵌入式的PLD,具有高密度、低成本、低功率等优点。器件的主要结构特点是除主要的逻辑阵列块(LAB)之外,首次采用了嵌入阵列块(EAB),每个阵列块包含8个逻辑单元(LE)和一个局部互连。嵌入阵列块(EAB)是FLEX10K系列器件在结构设计上的一个重要部件,它是一个输入端口和输出端口都带有寄存器的一种灵活的RAM块,嵌入阵列块(EAB)组成的规模和灵活性对比较多的内存是合宜的。功能包括乘法器、向量的标准和误差校正电路等。在应用中,这些功能又能够联合完成数字滤波器和微控制器的
13、功能。二、国内外的研究情况FIR滤波器的实现方法有三种:利用单片通用数字滤波器集成电路、DSP器件和可编程逻辑器件实现。在国际上,用FPGA实现FIR滤波器的方法也有很多种,如用传统的乘累加结构、DA(分布式)算法、查表法、位串行法等等。当FIR滤波器的阶数为N时,传统的累加结构需要进行N次乘法和N-1次加法操作来实现累加之和,可以发现,当N很大时,每计算一个点,则需要很长的延迟时间。由于FPGA具有查找表结构,分布式算法在滤波器的设计方面显出了很高的效率,可大大提高信号的处理效率,对于位宽较小的数据来说,分布式算法的执行速度远高于乘累加运算,但是如果抽头系数N过多,则DA表的规模将十分庞大,
14、这是因为LUT的规模随着地址空间的变化(也就是N的增加)而呈指数增加,当N过大时,一个FPGA器件就不够用了。一种巧妙利用FPGA的查找表,将乘法转化为查找表的DA算法,并用ALTERA的FLEX10K器件分别实现了一个8位16阶的穿行于并行FIR滤波器,系统频率分别达到63MHz与101MHz,采样速度分别达到7MSPS与101MSPS。而DSP实现的FIR滤波器只能达到5MSPS,明显低于FPGA。用传统的位串行方法实现的一个8阶8位FIR滤波器,也只能达到5MSPS,明显低于串行式DA方法。如果利用整数的CSD的表示和最优表示,可以用较小的代价和与加法器级数无关的处理速度实现整数乘法运算
15、,能比DA方法用更少的逻辑资源实现FIR滤波器。随着FPGA集成规模的不断提高,许多复杂的数字运算已经可以用FPGA实现系统的设想即将变为现实。第二章 课题的初步设计一、FIR滤波器的基本原理(一) FIR滤波器的概述与结构从滤波器的单位冲激响应来看,滤波器可以分为无限长单位冲激响应的IIR滤波器和有限长单位冲激响应FIR滤波器。由于IIR滤波器的传递函数存在零之外的零点,所以单位冲激响应是无限持续的。而有限长单位脉冲响应(FIR)滤波器的系统函数只有零点,除原点外,没有极点,因而FIR滤波器总是稳定的。如果它的有限长单位脉冲响应是非因果的,总能够方便的通过适当的移位得到因果的单位脉冲响应,所
16、以FIR滤波器不存在稳定性和是否可实现的问底题。它的另一个突出的优点,是在满足一定的对称条件下,可以实现严格的线性相位,这一点IIR滤波器是难以做到的。由于线性相位特性在工程实际中具有非常重要的意义,如在数据通信、图像处理等应用领域,往往要求信号在传输和处理过程中不能有明显的相位失真,因而线性相位FIR滤波器得到了广泛的应用。IIR滤波器设计中可以利用模拟滤波器的设计结果,采用各种变换法,这些对FIR滤波器设计是不适用的,这是因为IIR滤波器的系数函数是有理分式的形式,而FIR滤波器的系统函数只是Z-1的多项式。FIR滤波器的单位冲激响应h(n)是一个有限长序列。它的传递函数和差分方程有如下形
17、式: (2-1) (2-2)有限长冲激响应(FIR)滤波器有以下特点:(1) 系统的单位冲激响应h(n)在有限个n值处不为零;(2) 系统函数H(z)在|z|0处收敛,极点全部在z=0处(稳定系统);(3) 结构上主要是非递归结构,没有输出到输入的反馈,但有些结构中(例如频率抽样结构)也包含有反馈的递归部分。FIR滤波器实现的基本结构有: (1) FIR滤波器的直接型结构; (2) FIR滤波器的级联型结构; (3) FIR滤波器的频率抽样型结构; (4) FIR滤波器的快速卷积型结构;滤波器最简单的构成方法就是图2.1所示的直接型结构。图中Z-1表示信号延迟一个采样周期的单位延迟元件。x(n
18、)是滤波器的输入,y(n)滤波器的输出。图2.1 FIR数字滤波器的直接型结构(二) FIR滤波器的线性相位条件FIR滤波器的单位脉冲响应h(n)是有限长的(0nN-1),其Z变换为 (2-3)这是z-1的(N-1)阶多项式,在有限Z平面上有(N-1)个极点都位于Z平面原点z=0处。FIR滤波器的DTFT为 (2-4)式中H()是正或负的实函数。()是的相频特性,如果()满足线性相位的条件,即()=-, - (2-5)这里的是一常数,则将(2-5)式代入(2-4)式得 (2-6)显然,等式中间和等式右边的实部与虚部应当各自相等,同样实部与虚部的比值应当相等,从而得到 (2-7)将上式两边交叉相
19、乘,再将等式右边各项移到左边,应用三角函数的恒等关系,得 (2-8)满足上式的条件是 (2-9)式(2-9)说明:(1) 对于任何N值可以获得相位延迟为的线性相位特性,为单位脉冲响应的中点;(2) h(n)必须以此中点呈偶对称特性。另外一种情况是,除了上述的线性相位外,还有一附加的相位, (2-10)利用(2-8)式类似的关系,可以得出新的解答为 (2-11)满足(2-11)式条件的滤波器,它的单位脉冲响应将奇对称于中点。(三) FIR滤波器的幅度特性下面分四种情况分别讨论H()的特点。(1) 当h(n)偶对称,N为奇数时: (2-12)幅度函数的特点:H()对 = 0, , 2呈偶对称。(2
20、) 当h(n)偶对称,N为偶数时: (2-13)幅度函数的特点:当=时,H()在z-1处有一个零点,H()对=呈奇对称; 如果滤波器在=处幅度不为零(如高通滤波器), 则不能用这种滤波器。 (3) 当h(n)奇对称,N为奇数时:在这种情况下h(n)的中间项 必须为零。 (2-14)幅度函数的特点:H()在0, , 2处都为零,也就是H(z)在Z=+1处为零;H()对0, , 2都呈奇对称。 (4) 当h(n)奇对称,N为偶数时: (2-15)幅度函数的特点:H()在0,2处为零,即H(z)在z=1处为零点;H()对0,2呈奇对称,对=呈偶对称。(四) FIR滤波器的零点特性由于线性相位FIR滤
21、波器的单位脉冲响应具有对称特性,即h(n)=+h(N-1-n)则 (2-16) (其中m=N-1-n)因此,线性相位FIR滤波器的系统函数具有以下特点: (2-17)可见,若是H(z)的零点,则也一定是H(z)的零点。又由于当是实数时,的零点必成共轭对出现,所以及也一定是H(z)的零点。因而线性相位FIR滤波器的零点必是互为倒数的共轭对。Zi的位置有四种可能的情况:(1) Zi既不在实轴上,也不在单位圆上,则零点是互为倒数的两组共轭对。(2) Zi不在实轴上,但是在单位圆上,则共轭对的倒数是它们本身,故只有一组共轭对。(3) Zi在实轴上而不在单位圆上,只有倒数部分,无复共轭部分。(4) Zi
22、既在实轴上又在单位圆上,有两种可能,z1或z1。二、窗函数设计法一般设计过程是先给定所要求的理想滤波器频率响应,然后设计一个FIR滤波器,它的频率响应用它来逼近理想的。这种逼近中最直接的方法是在时域中,用FIR滤波器的单位脉冲响应h(n)去逼近理想的单位脉冲响。因而,先由的IDTFT导出 (2-18)由于是矩形频率特性,故一定是无限长的序列,且是非因果的。然而我们要设计的是有限长的FIR滤波器,所以要用有限长序列h(n)来逼近无限长序列。 常用的方法是用有限长度的窗函数(n)来截取,即 (2-19)这里以一个截止频率为的线性相位理想低通滤波器为例,设低通相位特性的常系数为,即 (2-20)则
23、(2-21)它是中心在的偶对称的无限长非因果序列.要得到有限长的序列,最简单的办法,就是以为对称中心截取一段长度为N的序列,为了保证h(n)是因果序列,可以选择 (2-22)这种直接截取好比是用一个矩形窗去和相乘,即 (2-23)这里窗函数就是矩形序列,加窗以后对理想低通滤波器的频率响应将产生什么样的影响呢?根据在时域是相乘关系,在频域则是卷积关系: (2-24)其中, 为矩形窗谱,是FIR滤波器频率响应。则实际FIR滤波器的幅度函数H()为 (2-25)可见对实际FIR滤波器频率响应的幅度函数H()起影响的是窗函数频率响应的幅度函数,通过频域卷积过程看的幅度函数H()的起伏现象,可知,理想滤
24、波器的单位脉冲响应经窗函数加权后,对幅度特性产生的主要影响有:(1) 理想的在通带截止频率处的间断点变成了连续曲线,从而使H()出现一个过渡带,其宽度等于窗函数的主瓣宽度。(2) 由于窗函数旁瓣的作用,使幅频特性出现波动。旁瓣所包围的面积越大,通带波动增加,阻带衰减减少。(3) 增加截取长度N,则在主瓣附近的窗的频率响应为 (2-26)可见,改变N,只能改变窗谱的主瓣宽度,改变坐标的比例以及改变的绝对值大小,但不能改变主瓣与旁瓣的相对比例,这个相对比例由来决定,或者说由窗函数的形状来决定。因而截取长度增加时,只会减小过渡带宽度,因而不会改变肩峰的相对值。矩形窗截断产生的肩峰,增加了通带内的波动
25、和减少了阻带的衰减。怎样才能改善这两项指标呢?这只能着手于改变窗口函数的形状。从以上讨论中看到,一般希望窗口函数满足两项要求:(1) 主瓣宽度要小,以获得较陡的过渡带。(2) 与主瓣的幅度相比,旁瓣应尽可能的小,以减小带内、带外波动的最大振幅。一般来说,以上两点很难同时满足。当选取主瓣宽度很窄时,旁瓣的分量势必增加,从而带内带外的波动也增加了;当选取最小的旁瓣幅度时,降低了带内带外的波动,但过渡带的陡度减小。所以,实际采用的窗函数其特性往往是它们的折衷,即在保证主瓣宽度达到一定要求的前提下,适当牺牲主瓣宽度来换取旁瓣波动的减小。常用的几种窗函数及比较下面讨论几种常用的窗口函数。1) 矩形窗 (
26、2-27)2) 汉宁窗(Hanning),又称升余弦窗 (2-28)利用DTFT的调制特性并代入三角函数的欧拉公式,得 (2-29)当N1时,N-1N,因此幅度函数近似为 (2-30)这三部分之和,使旁瓣相互抵消,能量集中在主瓣,但代价是主瓣宽度比矩形窗的主瓣宽度增加一倍。3)汉明窗(hamming),又称改进的升余弦窗将汉宁窗改进,可以得到旁瓣更小的汉明窗,形式为 (2-31)其频率响应的幅度函数为 (2-32)结果可将99.963%的能量集中在窗谱的主瓣内。与汉宁窗相比,主瓣宽度相同为,但旁瓣幅度更小,旁瓣峰值小于主瓣分峰值的1%。4)布莱克曼窗(Blackman),又称二阶升余弦窗为了更
27、进一步抑制旁瓣,可再加上余弦的二次谐波分量,得到布莱克曼窗: (2-33)其频谱的幅度函数为 (2-34)这样可以得到更低的旁瓣,但是主瓣宽度却不得不进一步加宽到矩形窗的三倍。5)凯塞窗以上四种窗函数,都是以增加主瓣宽度为代价来降低旁瓣。凯塞窗则可以在主瓣宽度与旁瓣衰减之间自由的选择。凯塞窗是由零阶贝塞尔函数构成的 (2-35)是一可以自由选择的参数,越大,则(n)窗越窄,而频谱的旁瓣越小,但主瓣宽度也相应增加。因而改变值就可以对主瓣宽度和旁瓣衰减进行选择,=0相当于矩形窗。几种窗函数的比较图2.2给出了四种窗函数的序列包络形状。图2.2 四种常用的窗函数(1) 矩形窗;(2) 汉宁窗;(3)
28、 汉明窗;(4) 布莱克曼窗图2.3 窗口函数频谱(N=51,A=20lg|W()/W(0)|)从(a)(d),旁瓣的衰减逐步增加,主瓣相应加宽(用对数可放大小旁瓣)。 图2.4 在同一指标下用四种窗口设计的LP滤波器频率特性(N=51,wc=0.8)可见,矩形窗设计的过渡带最窄,但阻带最小衰减也最差,仅-21dB;布莱克曼窗设计的阻带最小衰减最好,达-74dB,但过渡带最宽,约为矩形窗设计的三倍。几种窗口函数的具体性能比较见表2.1。表2.1. 几种窗口函数的具体性能比较窗函数主瓣宽度旁瓣峰值衰减(dB)阻带最小衰减(dB)矩 形4/N-13-21汉 宁8/N-31-44汉 明8/N-41-
29、53布莱克曼12/N-57-74三、系统框图根据上面的关于FIR滤波器结构的介绍,采用直接型结构,可以画出滤波器的系统框图,如图2.5。图2.5 系统框图四、设计特点FIR滤波器被称为有限长脉冲响应滤波器,它的单位脉冲响应h(n)只有有限个数据点。输入信号经过线性时不变系统输出的过程是一个输入信号与单位脉冲响应进行线性卷积的过程,即: (2-36)式中,x(n)是输入信号,y(n)是卷积输出,h(n)是系统的单位脉冲响应。可以看出,每次采样y(n)需要进行N次乘法和N-1次加法操作实现乘累加之和,其中N是滤波器单位脉冲响应h(n)的长度。本课题是要设计一个16阶8系数的FIR滤波器,则N=16
30、,x(n),h(n)均用8位二进制数表示。也就是说每次采样y(n)需要进行16次乘法和15次加法。假设有16个数据x0,x1,x2,,x14,x15,每个数据都用8位二进制数表示,现要将这16个数相加。如果用传统的累加结构,就需要15个加法器。如果每次加法都用一个时钟信号触发的话,就需要15个时钟周期。而且,每计算一次加法需要一定的时间,则15次加法需要很长的延迟时间,这不利于提高信号的处理效率。传统的累加结构如图2.6所示:图2.6 传统的累加结构但是,如果先将16个数据分为8组,x0与x1,x2与x3x14与x15。这样的话,8组数据就可以同时进行加法,只需要一个时钟周期。再将上一步所计算
31、得到的8个数据分组,分为四组,进行加法。以此类推,直到算完为止,这样就需要15个加法器,但只需4个时钟周期。与传统累加结构相比,并行加法结构大大减少了计算时间,提高了计算速度。并行加法结构如图2.7所示:图2.7 并行加法结构在本次设计中,另一个特点就是将FIR的系数用CSD码表示,将乘法运算转化为移位相加运算。由于两个8位二进制数相乘,所需要的时间及硬件资源较多,不利于提高运算的速度,因此,用移位相加运算来代替乘法运算。通常情况下,一个数可以表示为2的整数次方的和或者差的形式,采用这种方法表示的数叫做SD数(SignedDigit Number)。虽然一个数的表示形式不唯一,但是存在一种最小
32、权重的表示形式,这种表示形式叫做CSD(Canonical SignedDigit)。一个给定的数的CSD表示形式是唯一的。CSD表示相对于标准二进制表示的改进在于引入了负的符号位,从而降低了非零位个数,大大降低了逻辑资源的占用。CSD可以用较小的代价和与加法器级数无关的处理速度实现整数乘法运算。第三章 用VHDL语言编程实现FIR滤波器一、参数设计(一) 设计指标下面以一个十六阶FIR低通滤波器为例说明设计方法和过程。滤波器类型:FIR滤波器类 型:低通阶 数:16阶采样频率:100kHz,精度N-1及n0时(n)=0。这里仅以冲激响应对称,即h(n)=h(N-1-n),n=0,1,N-1,
33、时进行说明。低通滤波器的频率响应如下式所示: (3-3)其中为对抽样频率归一化的频率,c为归一化截止频率。(由设计指标可知,采样频率为100KHz,截止频率为5KHz,将采样频率归一化为2,则截止频率归一化为0.1,即:c=0.1)利用反傅立叶变换公式求出与式(3.3)对应的冲激响应,如式(3.4) 所示: (3-4)由于要求设计一个16阶的FIR,则N=16。根据式(3-4)可计算得如下:(0)=(15)=0.030025765(4)=(11)=0.081074297(1)=(14)=0.04365539(5)=(10)=0.090077296(2)=(13)=0.057190986(6)=
34、(9)=0.096388641(3)=(12)=0.069900094(7)=(8)=0.099639786在本次设计中我使用的窗函数为汉宁窗,根据第二章第二节的内容可知,汉宁窗的表达式为: (3-5)由于要求设计一个16阶的FIR,则N=16。可计算出汉宁窗的系数如下:(0)= (15)=0(4)= (11)=0.552264231(1)= (14)=0.043227271(5)= (10)=0.75(2)= (13)=0.165434696(6)= (9)=0.904508497(3)= (12)=0.345491502(7)= (8)=0.9890738根据,可计算出的符合设计指标的线性
35、相位16阶FIR数字低通滤波器的特性参数如下:h(0)=h(15)=0h(4)= h(11)=0.044774434h(1)=h(14)=0.001887103h(5)= h(10)=0.067557972h(2)=h(13)=0.009461373h(6)= h(9)=0.087184344h(3)=h(12)=0.024149888h(7)= h(8)=0.098551101为了设计的方便,可将上述数据扩大,由于滤波器输出,若h(n)扩大1000倍,则y(n)也扩大1000倍,最后只要将y(n)除以1000即可,但要计算y(n)除以1000十分复杂,因此,可将h(n)扩大1024倍,即,这
36、样只需将y(n)除以1024,即右移10位即可。 将h(n)乘以1024,得到以下数据h(0)=h(15)=0h(4)= h(11)=45.84902042h(1)=h(14)=1.932393472h(5)= h(10)=69.17936333h(2)=h(13)=9.688445952h(6)= h(9)=89.27676826h(3)=h(12)=24.72948531h(7)= h(8)=100.9163274 将上述数据取整后h(0)=h(15)=0h(4)= h(11)=46h(1)=h(14)=2h(5)= h(10)=69h(2)=h(13)=10h(6)= h(9)=89h(
37、3)=h(12)=25h(7)= h(8)=101将其化为二进制数(8位)h(0)=h(15)=00000000h(4)= h(11)=00101110h(1)=h(14)=00000010h(5)= h(10)=01000101h(2)=h(13)=00001010h(6)= h(9)=01011001h(3)=h(12)=00011001h(7)= h(8)=01100101二、CSD码(一) 传统的CSD码介绍通常情况下,一个数可以表示为2的整数次方的和或者差的形式,采用这种方法表示的数叫做SD数(SignedDigit Number)。一个绝对值小于1的数x可以表示成如下的形式: (3
38、-6)其中,。通常一个数的表示形式并不唯一。例如0.375可以有以下几种表示形式:0.375 =2-2+2-3 (3-7)0.375 =2-1-2-3 (3-8)0.375 =20-2-1-2-3 (3-9)0.375 =20-2-1-2-2+2-3 (3-10)式(3-7),(3-8),(3-9),(3-10)的权重分别为2,2,3,4。虽然一个数的表示形式不唯一,但是存在一种最小权重的表示形式,这种表示形式叫做CSD(Canonical SignedDigit)。数的CSD表示是一种三元数值系统,即将数用(1, 0, 1)来进行表示,对于任一具有最少1和1比特位数的二进制数CSD编码表示具
39、有其唯一形式。因此,CSD编码的主要应用是在乘法运算中减少部分积的乘积项,从而减少所用加法器/减法器的数量,一个nbit的乘法运算的加/减和移位的操作次数不会超过n/2,随着字长的增加其平均数减少到n/34,5。一个数,如果对于所有,= 0,1,or1且对于所有,满足,则称为的CSD编码表示。例如,=102=010010(代表1)为102的CSD编码表示,而=00 010则为的非CSD编码表示。由于一个数的CSD表示中的非0比特位总是不相邻的,如果用一个2bit的二进制数表示一个CSD码中的非0比特数,01代表1,11代表1(最高位通过符号位扩展实现),则可以将一个数的CSD编码表示转换为二进
40、制CSD编码(BCSD)表示。例如,一个CSD表示数= 010 010(代表1),其对应的BCSD编码表示为=11 01 11 010。二者具有一一对应关系,因此,如果得到了一个二进制补码数的BCSD编码表示,则可以通过上面的逆过程求得对应数的CSD表示。根据上述原理,一种将二进制补码数变换得到其CSD编码表示的过程描述为:首先将二进制补码表示转换为称为BCSD编码的表示,然后转换BCSD编码得到数的CSD编码表示。(二) 本设计中所使用的CSD码一个整数X与另一整数Y的乘积的二进制表示可以写成: (3-11)对于标准二进制,由于时的对应项Y并不参与累加运算,所以可以用另一种表示方法使非零元素
41、的数量降低,从而使加法器的数目减少,降低硬件规模。有符号数字量(SD)有三重值0,-1,+1,如果任意两个非零位均不相邻,即为标准有符号数字量(CSD)。 可以证明CSD表示对给定数是唯一的并且是最少非零位的。CSD表示相对于标准二进制表示的改进在于引入了负的符号位,从而降低了非零位个数,大大降低了逻辑资源的占用(大约平均降低33的逻辑资源)。当用硬件实现时,常常限制系数位数,即每个系数与N个正(负)2的幂次之和近似。标准二进制数在整数轴上是紧密和均匀分布的,而CSD码是非均匀分布的,其对实系数的量化误差比标准二进制大,虽然增加N可以减小量化误差,但是会增大逻辑资源的消耗;而且CSD表示无法应
42、用流水线结构,从而降低处理速度。 那如何将一个整数转化为CSD码?首先,将这个整数化为二进数X。将一个二进制数(8位)转化为CSD码的算法如下:(1) 判断该二进数是否有连续3个或3个以上的1。如果有,则可将其化为CSD码;如果没有,则不必将其化为CSD码。(2) 设该二进数,如果X有连续3个或3个以上的1,即,,则X的CSD码等于X加2i。在上节中已将FIR滤波器的特性参数计算出来了,可见只有h(4)与h(11)具有3个连续的1,可将其化为CSD码:h(4)=h(11)=00101110+2=00101110+00000100=00110010图3.1 h(4)的二进制与CSD实现由图3.1可以看出,对于h(4)或者h(11)来说,当用二进制数表示时需要3个加法器,而用CSD码则只需要2个加法器,减少了加法器的个数。三、设计框图 根据FIR滤波器的特性参数,可画出H1、H2H7的框图如下图3.2至图3.8图3.2 H1(H14)的结构图图3.3 H2(H13)的结构图图3.4 H3(H12)的结构图图3.5 H4(