基于Matlab和FPGA的FIR数字滤波器的设计.doc_第1页
基于Matlab和FPGA的FIR数字滤波器的设计.doc_第2页
基于Matlab和FPGA的FIR数字滤波器的设计.doc_第3页
基于Matlab和FPGA的FIR数字滤波器的设计.doc_第4页
基于Matlab和FPGA的FIR数字滤波器的设计.doc_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

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

文档简介

1、湖南文理学院课程设计报告课程名称: 专 业 课 程 设 计 系 部: 电气与信息工程学院 专业班级: 通信工程08102班 学生姓名: 赵 瑞 娇 学生学号: 200816020246 指导教师: 叶 华 完成时间: 2011年6月22日 报告成绩:评阅意见: 评阅教师 日期 目 录一引言3二、设计目的:3三fir滤波器基本原理及结构:31.fir滤波器简介32.fpga简介43 数字滤波器的类型和设计指标54.fir滤波器基本原理5四数字滤波器的设计与分析61. 窗函数设计的基本思想和常用窗函数6十六阶fir低通数字滤波器硬件电路设计8五fir滤波器设计的仿真实现111. 用程序设计法对fi

2、r 滤波器的仿真122. 用窗函数设计法对fir滤波器的仿真133. 滤波器的fpga实现及仿真:17六心得体会24七参考文献24基于matlab和fpga的fir数字滤波器的设计一引言数字滤波器是数字信号处理的一个重要的技术分支。利用它可以在形形色色的信号中提取所需要的信号,抑制不需要的干扰或噪声。数字滤波器根据其单位冲激响应函数的时域特性分为两种:无限长冲激响应(iir)滤波器和有限长冲激响应(nr)滤波器。iir滤波器保留了模拟滤波器较好的幅度特性,设计简单有效。但这些特性是以牺牲相位特性为代价而获得的,然而现在许多数据传输、图像处理系统都越来越多的要求系统具有线性相位特性“1。在这方面

3、,fir滤波器具有独特的优点,它可以保持严格的线性相位特性,因此越来越受到广泛的重视。fir滤波器的设计方法有许多中,如窗函数设计法、频率取样法和最优化设计法等等。而而随着matlab 软件尤其是matlab 的信号处理工具箱和simulink仿真工具的不断完善,不仅数字滤波器的计算机辅助设计有了可能,而且还可以使设计法达到最优化。二设计目的1.掌握fir数字滤波器的步骤。2.掌握matlab和fpga( fieldprogrammable gate array)的综合应用。3.设计并实现基于matlab和fpga的fir数字滤波器。三fir滤波器基本原理及结构1. fir滤波器简介根据冲激响

4、应的时域特性, 数字滤波器可分为无限长冲激响应滤波器( iir) 和有限长冲激响应滤波器( fir) 。相比于iir滤波器,fir 的突出优点是: (1).具有精确的线性相位(2).总是稳定的(3).硬件容易实现(4).滤波器的过渡过程具有有限区间但其在满足同样阻带衰减的情况下需要的阶数较高。滤波器的阶数越高, 占用的运算时间越多, 因此在满足指标要求的情况下应尽量减少滤波器的阶数。fir 滤波器的基本结构可以理解为一个分节的延时线, 把每一节的输出加权累加, 可得到滤波器的输出。fir 滤波器的冲激响应h (n) 是有限长的, 数学上m阶fir滤波器可以表示为:其系统函数为:由于fir滤波器

5、的单位冲激响应h(n)是一个有限长序列,系统函数h(z)是z-1的(n-1)次多项式,它在z平面有(n-1)个零点,同时在原点有(n-1)阶重极点。因此,h(z)永远稳定。2.fpga简介自20世纪70年代初期可编程只读存贮器( prom)问世以来, pld有了长足的发展。早期的可编程逻辑器件只有编程只读存贮器( ( prom ) 、紫外线可擦除只读存贮器( eprom)和电可擦除只读存贮器( eeprom)三种。由于受结构的限制, 它们只能完成简单的数字逻辑。70年代中期出现了可编程逻辑阵列pla, 70年代末期出现了可编程阵列逻辑pal, 80年代中期又推出了通用阵列逻辑gal, 这些pl

6、d器件的一个共同特点是可以实现速度特性较好的逻辑功能, 但其过于简单的结构也使它们只能实现规模较小的电路。为了弥补这一缺陷, 近几年又推出了与pal 结构类似的标准门阵列可编程逻辑器件fpga ( fieldprogrammable gate array) 。它具有体系结构和逻辑单元灵活、集成度高以及适用范围广等特点。这种器件兼容了pld和通用门阵列的优点, 可实现较大规模的电路, 编程也很灵活。与门阵列等其它asic相比, 它又具有设计开发周期短、设计制造成本低、开发先进、标准产品无需测试、质量稳定以及可实时在线检验等优点。因而被广泛应用于产品的原型设计和产品生产(一般在5000件以下)之中

7、。几乎在所有应用门阵列、pld和中小规模通用数字集成电路的场合均可应用fpga器件。这里利用fpga 来实现fir 数字滤波器, 事实证明,达到了预期效果。3. 数字滤波器的类型和设计指标数字滤波是由乘法器、加法器和单位延时器组成的一种运算过程,它对输入的离散信号进行运算处理,以达到改变信号频谱的目的数字滤波器根据时域特性可分为无限脉冲响应iir 滤波器和有限脉冲响应fir滤波器,两者各有优缺点:iir 滤波器能以较低的阶次获得相同的幅度滤波性能,但一般为非线性相位;fir滤波器单位脉冲响应是有限长的,系统必定稳定,且可以做成严格的线性相位,故在图像处理、数据传输等需要信道具有线性相位特性的场

8、合应用广泛fir 数字滤波器就是要根据给定的技术指标,确定系统单位脉冲响应h(n),使系统的相位特性线性、幅度特性逼近给定的技术指标如果h(n)是实数序列,且满足偶对称或奇对称条件,则滤波器就具有严格的线性相位特性对幅度特性的逼近,常用最小平方逼近、插值逼近和最佳一致逼近等方法。4.fir滤波器基本原理fir数字滤波器的冲击响应h(n)为实序列时,频率响应: 若要求线性相位,则需: 因而h(n)如果满足对称或反对称的条件,就具有线性相位特性,即:数字滤波器结构有很多种,偶对称fir滤波器的直接型结构如图1所示。 其中x(n),y(n)分别为输入输出时间序列。容易得到32阶偶对称fir滤波器的输

9、入输出关系,如式(4)所示: 根据以上分析,可以把对称结构的fir数字滤波器分成“移位相加单元、乘法器、输出相加及截位输出”四块,如图2所示。 对于长度为2m的滤波器,其运算次数只有m量级,减少了乘法次数,也提高了运算速度。在用fpga实现时可以节约不少资源。四数字滤波器的设计与分析1. 窗函数设计的基本思想和常用窗函数fir数字滤波器的设计方法有窗函数设计法、频率抽样设计法和最优设计法等,其中窗函数设计是fir滤波器设计的主要方法之一,由于其运算简便,物理意义直观,已成为工程实际中应用最广泛的方法,窗函数设计滤波器的基本思想,就是根据给定的滤波器技术指标,选择滤波器的阶数n 和合适的窗函数w

10、(n)。即用一个有限长度的窗口函数序列w(n)来截取一个无限长的序列 获得一个有限长序列h(n),即h(n)= * w(n)。这样我们用一个有限长的序列h(n)去代替,肯定会引起误差,表现在频域就是通常所说的吉布斯(gibbs)效应。该效应引起通带内和阻带内的波动性,尤其使阻带的衰减小,影响滤波器的性能。为了减小吉布斯效应,从原理上来说可以通过加大n。但实验表明,加大n 虽然可以使h(w)过渡带变窄,但对带内波动以及阻带衰减并没有多大的影响。因此,我们希望能找到不同的窗函数,使其主瓣包含更多的能量,同时旁瓣幅度减小,从而使通带、阻带波动减小,加大阻带衰减。窗函数方法不仅在数字滤波器的设计中占有

11、重要的地位,同时可以用于功率谱的估计,从根本上讲,使用窗函数的目的就是消除由无限序列的截短而引起的gibbs现象所带来的影响。工程实际中常用的窗函数有6 种,即矩形窗、三角形窗、汉宁(hanning) 窗、海明(hamming) 窗、布莱克曼(blackman)窗和凯泽( kaiser)窗。不同窗函数的过渡带和阻带衰减特性有所不同。表1.六种窗函数性能比较窗类型旁瓣峰值主瓣峰值最小阻带衰减矩形窗13db4/m21db三角窗25db8/m25db汉宁窗31db8/m44db海明窗41db8/m53db布莱克曼窗57db10/m74db凯泽窗(=5.658)53db7.8/m60db窗函数设计fi

12、r 滤波器的步骤如下:(1) 根据技术要求确定单位取样响应,如果已知,则可由下式确定单位取样响应: (2) 根据对过渡带和阻带衰减的要求,选择窗函数的形式,并估计窗口长度n。选择窗函数的时候,原则上在保证阻带衰减的情况下,尽量选择主瓣窄的窗函数,减小带宽。(3) 由选择好的窗函数形式w(n)确定单位取样响应h(n),公式如下:h(n)= * w(n)如果要求线性相位,则同时要保证对(n-1)/2 对称。(4) 重复上述步骤反复验证技术指标是否达到。可用fft 快速算法计算设计出的滤波器频率响应,公式如下: 十六阶fir低通数字滤波器硬件电路设计下面以一个十六阶fir低通滤波器为例说明硬件电路的

13、设计方法和过程。(1).设计指标。截止频率:37.5khz类 型:低通 输入数据宽度:8位 阶 数:16阶 输出数据宽度:16位(2).参数提取.符合设计指标的线性相位16阶fir数字低通滤波器的特性参数如下:h0=h15=0.000000 h1=h14=0.001992h2=h13=0.008241 h3=h12=0.018332h4=h11=0.030784 h5=h10=0.043353h6=h9=0.053550 h=7=h8=0.059257(3)单元电路设计fir低通数字滤波器电路分为数据位扩展、并串转换器、移位寄存器组、前加单元、中间处理单元、后处理单元以及控制单元等部分。a.

14、数据位扩展这里所设计的fir数字滤波器输入是8位宽的,为了防止溢出,保证电路的正常工作,这里采用符号位扩展方法,经过符号位扩展,总的输入数据宽度为9位。b. 并串转换器并串转换器由9个2选1选择器和9个d触发器组成,结构十分简单,在此不再对其电路结构赘述。其工作过程为:并串转换器以采样速率周期地采入8位样点数据,并输出1位数据流给后级的移位寄存器。c. 移位寄存器组寄存器组主要完成移位功能。d. 前加单元前加单元的主要功能是将移位寄存器输出的1位串行数据流进行预相加,它由一位串行加法器构成。xc4000系列芯片具有以下两个特点:(a)内部基本单元clb(可配置逻辑模块)包括三个函数发生器,分别

15、以f、g和h标记。其中两个第一级的函数发生器f和g,每个可实现4输入的任何函数,同时它们也可以与h函数发生器组合生成五输入的任何函数。此外,clb还具有clb内部连线比外部连线延时小的特点。(b)xc4000系列提供了快速进位逻辑(carry logic)用来加速加法器和计数器的进位通道。利用快速进位逻辑、加法器和计数器,在占用最小数量clb的情况下,却具有极快的工作速度。且该进位逻辑可以进行灵活配置,以实现任意长度的计数器和减法器。因此,从提高芯片利用率、布线率,减小电路延时等方面考虑,必须充分利用xc4000系列芯片的特点,对电路中的位全加器作适合于fpga特点的特殊设计。图3电路为本文所

16、采用的经优化后的包括快速进位逻辑的位全加器电路,其中fmap为函数映射,可将特定电路映射到clb的f、g或h函数发生器中;cy4为快速进位逻辑宏单元。图3 一位串行加法器e. 中间处理单元在fir数字滤波器中,中间处理单元主要实现对来自前加单元的位串行输出数据的相乘和累加功能。这里采用基于rom查表法的分布式算法进行中间处理单元的电路设计。如前所述,本文仅考虑冲激响应对称的情况,即滤波器的系数是对称的,所以独立系数的数目应等于1/2的阶数。对于16阶的fir滤波器来说,其独立系数的个数为8个。f. 后处理单元后处理单元的主要功能是对数据进行四舍五入和从数据流中取出需要的数据。完成四舍五入功能需

17、要一个16位的加法器,取数据则需要16位并行d触发器。g. 控制单元控制单元主要由计数器和d触发器组成。它对电路的控制主要包括:在电路开始工作前进。行全局复位,作好工作准备;对输入单元的工作进行控制;提供中间处理单元正常工作所必须的一些信号;提供最终输出结果时的输出同步信号(outsyn)。(4). 电路原理原理图如图4所示。图4 fpga实现fir数字滤波器的电路图图3是fir数字滤波器的上层图,其输入输出管脚情况和硬件资源占用情况分别见表2和表3。为了检测设计的电路能否连续正确地工作,连续输入了16位数据(十进制),分别为:100,101,102,103,104,105,106,107,-

18、101,-102,-103,-104,-105,-106,-107。fir数字滤波器硬件仿真结果(前16个输出)如表所示。在表中同时列出了根据文献4编写的程序所得到的软件计算结果。从上述数据可以看出,软件仿真结果与硬件仿真结果相比,误差的绝对值均,可以认为滤波器的硬件电路工作正确。此外,为了验证此滤波器在边缘值输入时能否正确工作,还进行了边缘值测试。当输入数据是位时,其两个边缘值分别是+127和-128,对应16进制的7f和80。利用这两组数据做输入,得到的输出也与软件结果进行对比,可以证实此时电路也能正确工作。本文设计的16阶线性相位fir数字低通滤波器,利用xc4005epc84-2芯片实

19、现时,处理数据的系统时钟频率为36mhz,采样速率为4mhz,计算结果和软件计算结果相比最大误差。在实际使用时,还可以根据不同精度要求,方便地对该fir滤波器进行修改以满足不同的指标要求。另外,在本文设计的低通滤波器基础上,可以通过简单地重组滤波器特性参数,得到高通或带通滤波器。同时fpga器件的可编程特性,可方便地对电路进行改进,便于电路性能的进一步提高。五fir滤波器设计的仿真实现1. 用程序设计法对fir 滤波器的仿真程序如下:fs=8000; % 采样频率。f=1000 1400。a=1 0。dev=0.01 0.1。n,fo,ao,w=remezord(f,a,dev,fs); %估

20、计滤波器的参数。b=remez(n,fo,ao,w); % 用remez 函数设计滤波器。freqz(b,1,1024,fs); % 滤波器的频率响应。t=(0:100)/fs。x=sin(2*pi*t*1000)+sin(2*pi*t*2000); %设置输入信号x 。x1=filter(b,1,x);% 对信号x 进行滤波, 得输出信号x 1 。figure。subplot(211);plot(t,x);grid。subplot(212);plot(t,x1);grid; %画图。图5 滤波器幅度响应和相位响应2. 用窗函数设计法对fir滤波器的仿真以设计具有下面指标的低通fir滤波器为例

21、因为要求衰减阻带50db,所以可选择海明窗和布莱克曼窗,以海明窗为例,程序代码如下图6、图7中为其响应波形wp=0.2*pi;ws=0.3*pi;tr_width=ws-wp;m=ceil(6.6*pi/tr_width)+1;n=0:1:m-1;wc=(ws+wp)/2;alpha=(m-1)/2;n=0:1:(m-1);m=n-alpha+eps;hd=sin(wc*m)./(pi*m);% 生成hamming窗w_ham=(hamming(m);% 频域图像的绘制h=hd.*w_ham;freqz (h,1)figure(2);subplot(2,2,1),stem(n,hd);titl

22、e(理想脉冲响应)axis(0 m-1 -0.3 0.3);xlabel(n);ylabel(hd(n)xa=0.*n;hold onplot(n,xa,k);hold offsubplot(2,2,2),stem(n,w_ham);title(hamming窗)axis(0 m-1 -0.3 1.2);xlabel(n);ylabel(w(n)subplot(2,2,3),stem(n,h);title(实际脉冲响应)axis(0 m-1 -0.3 0.3);xlabel(n);ylabel(h(n)hold onplot(n,xa,k);hold off图6图7同样也可以采用凯泽窗设计此滤

23、波器:图8、图9中为其响应波形wp=0.2*pi;ws=0.3*pi;as=50;tr_width=ws-wp;m=ceil(as-7.95)/(14.36*tr_width/(2*pi)+1)+1;n=0:1:m-1;wc=(ws+wp)/2;alpha=(m-1)/2;n=0:1:(m-1);m=n-alpha+eps;hd=sin(wc*m)./(pi*m);beta=0.1102*(as-8.7);% 生成kaiser窗w_kai=(hamming(m);% 频域图像的绘制h=hd.*w_kai;freqz (h,1)figure(2);subplot(2,2,1),stem(n,hd

24、);title(理想脉冲响应)axis(0 m-1 -0.3 0.3);xlabel(n);ylabel(hd(n)xa=0.*n;hold onplot(n,xa,k);hold offsubplot(2,2,2),stem(n,w_kai);title(kaiser窗)axis(0 m-1 -0.3 1.2);xlabel(n);ylabel(w(n)subplot(2,2,3),stem(n,h);title(实际脉冲响应)axis(0 m-1 -0.3 0.3);xlabel(n);ylabel(h(n)hold onplot(n,xa,k);hold off图83. 滤波器的fpga

25、实现及仿真(1). 移位及首尾相加单元 把输入数据存储到移位寄存器,利用fir滤波器的对称性,把移位后的数据首尾相加即可。加法器输出端要加个寄存器模块,以去除毛刺。另外为防止相加后数据溢出,要把数据位数扩宽到14+1位。其中d_in13o是二进制补码输入,d out xx14o是移位相加后数据输出。vexrilog hdl程序关键语句为: assign d_in_temp=(d_in13); (d_in13,1b1,d_in12:0):d_in; /把输入数据扩位 d_in_buffer31=d_in_temp; d_in_buffer30=d_in_ buffer31; d_in_buffe

26、r1=d_in_ buffer2; /数据输入在寄存器内依次移位 adder_ buffer0=d_in_ buffer1 d_ in_temp; adder_ buffer1=d_in_ buffer2d_ in_ buffer31;adder_ buffer15=d_in_ buffer16 d_ in_ buffer17;/寄存器组首尾相加,并存入缓冲器移位相加单元模块图如图10所示。图10 移位相加模块 移位相加单元时序仿真:仿真结果如图11所示,输入一个阶跃信号(8191),从图5中可以看出,输出数据从d_out_a到d_out_p依次有一个时钟周期的时延,并且总的时延和滤波器阶数(

27、32)相等,最后输出数据是16 382=8 191*2,和理论计算值相同。图11 移位相加模块仿真时序图(2). 与滤波器系数相乘数据首尾相加输出后与滤波器系数h(n)相乘,由于fir滤波器的结构是对称的,因而只需16个乘法器即可。乘法器直接调用quartus里面的参数化元件库,系数的位宽设为18。关键verilog语句如下: lpm_mult mul_0 /实例化一乘法器 (.dataa(add_a),.datab(h0),result(mnl_aa)); /add_为移位相加输出 defparam mul_0.lpm_widtha=15; /移位及首尾相加单元所得的数据 defparam

28、mul_0.lpm_widthb=18; /18位的滤波器系数h(n) defparam mul_0.lpm_widthp=33; defparam mul_0.lpm_widths=33; defparam mul_0.lpm_pipeline=0; defparam mul_0.lpm_representstion=“signed”; /设置成有符号数以上为一个乘法器设置方法,16个乘法器的整体模块图如图12所示。图12 乘法器模块 为了便于仿真测试,乘法器单元一开始只设置了4个输入。其中h(0)=100,h(1)=200,h(2)=300,h(3)=400,a,b,c,d为4个输入数据,

29、与h(n)相乘后对应输出分别为r_a,r_b,r_c和r_d。这样设计不失一般性,仿真无误后再扩充到16个即可。仿真结果如图13所示。 图13乘法器模块仿真时序图(3)乘法器输出结果相加 16路数据相加后位数被扩为33+4=37,另外要在其输出端加一寄存器,以消除毛刺。此模块原理图如图14所示。图14 相加输出模块 相加输出模块仿真:实际用到的是16输入的加法器,为便于仿真测试输入先设为4路,仿真结果如图15所示。图15相加输出模块仿真时序图(4) 截位输出 截位是滤波器设计的关键,此处的处理方法是:14位的输入数据(14 b的adc),18位二进制补码表示的滤波器系数,除去符号位,相乘后小数位是13+17=30,加法运算不改变小数位数。另外系统测试电路板用的是usb总线,usb控制器的数据位宽是16,因而把输出数据截到16位,然后送给fifo,从而传到计算机。截位用veriloghdl实现的语句是: assign fir_out=d_temp36,d_temp29:

温馨提示

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

评论

0/150

提交评论