
几种fpga的fir滤波器方案详析.doc
22页FIR 滤波器设计方案DesigneryaoguaiwsFIR滤波器的基本结构一. 横截型(卷积型、直接型)
其中的第一部分为(这是一个FIR子系统,是由N节延时单元构成的梳状滤波器):级联的第二部分为(这是一个由N个一节网络并联而成的IIR子系统):频率抽样型的结构如图所示:该系统需要2N个储存单元用来缓存输入的数据,N个储存单元用来储存系数,一共需要花费3N个储存单元量化误差分析理论设计的FIR滤波器系数都是无限精度的,当他们有硬件实现时,必须要量化,这必然引起量化误差这也就使得理论滤波器和实际滤波器存在一些性能上的差别<由于FIR滤波器只有z=0只一个极点,他在单位圆内,不会出现系统的不稳定,这还算Lucky! >系数的量化误差对系统的影响,不仅仅和量化字长有关,更是和滤波器的结构密切相关的!分析:假设为理论系数,为量化系数,为量化误差,则有:可以得到由于各的偏差引起的第i个零点位置变化量为(推导过程见:《数字信号处理教程.程佩青.清华大学出版社》):上式分母中的每一个因子是由一个零点指向的矢量,而整个分母正是所有其它零点指向该零点的矢量积当系统的零点非常密集时,他们互相的矢量长度就很短,矢量积就更小,就较大高阶直接型滤波器的零点数目多而密集,而低阶直接型滤波器的零点数目少而稀疏,因而前者对系数的量化误差要敏感得多。
实现方案比较· Direct-type使用储存单元最少,但是由于阶数很高,所以零点非常密集,系数的量化误差对零点的影响较大,必须要通过增加系数的量化字长来确保系统的正确· Cascade-type使用的储存单元较多,但是由于每一个子系统都是二阶系统,故量化误差对整个系统的影响较小,可以使用较短的系数量化字长· Decimation-type使用的储存单元较多,由于每一个并联的二阶字系统的误差值对自身影响,故该结构的整个系统误差最小但是由于引入了IIR系统,故在系数量化的时候,必须是极点量化在单位圆之内,否则将使系统不稳定指标:采样频率 系数量化字长 通带截止频率 阻带截止频率 通带纹波系数 阻带衰减 在右上角的幅频特性曲线图(经放大)中,我们可以看到,系数经过量化后,会对幅频特性产生一定的影响但是由于量化比特数非常的高,所以影响不是太大,能符合我们的设计指标右下角展示了量化过后的系数对零极点的影响设计方案由于要求是硬件最少,并且最优,我们采取第一种方案,即:系数高bit量化的直接型结构。
由于FIR滤波器的系数镜像对称,故将线形相位FIR滤波器的流图改造成如下格式:在上结构中,每一个乘加单元
FIR滤波器的实现框图如下:ROM-cell实现:方案一(直接法)由于该FIR滤波器的性能要求极高,所以在实现时,FIR滤波器的系数非常的多且由以上的“零极点图”可以看出,零点非常的密集,这就修要使用高bit来量化FIR滤波器的系数当采用27-bit量化时才能取得较好的结果这样,理论上需要由于系数众多,所以需要大量的存储单元方案二(缩放法【ScalingTechä】)可以证明,一个十进制数要被二进制数表示时,该十进制数越接近于,产生相同精度时,用于表示该数的二进制位数越少若,其中c为滤波器系数,为量化间距,N为量化比特数假设为相对量化误差,则有:显然,当相对量化误差一定时,系数c越大,所采用的量化比特数N就越少在下图中可以很明显地看出量化间距对相对量化误差的影响很明显,当系数c太小时,很容易被量化间距所造成的量化噪声所淹没,而完全不能恢复所以我们可以先把所有的系数(左图)放大后再进行量化,将放大后的数(右图)进行量化并进行乘法运算,最后将乘法的结果减小倍(这对于硬件实现非常容易,只需要讲结果右移N位即可)但是我们从系数上来观察,发现采用“直接型”FIR滤波器所产生的系数相差非常的大,其动态范围高达,不宜采用单因子缩放。
这里引入一个叫做缩放矩阵和趋一矩阵的概念:记为缩放矩阵为,趋一矩阵为将所有的系数绝对值被1除,将得到的商项下取整得,由于,所以必有,再计算和,这时将满足分别将P和用二进制量化为t比特、c比特,于是有:由于,所以只需要用较少的比特来量化他就可以满足精度的要求,试验证明:当c=14时,较精确的满足了要求再算得t=5,所以一共只需要采用19比特就可以了这样每个系数就节约了8比特理论上一共节约了误差分析:1. 当采用直接法量化时,N=27,,算得:2. 而采用收缩法量化时,N=14,,算得:3. 可以看出,当采用【ScalingTechä】技术以后,不仅能将量化比特数几乎降为原来的一半,而且最大相对量化误差降为原来的当采用【ScalingTechä】算法时,乘法器所需要的最高速度变为:采用直接法时,MAC单元可以直接采用Booth乘法器,而采用缩放法时需要对Booth乘法器添加移位运算器(shifter)当采用收缩法时,由于最后要将乘法结果进行右移以后才能将结果进行累加,所以会损失一定的精度移位得越多,精度损失得越多直接法收缩法ROMMACROMMAC资源耗费ROMs(64´1)2714LUTs10811479237MAC-cell实现:MAC-cell是由一个乘法器和一个累加器组成,累加器设计较为简单,也不会占用太多的资源,关键在于乘法器的设计。
在该FIR滤波器中,乘法器要实现的乘法运算,不合理的结构对资源的占用是巨大的,极有可能使资源崩溃!乘法器的实现大致分为3种1. 串行乘法器:资源最节约,但是由较多的延时,适合于大规模;2. 并形乘法器:资源消耗很大,但是速度较快,适合于中规模;3. 查表乘法器:资源耗费巨大,速度最快,只适合于小规模在该设计中,由于乘法运算的位数很高,所以必须采用“串行乘法器”来实现其功能串行乘法器”在算法上是由一个移位寄存器
在编码方案中,二进制补码表示法是目前DSP领域最为流行的有符号数字表示法,在该编码方案中,若最高位为’0’,则表示该数为正数,反之则表示为负数首先将乘数和被乘数的首位进行比较,若它们相同,则直接送到无符号乘法器中进行乘法运算—我们可以证明两个负数相乘和两个正数相乘都可以采用无符号乘法器
智利的右移是算术移位,即如果移到后,原来得值仍然保留在中Booth Arithmetic 校正算法Booth算法资源消耗(LUTs)339107最大时钟频率(MHz)105.7144.0可以明显地看出,采用Booth算法后,不但能大大的节约资源(339—>107),而且可以大幅的提高最大频率(105.7—>144.0),故在有符号乘法器中都采用Booth乘法器输入缓冲FIFO的读写时钟的时序关系图:在in_clk的上升沿,缓冲F。












