1、FIR 滤波器设计总结滤波器设计总结 1、直接型 FIR 滤波器的优缺点如下:优点:简单直观,乘法运算量较少;缺点:调整零点较困难 2、FIR 滤波器设计的总体结构:(1)移位寄存器 移位寄存器的功能是将输入序列缸,z)通过移位寄存器改为并行输入,这个模块的功 能对于所要讨论的三种 FIR 滤波器的实现结构是完全一致的。(2)优化模块 优化模块的功能是根据 FIR 滤波器 h(,1)的对称特性将滤波器降阶,完成输入求和 缸幼+x(m-1幼,对于本例中的 128抽头的滤波器,即完成颤 O)+缸 127),双 1)+缸 126),8943.,缸 63)+x(64),这个模块的功能对于所要讨论的三种
2、 FIR 滤波器的实现结构是完全一致 的。(3)乘法器模块 对于使用乘法器结构的 FIR 滤波器,乘法器的实现对于系统的性能有很大的影响,在第 5章将着重介绍乘法器的实现及优化问题。基于 DA算法的乘法器是通过查找表的 方法实现的。(4)加法器 将前面乘法器模块得到的结果相加,最后得到输出结果 Y(玎),有关加法器的设计及 优化将在第 5章重点介绍。2.1基于乘累加 FIR 滤波器结构 上图中,FIR 滤波器的系数存储器用来存入所有的 FIR 滤波器系数,存储器的容 量根据 FIR 滤波器的阶数和系数的位数来确定。采样数据存储器用来暂存外部输入的采 样数据。读取控制模块用来控制采样数据与相对应
3、的 FIR 滤波器系数输出以及滤波器输 出。采样数据与滤波器系数在控制电路的作用下,分别对应相乘并与前一个乘积累加,经过滤波器的阶数次的反复乘加最后输出滤波结果。乘累加结构 FIR 滤波器性能分析:优点:这种滤波器结构简单,硬件资源占用少,只要一个加法器和一个乘法器,成 本低。缺点:这种结构 FIR 滤波器每次都需在多个时钟周期下才有输出,时钟周期的个数 受滤波器阶数的影响,因此这种乘累加结构的 FIR 滤波器处理速度慢,只能用于对处理 速度要求不高的系统。滤波器系数转为定点后的误差分析 一、系统概述 在滤波器系数由浮点转位定点后系统会有误差出现。我们要求系统误差在 80db 以上。通过分析要
4、得出最后量化过程中,中间值的位数,即中间的乘法运算结果和乘法后加法的运算结果的所取的位数。当然位数越小,所用到的系统资源越小。由于系统要在 FPGA中进行实现,所以内插滤波器,包括半带滤波器、FIR 滤波器、CIC 滤波器均采用定点计算。其中半带滤波器和 FIR 滤波器输入和输出精度均为16 比特,中间乘法结果和累加结果为 20比特精度。CIC 的输入数据精度为 16比特,输出数据的精度为 21比特。输入 DSP 信号为 312.5kHz 的基带信号,需要通过内插后提升 128倍的过采样速率。奈奎斯特采样频率为 625kHz。即最后达到 80MHz 的采样频率。内插滤波器的总体结构如下图所示:
5、图 1 内插滤波器总体结构图 二、半带滤波器的误差分析 2半带滤波器数字基带输入过采样输出2FIR滤波器32CIC滤波器第1级第2级第3级2.1、半带滤波器浮点系数的参数特性 半带滤波器采用 34 阶,其系数如下表所示:1.1555011750488237e-003 0.0000000000000000e+000 -2.7482166351233102e-003 0.0000000000000000e+000 5.7681982289523072e-003 0.0000000000000000e+000 -1.0736374060960912e-002 0.0000000000000000e+
6、000 1.8592020073668478e-002 0.0000000000000000e+000 -3.1093723586671229e-002 0.0000000000000000e+000 5.2603914610235683e-002 0.0000000000000000e+000 -9.9130756073130377e-002 0.0000000000000000e+000 3.1592697826202448e-001 5.0000000000000000e-001 3.1592697826202448e-001 0.0000000000000000e+000 -9.913
7、0756073130377e-002 0.0000000000000000e+000 5.2603914610235683e-002 0.0000000000000000e+000 -3.1093723586671229e-002 0.0000000000000000e+000 1.8592020073668478e-002 0.0000000000000000e+000 -1.0736374060960912e-002 0.0000000000000000e+000 5.7681982289523072e-003 0.0000000000000000e+000 -2.748216635123
8、3102e-003 0.0000000000000000e+000 1.1555011750488237e-003 半带滤波器的频率响应如下图 2所示:图 2 34阶半带滤波器频率响应 2.1.1 基本参数:输入 DSP 信号为 312.5kHz 的基带信号,需要通过内插后提升 2倍的过采样速率。奈奎斯特采样频率为 625kHz。经过内插后速率提升为 2倍的奈奎斯特采样频率,后经过半带滤波器滤除中间的镜像频谱。以下是其他的系统参数。滤波器的系数矩阵:a=1.1555011750488237e-003,0.0000000000000000e+000,-2.7482166351233102e-00
9、3,0.0000000000000000e+000,5.7681982289523072e-003,0.0000000000000000e+000,-1.0736374060960912e-002,0.0000000000000000e+000,1.8592020073668478e-002,0.0000000000000000e+000,00.10.20.30.40.50.60.70.80.9-70-60-50-40-30-20-100Normalized Frequency(rad/sample)Magnitude(dB)Magnitude(dB)and Phase Responses-3
10、1.1174-26.6831-22.2488-17.8144-13.3801-8.9458-4.5114-0.0771Phase(radians)-3.1093723586671229e-002,0.0000000000000000e+000,5.2603914610235683e-002,0.0000000000000000e+000,-9.9130756073130377e-002,0.0000000000000000e+000,3.1592697826202448e-001,5.0000000000000000e-001,3.1592697826202448e-001,0.0000000
11、000000000e+000,-9.9130756073130377e-002,0.0000000000000000e+000,5.2603914610235683e-002,0.0000000000000000e+000,-3.1093723586671229e-002,0.0000000000000000e+000,1.8592020073668478e-002,0.0000000000000000e+000,-1.0736374060960912e-002,0.0000000000000000e+000,5.7681982289523072e-003,0.0000000000000000
12、e+000,-2.7482166351233102e-003,0.0000000000000000e+000,1.1555011750488237e-003 2.1.2 浮点滤波设计过程 Matlab 程序设计:%系统初始化 clear all close all clf;clc;%半带滤波器的基本参数设置 fs=625000;Fs=2*fs;N=2000;%原始信号的长度 n1=0:N-1;%原始输入信号取值范围,间隔为 1 n2=0:2*N-1;%内插后信号的取值范围,间隔为 1 M=2*N+35-1;%卷积运算后输出信号 y的长度 m=0:M-1;%滤波后信号的取值范围,间隔为 1%生成
13、输入的 N 个 16bit 随机整数 x1=randint(1,N,-32768,32767);%对生成后的 N 个随机整数进行 2 倍内插 x2=zeros(1,2*N);for i=1:N x2(2*i-1)=x1(i);end figure stem(n2,x2)grid on title(输入)%输入信号的奈奎斯特采样频谱 X1k=fft(x1,N);%用 fft求 DFT即 X(k)mag1=abs(X1k);%求 k 次谐波的振幅 f1=n1*fs/N;%DFT 的 X(k)的 k次谐波的振幅对应的频率是f(k)=k/(N*t)=k/T=k*fs;figure subplot(2,
14、2,1),plot(f1,mag1*2/N);%真实振幅的结果需要对上一步所求结果乘以 2/N xlabel(频率/Hz),ylabel(振幅),title(基带信号奈奎斯特采样-幅频特性曲线),grid on;%2倍内插后,采样速率提升 2倍 X2k=fft(x2,2*N);mag2=abs(X2k);f2=n2*Fs/(2*N);%采样速率提升 2倍 subplot(2,2,2),plot(f2,mag2*2/(2*N);xlabel(频率/Hz),ylabel(振幅),title(奈奎斯特采样信号 2倍内插后-幅频特性曲线),grid on;%浮点型半袋滤波器的归一化幅频特性曲线 a=1
15、.1555011750488237e-003,0.0000000000000000e+000,-2.7482166351233102e-003,0.0000000000000000e+000,5.7681982289523072e-003,0.0000000000000000e+000.-1.0736374060960912e-002,0.0000000000000000e+000,1.8592020073668478e-002,0.0000000000000000e+000,-3.1093723586671229e-002,0.0000000000000000e+000.5.26039146
16、10235683e-002,0.0000000000000000e+000,-9.9130756073130377e-002,0.0000000000000000e+000,3.1592697826202448e-001,5.0000000000000000e-001.3.1592697826202448e-001,0.0000000000000000e+000,-9.9130756073130377e-002,0.0000000000000000e+000,5.2603914610235683e-002,0.0000000000000000e+000.-3.1093723586671229e
17、-002,0.0000000000000000e+000,1.8592020073668478e-002,0.0000000000000000e+000,-1.0736374060960912e-002,0.0000000000000000e+000.5.7681982289523072e-003,0.0000000000000000e+000,-2.7482166351233102e-003,0.0000000000000000e+000,1.1555011750488237e-003;%a是 35阶浮点型半带滤波器滤波器的系数 Ha,fa=freqz(a,1,N);%求浮点半带滤波器的频响
18、特性 假设是 N点得 DFT(这个是不影响的)subplot(2,2,3),plot(fa/pi,20*log10(abs(Ha)/max(abs(Ha);%对浮点半带半带滤波器的频率归一化,但是振幅是真实振幅 20*log10(abs(Ha)/max(abs(Ha)xlabel(归一化频率),ylabel(振幅),title(浮点半带滤波器的归一化幅频特性曲线),grid on;%浮点半带滤波器滤波后的 2倍内插信号输出=采样频率提高 2 倍 ya=conv(a,x2);%滤波的过程就卷积的过程 Yak=fft(ya,M);maga=abs(Yak);f3=m*Fs/M;%内插信号经过半袋滤
19、波器滤波 subplot(2,2,4),plot(f3,maga*2/M);xlabel(频率/Hz),ylabel(振幅),title(浮点型半带滤波器滤波后信号的幅频特性曲线),grid on;figure stem(ya);title(浮点滤波器的输出时域图)grid on;注释:其中的 freqz 函数的使用说明如下:MATLAB提供了专门用于求离散系统频响特性的函数 freqz(),调用 freqz()的格式有以下两种:(1).H,w=freqz(B,A,N),B和 A 分别为离散系统的系统函数分子、分母多项式的系数向量,N 为正整数,返回量 H则包含了离散系统频响在 0pi 范围内
20、N个频率等分点的值,向量 w则包含范围内 N个频率等分点。调用中若 N默认,默认值为 512。(2).H,w=freqz(B,A,N,whole)该调用格式将计算离散系统在 0pi 范内的 N个频率等分点的频率响应的值。因此,可以先调用 freqz()函数计算系统的频率响应,然后利用abs()和 angle()函数及 plot()函数,即可绘制出系统在或范围内的频响曲线。2.1.3、浮点半带滤波器滤波后的结果 图 3时域输入信号 05001000150020002500300035004000-4-3-2-101234x 104输 入图 4浮点滤波器 2 倍过采样的频谱分析及滤波结果 2.2、
21、半带滤波器定点系数的参数特性:由于系统要在 FPGA中进行实现,所以内插滤波器,包括半带滤波器、FIR 滤波器、CIC 滤波器均采用定点计算。正如上文所示半带滤波器输入和输出精度均为 16 比特,中间乘法结果和累加结果为 20比特精度。所以要跟以上的系统要求,仿真出以上定点运算后的半带滤波器输出结果。2.2.1、半带滤波器的定点系数 浮点转定点系数量化二进制数一文中已经得出浮点系数量化后的结果,半带滤波器是系数对称的,并且有一半的系数为 0,需要量化的系数有 10 个。量化滤波器系数的过程为:滤波器系数用小数二进制表示后,截取高 15 位后,乘以 215,然后用16bit 的二进制数表示,16
22、 位二进制数最高位为 0,低 15位即是截取小数二进制的高15 位。此过程相当于滤波器的系数均取正数,进行小数二进制表示,截取高 15位后,扩大 215 倍,即左移 15 位。得到 10个非零正系数的量化结果,用 16bit 二进制数表示为:b1=0000000000100101=37 b2=0000000001011010=90 b3=0000000010111101=189 b4=0000000101011111=351 b5=0000001001100001=609 b6=0000001111111010=1018 b7=0000011010111011=1723 b8=00001100
23、10110000=3248 b9=0010100001110000=10352=010*其中,b2、b4、b6、b8均表示的是负数系数。正确的 16位二进制原码表示方法为:b1=h0=0000000000100101=37 b2=h2=1000000001011010=-90 b3=h4=0000000010111101=189 b4=h6=1000000101011111=-351 b5=h8=0000001001100001=609 b6=h10=1000001111111010=-1018 b7=h12=0000011010111011=1723 b8=h14=1000110010110
24、000=-3248 b9=h16=0010100001110000=10352=010*所以得到定点半袋滤波器的参数为:=37,0,-90,0,189,0,-351,0,609,0,-1018,0,1723,0,-3248,0,10352,16384,10352,0,-3248,0,1723,0,-1018,0,609,0,-351,0,189,0,-90,0,37 根据卷积公式,yn=,但是通过以上二进表达制表示后的滤波器的系数,有一半为 0,而且系数是关于h17。最终得到半带滤波器输出 yn的式:yn=h0*+h2*+h4*+h6*+h8*+h10*+h12*+h14*+h16*+h17*
25、xn-17 其中乘法运算系数最大的是 h17=16384,其次是 h16=10352。正如上面所示的卷积公式,系统进行滤波器要做 10次乘法运算。所以按输入最大化的情况,乘法最大的值为:Max(mult)=h16*两个输入的最大值,分别为 16位:0111 1111 1111 1111 Max(plus)=xn-16+xn-19+1=0 1111 1111 1111 1110 h16=0010 1000 0111 0000 所以最大的乘法输出结果为 31位的二进制数,即是:Max(mult)=h16*Max(plus)=010 1000 0110 1111 1010 1111 0010 000
26、0 截取 31位 2 进制数的高 20位表示,这就舍去了后面的低 11位二进制数,相当于除以了 211,右移了 11 位。其他的乘法运算结果都要右移 11位,也就是舍去运算结果后面的低 11位。此过程相当于,乘法计算后得到的结果总体除以了 211,右移了11 位。对于先进行的系数累加也要用 20位的二进制数表示,不过这没有任何影响。其他的系数如果按正数算得话,其中 h17除以 2,把其他系数累加得到的 h结果是:h=0011 1100 0110 0001 可以看出 h h16,所以最后的乘累加结果不会超过:(h+h)*Max(plus)=0110 0100 1101 0000 0011 011
27、0 0101 1110 乘累加后结果为 32 位二进制数,要用 20位的二进制数表示,要在前面乘法运算后右移 11位的基础上再右移 1 位,即再除以 2。最后得到 20位的乘累加结果。但是要16bit 的输出,所以截取高 16 位,即右移 4 位。得出最后的 16bit 的结果。开始时,我们对系数左移 15位,在中间的计算过程中,我们对计算结果共右移 16位。所以到最后输出的时候,要想得到真实的定点结算结果还需要左移 1 位,即输出结果乘以 2。Matlab 设计程序:%定点型半袋滤波器的归一化幅频特性曲线 b=37,0,-90,0,189,0,-351,0,609,0,-1018,0,172
28、3,0,-3248,0,10352,16384.10352,0,-3248,0,1723,0,-1018,0,609,0,-351,0,189,0,-90,0,37;%b是 35 阶定点半带滤波器的系数 Hb,fb=freqz(b,1,N);%求定点半带滤波器的频响特性 假设是 N点得 DFT(这个也是不影响的)figure subplot(2,1,1),plot(fb/pi,20*log10(abs(Hb)/max(abs(Hb);%对定点半带半带滤波器的频率归一化,但是振幅是真实振幅 xlabel(归一化频率),ylabel(振幅),title(定点半带滤波器的归一化幅频特性曲线),gri
29、d on;%定点滤波器滤波后的 2 倍内插信号的输出 m1=1:M+34;m2=1:M;x3=zeros(1,M+34);y3=zeros(1,M+34);yb=zeros(1,M);for(ii=1:2*N)x3(ii+34)=x2(ii);%把产生的随机数右移 34 个采样点 便于下面计算 end for(n3=35:M+34)y3(n3)=0 for nn=1:2:(length(b)-1)/2 y3(n3)=y3(n3)+fix(2(-11)*b(nn)*(x3(n3-nn+1)+x3(n3-length(b)+nn);end y3(n3)=fix(2(-1)*(y3(n3)+fix(
30、2(-11)*b(1+(length(b)-1)/2)*x3(n3-(length(b)-1)/2);%根据乘法器和乘累加二进制位数的要求 计算出卷积运算后的结果 end for(iii=1:M)yb(iii)=fix(2(-4)*y3(iii+34);%左移 34 个采样点 输出 16位的卷积运算结果 end yb=2*yb;%真实正确的输出 Ybk=fft(yb,M);magb=abs(Ybk);f4=m2*Fs/M;subplot(2,1,2),plot(f4,magb*2/M);xlabel(频率/Hz),ylabel(振幅),title(定点型半带滤波器滤波后后信号的幅频特性曲线),
31、grid on;figure stem(m,yb);title(定点滤波器输出)grid on;2.2.2、定点半带滤波器滤波后的结果:图 5 浮点半带滤波器时域输出 图 6 定点滤波器 2 倍过采样的频谱分析及滤波结果 2.2.3 结论 通过以上分析论证,得出最终得信噪比为 75db,已达到系统的要求。三、FIR 滤波器的误差分析 050010001500200025003000350040004500-3-2-10123x 104定 点 滤 波 器 输 出00.10.20.30.40.50.60.70.80.91-150-100-500归 一 化 频 率振幅定 点 半 带 滤 波 器 的
32、归 一 化 幅 频 特 性 曲 线02468101214x 105050010001500频 率/Hz振幅定 点 型 半 带 滤 波 器 滤 波 后 后 信 号 的 幅 频 特 性 曲 线 3.1、FIR 滤波器浮点系数的参数特性 FIR 滤波器采用 16 阶,其系数如下表所示:-1.5619827730160107e-018 -5.2391810630145275e-003 4.1925742052049851e-018 2.3211101786365075e-002 -1.0543383717858071e-017 -7.6105845748673545e-002 1.6894193230
33、511156e-017 3.0769877873674434e-001 5.0087029257715721e-001 3.0769877873674434e-001 1.6894193230511156e-017 -7.6105845748673545e-002 -1.0543383717858071e-017 2.3211101786365075e-002 4.1925742052049851e-018 -5.2391810630145275e-003 -1.5619827730160107e-018 FIR 滤波器的频率响应如下图所示:图 7 16阶 FIR 滤波器频率响应 00.10.20.30.40.50.60.70.80.9-70-60-50-40-30-20-100Normalized Frequency(rad/sample)Magnitude(dB)Magnitude(d
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1