FIR滤波器设计总结.docx

上传人:b****6 文档编号:7110001 上传时间:2023-01-18 格式:DOCX 页数:21 大小:552.56KB
下载 相关 举报
FIR滤波器设计总结.docx_第1页
第1页 / 共21页
FIR滤波器设计总结.docx_第2页
第2页 / 共21页
FIR滤波器设计总结.docx_第3页
第3页 / 共21页
FIR滤波器设计总结.docx_第4页
第4页 / 共21页
FIR滤波器设计总结.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

FIR滤波器设计总结.docx

《FIR滤波器设计总结.docx》由会员分享,可在线阅读,更多相关《FIR滤波器设计总结.docx(21页珍藏版)》请在冰豆网上搜索。

FIR滤波器设计总结.docx

FIR滤波器设计总结滤波器设计总结1、直接型FIR滤波器的优缺点如下:

优点:

简单直观,乘法运算量较少;缺点:

调整零点较困难2、FIR滤波器设计的总体结构:

(1)移位寄存器移位寄存器的功能是将输入序列缸,z)通过移位寄存器改为并行输入,这个模块的功能对于所要讨论的三种FIR滤波器的实现结构是完全一致的。

(2)优化模块优化模块的功能是根据FIR滤波器h(,1)的对称特性将滤波器降阶,完成输入求和缸幼+x(m-1幼,对于本例中的128抽头的滤波器,即完成颤O)+缸127),双1)+缸126),8943.,缸63)+x(64),这个模块的功能对于所要讨论的三种FIR滤波器的实现结构是完全一致的。

(3)乘法器模块对于使用乘法器结构的FIR滤波器,乘法器的实现对于系统的性能有很大的影响,在第5章将着重介绍乘法器的实现及优化问题。

基于DA算法的乘法器是通过查找表的方法实现的。

(4)加法器将前面乘法器模块得到的结果相加,最后得到输出结果Y(玎),有关加法器的设计及优化将在第5章重点介绍。

2.1基于乘累加FIR滤波器结构上图中,FIR滤波器的系数存储器用来存入所有的FIR滤波器系数,存储器的容量根据FIR滤波器的阶数和系数的位数来确定。

采样数据存储器用来暂存外部输入的采样数据。

读取控制模块用来控制采样数据与相对应的FIR滤波器系数输出以及滤波器输出。

采样数据与滤波器系数在控制电路的作用下,分别对应相乘并与前一个乘积累加,经过滤波器的阶数次的反复乘加最后输出滤波结果。

乘累加结构FIR滤波器性能分析:

优点:

这种滤波器结构简单,硬件资源占用少,只要一个加法器和一个乘法器,成本低。

缺点:

这种结构FIR滤波器每次都需在多个时钟周期下才有输出,时钟周期的个数受滤波器阶数的影响,因此这种乘累加结构的FIR滤波器处理速度慢,只能用于对处理速度要求不高的系统。

滤波器系数转为定点后的误差分析一、系统概述在滤波器系数由浮点转位定点后系统会有误差出现。

我们要求系统误差在80db以上。

通过分析要得出最后量化过程中,中间值的位数,即中间的乘法运算结果和乘法后加法的运算结果的所取的位数。

当然位数越小,所用到的系统资源越小。

由于系统要在FPGA中进行实现,所以内插滤波器,包括半带滤波器、FIR滤波器、CIC滤波器均采用定点计算。

其中半带滤波器和FIR滤波器输入和输出精度均为16比特,中间乘法结果和累加结果为20比特精度。

CIC的输入数据精度为16比特,输出数据的精度为21比特。

输入DSP信号为312.5kHz的基带信号,需要通过内插后提升128倍的过采样速率。

奈奎斯特采样频率为625kHz。

即最后达到80MHz的采样频率。

内插滤波器的总体结构如下图所示:

图1内插滤波器总体结构图二、半带滤波器的误差分析2半带滤波器数字基带输入过采样输出2FIR滤波器32CIC滤波器第1级第2级第3级2.1、半带滤波器浮点系数的参数特性半带滤波器采用34阶,其系数如下表所示:

1.1555011750488237e-0030.0000000000000000e+000-2.7482166351233102e-0030.0000000000000000e+0005.7681982289523072e-0030.0000000000000000e+000-1.0736374060960912e-0020.0000000000000000e+0001.8592020073668478e-0020.0000000000000000e+000-3.1093723586671229e-0020.0000000000000000e+0005.2603914610235683e-0020.0000000000000000e+000-9.9130756073130377e-0020.0000000000000000e+0003.1592697826202448e-0015.0000000000000000e-0013.1592697826202448e-0010.0000000000000000e+000-9.9130756073130377e-0020.0000000000000000e+0005.2603914610235683e-0020.0000000000000000e+000-3.1093723586671229e-0020.0000000000000000e+0001.8592020073668478e-0020.0000000000000000e+000-1.0736374060960912e-0020.0000000000000000e+0005.7681982289523072e-0030.0000000000000000e+000-2.7482166351233102e-0030.0000000000000000e+0001.1555011750488237e-003半带滤波器的频率响应如下图2所示:

图234阶半带滤波器频率响应2.1.1基本参数:

输入DSP信号为312.5kHz的基带信号,需要通过内插后提升2倍的过采样速率。

奈奎斯特采样频率为625kHz。

经过内插后速率提升为2倍的奈奎斯特采样频率,后经过半带滤波器滤除中间的镜像频谱。

以下是其他的系统参数。

滤波器的系数矩阵:

a=1.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,00.10.20.30.40.50.60.70.80.9-70-60-50-40-30-20-100NormalizedFrequency(rad/sample)Magnitude(dB)Magnitude(dB)andPhaseResponses-31.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.0000000000000000e+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.0000000000000000e+000,-2.7482166351233102e-003,0.0000000000000000e+000,1.1555011750488237e-0032.1.2浮点滤波设计过程Matlab程序设计:

%系统初始化clearallcloseallclf;clc;%半带滤波器的基本参数设置fs=625000;Fs=2*fs;N=2000;%原始信号的长度n1=0:

N-1;%原始输入信号取值范围,间隔为1n2=0:

2*N-1;%内插后信号的取值范围,间隔为1M=2*N+35-1;%卷积运算后输出信号y的长度m=0:

M-1;%滤波后信号的取值范围,间隔为1%生成输入的N个16bit随机整数x1=randint(1,N,-32768,32767);%对生成后的N个随机整数进行2倍内插x2=zeros(1,2*N);fori=1:

Nx2(2*i-1)=x1(i);endfigurestem(n2,x2)gridontitle(输入)%输入信号的奈奎斯特采样频谱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;figuresubplot(2,2,1),plot(f1,mag1*2/N);%真实振幅的结果需要对上一步所求结果乘以2/Nxlabel(频率/Hz),ylabel(振幅),title(基带信号奈奎斯特采样-幅频特性曲线),gridon;%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倍内插后-幅频特性曲线),gridon;%浮点型半袋滤波器的归一化幅频特性曲线a=1.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.2603914610235683e-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-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);%求浮点半带滤波器的频响特性假设是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(浮点半带滤波器的归一化幅频特性曲线),gridon;%浮点半带滤波器滤波后的2倍内插信号输出=采样频率提高2倍ya=conv(a,x2);%滤波的过程就卷积的过程Yak=fft(ya,M);maga=abs(Yak);f3=m*Fs/M;%内插信号经过半袋滤波器滤波subplot(2,2,4),plot(f3,maga*2/M);xlabel(频率/Hz),ylabel(振幅),title(浮点型半带滤波器滤波后信号的幅频特性曲线),gridon;figurestem(ya);title(浮点滤波器的输出时域图)gridon;注释:

其中的freqz函数的使用说明如下:

MATLAB提供了专门用于求离散系统频响特性的函数freqz(),调用freqz()的格式有以下两种:

(1).H,w=freqz(B,A,N),B和A分别为离散系统的系统函数分子、分母多项式的系数向量,N为正整数,返回量H则包含了离散系统频响在0pi范围内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-101234x104输入图4浮点滤波器2倍过采样的频谱分析及滤波结果2.2、半带滤波器定点系数的参数特性:

由于系统要在FPGA中进行实现,所以内插滤波器,包括半带滤波器、FIR滤波器、CIC滤波器均采用定点计算。

正如上文所示半带滤波器输入和输出精度均为16比特,中间乘法结果和累加结果为20比特精度。

所以要跟以上的系统要求,仿真出以上定点运算后的半带滤波器输出结果。

2.2.1、半带滤波器的定点系数浮点转定点系数量化二进制数一文中已经得出浮点系数量化后的结果,半带滤波器是系数对称的,并且有一半的系数为0,需要量化的系数有10个。

量化滤波器系数的过程为:

滤波器系数用小数二进制表示后,截取高15位后,乘以215,然后用16bit的二进制数表示,16位二进制数最高位为0,低15位即是截取小数二进制的高15位。

此过程相当于滤波器的系数均取正数,进行小数二进制表示,截取高15位后,扩大215倍,即左移15位。

得到10个非零正系数的量化结果,用16bit二进制数表示为:

b1=0000000000100101=37b2=0000000001011010=90b3=0000000010111101=189b4=0000000101011111=351b5=0000001001100001=609b6=0000001111111010=1018b7=0000011010111011=1723b8=0000110010110000=3248b9=0010100001110000=10352=010*其中,b2、b4、b6、b8均表示的是负数系数。

正确的16位二进制原码表示方法为:

b1=h0=0000000000100101=37b2=h2=1000000001011010=-90b3=h4=0000000010111101=189b4=h6=1000000101011111=-351b5=h8=0000001001100001=609b6=h10=1000001111111010=-1018b7=h12=0000011010111011=1723b8=h14=1000110010110000=-3248b9=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*xn-17其中乘法运算系数最大的是h17=16384,其次是h16=10352。

正如上面所示的卷积公式,系统进行滤波器要做10次乘法运算。

所以按输入最大化的情况,乘法最大的值为:

Max(mult)=h16*两个输入的最大值,分别为16位:

0111111111111111Max(plus)=xn-16+xn-19+1=01111111111111110h16=0010100001110000所以最大的乘法输出结果为31位的二进制数,即是:

Max(mult)=h16*Max(plus)=0101000011011111010111100100000截取31位2进制数的高20位表示,这就舍去了后面的低11位二进制数,相当于除以了211,右移了11位。

其他的乘法运算结果都要右移11位,也就是舍去运算结果后面的低11位。

此过程相当于,乘法计算后得到的结果总体除以了211,右移了11位。

对于先进行的系数累加也要用20位的二进制数表示,不过这没有任何影响。

其他的系数如果按正数算得话,其中h17除以2,把其他系数累加得到的h结果是:

h=0011110001100001可以看出hh16,所以最后的乘累加结果不会超过:

(h+h)*Max(plus)=01100100110100000011011001011110乘累加后结果为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,1723,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(这个也是不影响的)figuresubplot(2,1,1),plot(fb/pi,20*log10(abs(Hb)/max(abs(Hb);%对定点半带半带滤波器的频率归一化,但是振幅是真实振幅xlabel(归一化频率),ylabel(振幅),title(定点半带滤波器的归一化幅频特性曲线),gridon;%定点滤波器滤波后的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个采样点便于下面计算endfor(n3=35:

M+34)y3(n3)=0fornn=1:

2:

(length(b)-1)/2y3(n3)=y3(n3)+fix(2(-11)*b(nn)*(x3(n3-nn+1)+x3(n3-length(b)+nn);endy3(n3)=fix(2(-1)*(y3(n3)+fix(2(-11)*b(1+(length(b)-1)/2)*x3(n3-(length(b)-1)/2);%根据乘法器和乘累加二进制位数的要求计算出卷积运算后的结果endfor(iii=1:

M)yb(iii)=fix(2(-4)*y3(iii+34);%左移34个采样点输出16位的卷积运算结果endyb=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(定点型半带滤波器滤波后后信号的幅频特性曲线),gridon;figurestem(m,yb);title(定点滤波器输出)gridon;2.2.2、定点半带滤波器滤波后的结果:

图5浮点半带滤波器时域输出图6定点滤波器2倍过采样的频谱分析及滤波结果2.2.3结论通过以上分析论证,得出最终得信噪比为75db,已达到系统的要求。

三、FIR滤波器的误差分析050010001500200025003000350040004500-3-2-10123x104定点滤波器输出00.10.20.30.40.50.60.70.80.91-150-100-500归一化频率振幅定点半带滤波器的归一化幅频特性曲线02468101214x105050010001500频率/Hz振幅定点型半带滤波器滤波后后信号的幅频特性曲线3.1、FIR滤波器浮点系数的参数特性FIR滤波器采用16阶,其系数如下表所示:

-1.5619827730160107e-018-5.2391810630145275e-0034.1925742052049851e-0182.3211101786365075e-002-1.0543383717858071e-017-7.6105845748673545e-0021.6894193230511156e-0173.0769877873674434e-0015.0087029257715721e-0013.0769877873674434e-0011.6894193230511156e-017-7.6105845748673545e-002-1.0543383717858071e-0172.3211101786365075e-0024.1925742052049851e-018-5.2391810630145275e-003-1.5619827730160107e-018FIR滤波器的频率响应如下图所示:

图716阶FIR滤波器频率响应00.10.20.30.40.50.60.70.80.9-70-60-50-40-30-20-100NormalizedFrequency(rad/sample)Magnitude(dB)Magnitude(d

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1