FIR滤波器设计方案_第1页
FIR滤波器设计方案_第2页
FIR滤波器设计方案_第3页
FIR滤波器设计方案_第4页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、FIR滤波器设计方案DesigneryaoguaiwsFIR 滤波器的基本结构一 横截型 (卷积型、直接型)<Direct-type>FIR 滤波器的差分方程表达式为:N1y nh m x nmm 0很明显, 这就是线形时不变系统的卷积和公式,也就是 xn 的延时级联的横向结构,如下图所示:由于线形相位FIR 滤波器的系数是镜像对称的,所以 N 阶滤波器系数只需要 N 个2储存单元即可。 而输入 xn 的值需要N 个储存单元, 这样总共就需要 N N3 N 个22储存单元。二 级联型 <Cascade-type>将 H(z) 分解成实系数二阶因子的乘积形式:N1N2H

2、( z)h(n) z n( 0k1k z 12 k z 2 )n0k 1图中画出了一个FIR 滤波器的级联结构, 其中每一个二阶因子用一个横截型来表示:这种结构的每一节控制一对零点,因而在需要控制传输零点时可以采用它。但是这种结构所需要的系数ik (i0,1,2; k 1,2, , N 2) 比卷积型的系数 hn 要多,因而需要更多的储存单元。理论上需要3N 个单元储存系数,再加上N 各单元储存中间结果,2结果一共需要3NN5 N 个储存单元。22三 频率抽样型 <Decimation-type>把一个 N 店有限长序列的z 变换 H(z) 在单位圆上作N 等分抽样,就得到H (k

3、 ) ,其主值序列就等于h(n)的离散傅里叶变换H (k ) 。即 H(z) 的内插公式为:H (z) (1 zN1 N 1H (k )WN k z 1N k 1 1这个公式就为FIR 滤波器提供了另外一种结构,这种结构由两部分组成。N 1H ( z)1 H c ( z)H k' ( z)Nk 0其中的第一部分为(这是一个FIR 子系统,是由N 节延时单元构成的梳状滤波器):H c (z) 1z N级联的第二部分为(这是一个由N 个一节网络并联而成的IIR 子系统):N 1N 1H (k)H k'(z)k 0k 1 1WN k z 1频率抽样型的结构如图所示:该系统需要2N 个

4、储存单元用来缓存输入的数据,共需要花费3N 个储存单元。N 个储存单元用来储存系数,一量化误差分析理论设计的FIR 滤波器系数都是无限精度的,当他们有硬件实现时,必须要量化,这必然引起量化误差。这也就使得理论滤波器和实际滤波器存在一些性能上的差别 <由于滤波器只有 z=0 只一个极点,他在单位圆内,不会出现系统的不稳定,这还算 Lucky! >FIR系数的量化误差对系统的影响,不仅仅和量化字长有关,更是和滤波器的结构密切相关的!分析:假设 bk 为理论系数,bk 为量化系数,bk 为量化误差,则有:bkbkbk可以得到由于各 bk 的偏差bk 引起的第 i 个零点 zi 位置变化量

5、为 (推导过程见:数字信号处理教程 .程佩青 .清华大学出版社P408410):NN kziNzibkk 1( zizl )l 1li上式分母中的每一个因子( zi zl ) 是由一个零点zl 指向 zi 的矢量,而整个分母正是所有其它零点zl (li ) 指向该零点zi 的矢量积。 当系统的零点非常密集时,他们互相的矢量长度就很短,矢量积就更小,zi 就较大。高阶直接型滤波器的零点数目多而密集,而低阶直接型滤波器的零点数目少而稀疏,因而前者对系数的量化误差要敏感得多。实现方案比较? Direct-type使用储存单元最少, 但是由于阶数很高, 所以零点非常密集, 系数的量化误差对零点的影响较

6、大, 必须要通过增加系数的量化字长来确保系统的正确。? Cascade-type使用的储存单元较多, 但是由于每一个子系统都是二阶系统, 故量化误差对整个系统的影响较小,可以使用较短的系数量化字长。? Decimation-type使用的储存单元较多,由于每一个并联的二阶字系统的误差值对自身影响,故该结构的整个系统误差最小。但是由于引入了 IIR 系统,故在系数量化的时候,必须是极点量化在单位圆之内,否则将使系统不稳定。指标:采样频率 f s59kHz系数量化字长b27 bit通带截止频率f pc 22kHz阻带截止频率fsc26kHz通带纹波系数6.88 10 5 dB阻带衰减142.2dB

7、在右上角的幅频特性曲线图(经放大)中,我们可以看到,系数经过量化后,会对幅频特性产生一定的影响。 但是由于量化比特数非常的高, 所以影响不是太大,能符合我们的设计指标。 右下角展示了量化过后的系数对零极点的影响。设计方案由于要求是硬件最少,并且最优,我们采取第一种方案,即:系数高bit 量化的直接型结构。由于FIR 滤波器的系数镜像对称,故将线形相位FIR 滤波器的流图改造成如下格式:在上结构中,每一个乘加单元<MAC> 都是将镜像对称的两个值进行MAC 运算。所以我们在实现输入值xn 的缓冲时,将缓冲设置成两个镜像对称的缓冲器<top-buffer &buttom-

8、buffer> 。这样在实现累加时两个 buffer 可以共用一个指针减计数器<decrementor>(采用减计数器,而不采用加计数器的原因将会在后续的时序关系中得到解释),而不必要使用一个指针加计数器<incrementor> 和一个指针减计数器<decrementor> ,或者让系数 ROM 的指针变量产生复杂的运动, 这能简化时序设计的复杂性,同时也就节约了硬件; 并且采用用镜像对称 buffer ,再不额外增加硬件的同时,可以降低时钟一半的频率,这是非常重要的。虽然增加了一个 (24+1)-bit 加法器,但是同时也减少了ROM 中的计数器(

9、资源共享原理将在ROM 模块介绍),并且换来上述的优化设计。在上述的原理框图中我们可以看到,所有的MAC 都是规则分布的,这种几何上的“美”,正好是时分复用的最好例证。假设 xn 的输入时钟clk 的速率为 Vx n59kHz , MAC 单元的处理速率为 VMAC ,若存在 VMACN59kHz 3.304MHz ,则可以实现 MAC 单元的复用, 这样就将Vx n562N 个 MAC 单元降低为 1 个,大大的节约了硬件。2FIR 滤波器的实现框图如下:ROM-cell实现:方案一(直接法)由于该 FIR 滤波器的性能要求极高,所以在实现时,FIR 滤波器的系数非常的多。且由以上的“零极点

10、图”可以看出,零点非常的密集,这就修要使用高bit 来量化 FIR 滤波器的系数。当采用 27-bit 量化时才能取得较好的结果。这样,理论上需要5627bit1539bit 。由于系数众多,所以需要大量的存储单元。方案二(缩放法【ScalingTech 】)可以证明, 一个十进制数要被二进制数表示时,该十进制数越接近于1,产生相同精度时,用于表示该数的二进制位数越少。若c 1 ,2 N ,其中 c 为滤波器系数,为量化间距, N 为量化比特数。假设 为相对量化误差,则有:1c c 2N1Nlog 2 ( c)显然,当相对量化误差一定时,系数c 越大,所采用的量化比特数N 就越少。在下图中可以

11、很明显地看出量化间距对相对量化误差的影响。 很明显, 当系数 c 太小时, 很容易被量化间距所造成的量化噪声s 所淹没,而完全不能恢复。所以我们可以先把所有的系数(左图)放大2N 后再进行量化,将放大后的数(右图)进行量化并进行乘法运算,最后将乘法的结果减小2N 倍(这对于硬件实现非常容易,只需要讲结果右移 N 位即可)。但是我们从系数上来观察,发现采用“直接型”FIR 滤波器所产生的系数相差非常的大,其动态范围高达105,不宜采用单因子缩放。这里引入一个叫做缩放矩阵和趋一矩阵的概念:记为缩放矩阵为Sr c ,趋一矩阵为 Trt 。将所有的系数绝对值Cr 被 1 除,将得到的商项下取整得 Qr

12、,由于 Cr1,所以必有Qr 1 ,再计算 P log 2Qr 和 Cr CrP ,这时 Cr 将满足 Cr21,Cr 1 。分别将 P 和 Cr 用二进制量化为 t 比特、 c 比特,于是有:C0 cC0cP0tSr cCr b Tr tC55 cC55cP55 t由于 Cr1 ,所以只需要用较少的比特来量化他就可以满足精度的要求,试验证明:当 c=14 时,较精确的满足了要求。再算得t=5,所以一共只需要采用19 比特就可以了。这样每个系数就节约了8 比特。理论上一共节约了56 8448bit 。误差分析:1.当采用直接法量化时, N=27 ,cmin9.9798 10-7 ,算得: ma

13、x27cmin10.75%2272.而采用收缩法量化时,N=14 , cmin0.50037 ,算得:1510.0122%maxcmin2143. 可以看出,当采用【 ScalingTech 】技术以后,不仅能将量化比特数几乎降为原来的一半,而且最大相对量化误差降为原来的1 。62当采用【 ScalingTech】算法时,乘法器所需要的最高速度变为:VACCb VMAC14(5659kHz )46.26MHz采用直接法时, MAC 单元可以直接采用 Booth 乘法器,而采用缩放法时需要对乘法器添加移位运算器 (shifter) 。当采用收缩法时,由于最后要将乘法结果进行右移以后才Booth能

14、将结果进行累加,所以会损失一定的精度。移位得越多,精度损失得越多。直接法收缩法ROMMACROMMACROMs(64 1)2714资源耗费10811479237LUTsMAC-cell实现:MAC-cell是由一个乘法器和一个累加器组成,累加器设计较为简单,的资源,关键在于乘法器的设计。在该FIR 滤波器中,乘法器要实现14bit的乘法运算, 不合理的结构对资源的占用是巨大的,极有可能使资源崩溃!致分为 3种也不会占用太多27bit40bit乘法器的实现大1.串行乘法器:资源最节约,但是由较多的延时,适合于大规模;2.并形乘法器:资源消耗很大,但是速度较快,适合于中规模;3.查表乘法器:资源耗

15、费巨大,速度最快,只适合于小规模。在该设计中,由于乘法运算的位数很高,所以必须采用“串行乘法器”来实现其功能。 “串行乘法器” 在算法上是由一个移位寄存器 <SR>和一个累加器构成 <ACC> ,SR 负责进行乘数的移位,而 ACC 负责将移位的二进制数相加,并把结果保留在寄存器中,以供下次使用。方案一(校正算法)由于在该MAC 运算单元中,涉及到的是两个有符号数的乘法,所以还必须先对有符号数进行编码, 然后才能进行运算。 我们这里采用二进制补码的编码方案, 该方案是目前在 DSP 领域类最为流行的有符号数字表示法。考虑到,两个符号相依的数不能直接采用无符号乘法器 &l

16、t;unsigned-Multiplier> ,所以我们必须先对编码做一定转换后送入无符号乘法器,然后将结果通过另一个与之相反的网络,使结果正确。算法框图如下图所示:要对有符号数进行乘法运算,必须要将它们进行编码。在编码方案中,二进制补码表示法是目前 DSP 领域最为流行的有符号数字表示法,在该编码方案中,若最高位为0,则表示该数为正数,反之则表示为负数。首先将乘数和被乘数的首位进行比较,若它们相同,则直接送到无符号乘法器中进行乘法运算我们可以证明两个负数相乘和两个正数相乘都可以采用无符号乘法器 <unsigned-Multiplier> 得到结果。若首位不相同,则将其中的负

17、数通过“负正变换网络”<N2P Network> 后再将两数送入无符号乘法器,最后将结果在通过“正负变换网络”<P2NNetwork> ,进行校正。此时得到的结果就是正确的。方案二( Booth 算法)该算法不仅能处理负数相乘的情况,而且速度较快。下图给出了Booth 算法的流程:乘数与被乘数分别载入Q 和 M 寄存器内, 同时还有一个 1 比特寄存器, 位于 Q 寄存器最低位 Q0 的右边,称为 Q。乘法的结果出现在A 和 Q 寄存器中。 A 和 Q的初始值为 0。控制逻辑也是每次扫描乘数的一位(扫描的次数位Q 长度 -1),但同时也要检查右边的一位。若两位相同, 则

18、 A 、Q 和 Q的所有位右移一位。 若两位不同, 则根据是 1-0 还是 0-1 决定 A+M还是 A-M ;加减之后再右移一位。也就是说,右移运算总是要进行的。智利的右移是算术移位,即如果 An 1 移到 An 2 后,原来得值仍然保留在An 1 中。Booth Arithmetic校正算法Booth算法资源消耗(LUTs)339107最大时钟频率(MHz )105.7144.0可以明显地看出,采用Booth 算法后,不但能大大的节约资源(以大幅的提高最大频率(105.7 >144.0),故在有符号乘法器中都采用339>107 ),而且可Booth 乘法器。输入缓冲FIFO 的

19、读写时钟的时序关系图:在 in_clk 的上升沿,缓冲FIFO 写入一个外界数据xn ,在该个in_clk 的上升沿余下一个in_clk的上升沿之间,FIFO中的数据经过out_clk时钟将FIFO 中的N 个数据<xnxn-(N-1)>读出倒下一个模块进行运算。由以上关系可以得出,out_clk 的频率必须是in_clk 频率的 N 倍。当 Reset 信号有效时, FIFO 被清零,并且读写指针都指向首地址。coe-ROM 读时钟与FIFO 读时钟的时序关系图:由于从缓冲FIFO中取出的数需要和FIR滤波器的系数相乘,所以ROM时钟<ROM_clk>必须要和FIFO

20、读时钟 <out_clk> 同步,才能在下一个模块中进行MAC运算。当Reset 系号有效时,ROM指针指向首地址。MAC 单元系统运算时钟与移位时钟的时序关系图:在 MAC 单元的设计中, 采用的是串行乘法器,由于系数被量化成27-bit ,所以移位寄存器的时钟频率必须是累加器频率的 27 倍,才能够完成一次 MAC 运算。累计器中存储的数据不仅要在 reset 信号的作用下被清零,而且要在下一个数据 xn 输入 FIFO 进行下一个yn 的数出之前必须被清零。由于三个运算单元存在事实上的前后关系,所以这些关系必须要从时序上体现出来,这和采样时间密切相关。系统在实际运行的过程中,

21、先将外界的一个信号xn 采样进来, 然后将数据FIFO 的镜像相加,最后将和数与系数ROM 一起送到MAC 单元移位相乘。由此也就决定了,采样时间最优先,紧接着是FIFO 的“镜像相加” ,然后紧接着是MAC 单元的移位相乘。在以上的时序关系图中正好体现了这个特点:当reset 信号变为无效以后的紧接着的上升沿中 (图中前面3 个采样点),将数据采样并压入FIFO 中,并且执行FIFO 的镜像相加。由于相加时钟和采样时钟同步,若使用加计数器<incrementor> (用来作为FIFO读指针),第一次是读首单元。由于使用非阻塞赋值(<=) ,所以并没有把这次的xn 读出来,而

22、读出的是上一次存在FIFO 中的 xn !所以应该采用减计数器,“镜像相加”操作从xn-(N/2-1)+xn-N/2 开始,这就是为什么要采用减计数器的原因。当每一次“镜像相加”操作完成后,就应该是MAC 单元的移位相乘,它必须紧接着“镜像相加”操作,它并不能在西一个上升沿采样,这样会让最后的一个bit 无法进行移位操作, 所以移位相乘的采样时间被安排到,紧接着的下一个上升沿。在 shift_clk 的上升沿采样,并且仅当 acc_clear 信号有效时, MAC 中的累加器执行一次清零操作,表示本次的整个 yn 以运算完毕。ModelSim仿真ctrl_cell模块仿真:当 reset 信号

23、有效时 (reset=0),将所有的时钟信号清零(mac_clk=0 / in_clk=0) ;当 reset信号有效时,使得所有的时钟信号开始工作。此时当mac_clk 的上升沿出现时,开始进行FIFO 和 ROM 的数据读出,并送入MAC 单元进行下一步的处理。在MAC 中,由于乘法器是采用的移位累加器来实现的, 所以必须先要将外面的数据写入以后才能开始进行移位累加运算。由于 MAC-cell 中的 Booth-Multiplier是下降沿时钟有效,但是我们看到,由于reset信号的失效时刻到再次有效与系数采样时钟(mac_clk) 之间有一个 base_clk 空操作信号, 所以这会产生

24、错位移位运算!这里采用“动态锁死”技术【DynamicCapture】来防止信号出现上面的错位移位运算。当时使用该技术后,产生一个新的全局清零信号:reset_d 。有上图可以看出,如果用reset_d 作为时钟清零信号,第一个有效base_clk信号都将会紧接着出现在第一个有效mac_clk 信号之后,这样就防止了信号的错位运算。该图为上述时钟模块的全局仿真图, clear 信号为 MAC 中累加器的清零信号(并非毛刺!这可以在第一幅图中很清楚地看到) 。coe_cell 模块仿真 :“index”为外界地址指针输入,它为ROM 提供地址单元信号。可以看出在”index ”信号的作用下, FIR 滤波器的悉数被一个一个地“读”出来(图中的coe_out 信号)。fifo_data模块仿真该仿真中可以看到,外界向FIFO 中写数据xn ,并且读指针 ”index ”才开始工作对FIFO进行一次循环取数,即当”index”每一次不同的取值,都要从FIFO中读一次数据”data_out”。由于在 ”in_clk ”第一次写入的数据为”000000”由于第一次写入的数据为 ”000000”,所以第一次读出的数据为 ”000000+000000=000000 ”。第二次写入的数据为 ”00198e”。由于第二次写入的数据为 ”00198e”,所以第二次读出的数据为 ”0019

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论