毕业设计方案FPGA的FIR数字滤波器设计方案.docx
- 文档编号:6174773
- 上传时间:2023-01-04
- 格式:DOCX
- 页数:35
- 大小:718.43KB
毕业设计方案FPGA的FIR数字滤波器设计方案.docx
《毕业设计方案FPGA的FIR数字滤波器设计方案.docx》由会员分享,可在线阅读,更多相关《毕业设计方案FPGA的FIR数字滤波器设计方案.docx(35页珍藏版)》请在冰豆网上搜索。
毕业设计方案FPGA的FIR数字滤波器设计方案
学士论文
基于FPGA的FIR数字滤波器设计
摘要
随着公元的第二十一个世纪的到来,今天我们进入了一个科技日新月异的时代。
在现代电子数字系统中,滤波器都以一个不可缺少的身份出现。
其中,FIR数字滤波器又以其良好的线性特性被广泛和有针对性的大量使用。
众所周知,灵活性和实时性是工程实践中对数字信号处理的基本要求。
在以往使用的各种滤波器技术中,不难发现有许许多多的问题。
但是,随着现代计算机技术在滤波问题上的飞跃,派生出一个全新的分支——数字滤波器。
利用可编程逻辑器件和EDA技术,使用FPGA来实现FIR滤波器,可以同时兼顾实时性和灵活性。
基于FPGA的FIR数字滤波器的研究势在必行。
本论文讨论基于FPGA的FIR数字滤波器设计,针对该毕业设计要做的基本工作有如下几点:
<一)掌握有限冲击响应FIR 对各种方案和步骤进行比较和论证分析,然后针对目前FIR数字滤波器需要的特点,速度快和硬件规模小,作为指导思想进行设计计算。 <二)基于硬件FPGA的特点,利用Matlab软件以及窗函数法设计滤波器。 对整个FPGA元件,计划采用模块化、层次化设计思想,从而对各个部分功能进行更为详细的理解和分工设计。 最终FIR数字滤波器的设计语言选择VHDL硬件编程语言。 <三)设计中的软件仿真使用Altera公司的综合性PLD开发软件QuartusII,并且利用Matlab工具进行对比仿真,在仿真的过程中,对比证明,本论文设计的滤波器的技术指标已经全部达标。 关键词: 数字滤波器Matlab可编程逻辑元件模块化算法 1绪论 1.1本课题研究意义 在现代通信信号处理领域中,随着各种精密计算和快速计算的发展对信号处理的实时性、快速性的要求越来越高。 以往的模拟滤波器无法克服电压漂移、温度漂移和噪声等问题,从而带来了许多误差和不稳定因素。 而数字滤波器具有稳定性高、精度高、设计灵活、实现方便等突出优点。 FPGA元器件在高速并行处理和数据传输中有独特优势,FPGA正在前端信号处理中越来越多地代替ASIC和DSP。 我们需要的就是这种设计周期短,功能密度高,重组时间短的元器件。 本文在FPGA元器件的基础上,实现现代FIR数字滤波器功能。 并且研究多种快速的FIR数字滤波器的理论设计思想和程序设计方法。 1.2国内外研究现状分析 1985年XilinX公司生产出了第一块FPGA元器件,由于它有着集成度高、方便易用、开发和上市周期短的绝对优势,使得FPGA器件在数字设计和电子生产中得到迅速普及和应用,发展潜力十分巨大。 现在FPGA已经发展到可以利用硬件乘加器、片内储存器、逻辑单元、流水处理技术等特有的硬件结构,高速完成FFT、FIR、复数乘加、卷积、三角函数以及矩阵运算等数字信号处理。 这样可以完成信号处理的主要技术,如中频采样、参数估计、自适应滤波、脉冲压缩、自适应波束形成和旁瓣对消等。 1.3研究思路 通过对目前数字滤波器的几种实现方法的简单分析,本文认为基于FPGA的数字滤波器具有许多优点,本文考虑到信息技术的发展对于数字滤波器的要求越来越高,而目前FIR数字滤波器的性能还不完善,于是选择了基于FPGA的数字滤波器作为主要研究内容,通常滤波器在进行数据处理时用到了卷积运算,在设计中的解决这些乘法运算的思路是将它们转换成加减法,这是目前解决乘法运算的主流思想。 设计初期在Matlab下对滤波器原理进行证明包括<零极点图、时域和频域分析图等),分析FIR数字滤波器的多种理论设计思想和窗函数选择方法,在设计后期对FIR数字滤波器的小数乘法问题进行单独论证。 然后对分析出来的问题进行论证和解决,最后在QUARTUSⅡ中进行仿真验证。 1.4相关概念说明 数字滤波器 其功能是对输入离散信号的数字代码进行运算处理,以达到改变信号频谱的目的。 可认为是一个离散时间系统按预定的算法,将输入离散时间信号转换为所要求的输出离散时间信号的特定功能装置FIR 当我们处理有限的离散数据时,线形系统的响应<包括对冲击的响应)也是有限的。 若线性系统仅是一个空间滤波器,则通过简单地观察它对冲击的响应,我们就可以完全确定该滤波器。 通过这种方式确定的滤波器称为有限冲击响应 图1-1总体设计流程图 2FIR数字滤波器的设计方法 2.1理论部分 2.1.1引言 数字滤波器的功能一般是用来变换时域或者频域中某些要求信号的属性,滤除信号中某一部分频率分量。 经过数字滤波器的信号是让其频谱与数字滤波器的频率响应相乘从而得出新的结果。 经过一个线性卷积过程,从时域上输入信号与滤波器的单位冲击响应作一个卷积和。 下面是卷积定义式: <1) LTI数字滤波器在一般情况下分为有限脉冲响应 因为其设计方向是选择有限长度的h(n>,使频率响应函数H(e >满足指标。 数字滤波器正在用直接的电子计算机规范和算法进行分析的方式来逐渐代替传统的模拟滤波器的RLC元器件和放大电路。 2.1.2FIR数字滤波器的基础 首先介绍FIR数字滤波器基本原理,在如下表格中对FIR和IIR数字滤波器进行了全面的比较: 表2-1两种滤波器特点比较分析 FIR数字滤波器 IIR数字滤波器 设计 方法 在一般的情况下,FIR数字滤波器没有设计公式。 它的设计需要借助计算机程序完成 可以利用AF的设计成果,可简单、有效地完成设计 阶数 高 低 稳定性 在稳定性方面<稳定),极点全部在原点 存在一定的稳定性问题,需要注意 结构 非递归系统 递归系统 运算误差 一般情况下不存在反馈,运算的误差比较小 存在反馈,由于运算中的特殊运算方法会产生极限环 通常情况下一般数字滤波器的N阶FIR数字滤波器基于输入信号x(n>的表达式为: <2) 这个公式给我们了一个非常明了的直接型网络结构,该结构表现出N个乘法器,每次采样y(n>的内容是n次乘法和n-1次加法,然后做乘累加之和。 如图2-1所示: 图2-1FIR滤波器直接型网络结构 从DSP的介绍中,第一类线性相位对h(n>的约束条件: <3) (4> 由公式<3),<4)我们可以推出: <5) 移相并利用三角公式化简得到: (6> 从数字信号处理学科中知道函数 关于求和区间的中心 和h(n>满足如下条件: 其中对应的有 <7) 图2-2线性相位FIR滤波器结构 若h(n>呈现对称特性,即此具有线性相位的滤波器是FIR数字滤波器。 滤波器的基础网络结构可以相互进行转换。 在前面本文已经讨论过,FPGA的实现中将对各种方法进行比较,找出最优设计方式。 从而达到减少资源占有和提高系统作业速度的目的,更好的体现实时性的数字滤波器优势。 2.1.3数字滤波器的设计原理 在数字信号处理技术的研究中,一般是使用的三种设计方法: 窗函数法,FDATool直接设计法,程序编译法。 本文首先使用窗函数和Matlab软件共同进行设计。 随着软件技术的不断发展,Matlab软件能给设计者带来的数字信号处理工作已经非常的完善和多样了,设计者可以利用Matlab软件进行数字滤波器的设计和仿真,而且还可以用这款软件进行设计的优化。 数字滤波器的一般设计步骤如下: 1.指标的确定 做任何工程或者设计,设计者都必须要有一个期望的指标用来限制设计范围。 在很多的实际应用中,设计者常常都是使用数字滤波器做选频的工作。 因此,指标的形式一半在频域中给出相位响应和幅度。 相位响应的指标形式,一半是指系统在通频带中药有线性相位。 幅度指标: 绝对指标,它给出对幅度响应函数的要求,一般用于FIR滤波器的设计。 相对指标,以分贝值的形式给出具体限制。 2.逼近目标 设计者做高频的时候大概都有一个模式,就是首先得到技术指标,然后利用我们的技术和工具让我们的产品去逼近这个指标。 同理我们首先建立以个目标的数字滤波器模型。 一般情况下都是采用理想的数字滤波器模型,然后去逼近我们想要的目标数字滤波器参数。 3.计算机仿真和性能优化分析 在工作中我们发现通过<1)、<2)之后本文会得到以差分、系统函数或者冲击响应这三种方式描述的滤波器。 这个时候设计者可以利用计算进行仿真,在系统中分析技术指标和滤波结果是否是希望得到的结果。 图2-3各种理想数字滤波器的幅度频率响应 2.1.4FIR数字滤波器的理论计算方式与参数转换思想 在理论上掌握了FIR数字滤波器的基本原理之后,本文需要对设计思想进行一个多方位的论证和尝试。 首先设计者设计滤波器要有一个硬性的指标,这个指标可以是直接给出最基本的数据,也有多重表现形式。 于是我例举两种特殊的指标形式然后加以解决设计。 然后我们分别用2种方式来设计不同指标的滤波器。 接下来我首先用程序的方式来实现滤波器: 1.逼近法转换与思想 使用remez函数设计FIR低通滤波器 设计滤波器,使逼近低通滤波特性| |。 | |= 要求通带波纹 ,阻带衰减 ,并用最小阶数实现。 绘出设计的FIR数字滤波幅频特性曲线,检验设计指标。 这个指标我们可以以如下计算方法来得出详细指标: 从给出的低通滤波特性| |。 我们可以看出设计参数 f=[1/4,5/16],m=[1,0]。 dev的计算根据公式: Rp=-20 >0 于是有Rp=20 , 所以dev(1>,dev(2>可以被表示出来。 2.逼近法程序描述与思想 有了这几个参数我们现在就可以根据已经设定好的格式来调用函数remezord和remez函数了,于是可得如下程序。 clear。 closeall fc=1/4。 fs=5/16。 %输入给定指标 Rp=3。 As=60。 Fs=2。 f=[fc,fs]。 m=[1,0]。 %计算remezord函数所需参数f,m,dev dev=[(10^(Rp/20>-1>/(10^(Rp/20>+1>,10^(-As/20>]。 [N,fo,mo,W]=remezord(f,m,dev,Fs>。 %确定remez函数所需参数 hn=remez(N,fo,mo,W>。 %调用remez函数进行设计 hw=fft(hn,512>。 %求设计出的滤波器频率特性 w=[0: 511]*2/512。 plot(w,20*log10(abs(hw>>>。 grid。 %画对数幅频特性图 axis([0,max(w>/2,-90,5]>。 xlabel('w/pi'>。 ylabel('Magnitude(dB>'> line([0,0.4],[-3,-3]>。 %画线检验设计结果 line([1/4,1/4],[-90,5]>。 line([5/16,5/16],[-90,5]>。 程序结束。 3.仿真图像与结果 用以上的程序我们可以得到在Matlab中的许多参数和图像,从而进一步分析我们的设计。 首先引入程序输出的幅频特性图: <如图2-4) 图2-4在Matlab中的程序 图2-5程序输出的幅频特性 图2-6ImpulseResponse 图2-7MagnitudeandPhaseResponses 图2-8PhaseDelay 图2-9Pole,Zeroplot 结论: 从上面程序运行情况分析,观察程序输出的幅频特性图中横线为-3dB,两条竖线分别位于频率π/4和5π/16。 显然,通带指标有富裕,零极点图反应出大部分零极点在圆内,过渡带宽度和阻带最小衰减刚好满足指标要求。 4.窗函数选择法与规划思想 表2-2窗函数选择指标 名称 近似过渡带宽 最小阻带衰减 精确过渡带宽 矩形 4π/M 21dB 1.8π/M 巴特利特 8π/M 25dB 6.1π/M 汉宁 8π/M 44dB 6.2π/M 哈明 8π/M 51dB 6.6π/M 布莱克曼 12π/M 74dB 11π/M 取Kaiser窗时用MATLAB中的kaiserord函数来得到长度M 在设计指标中没有直接给出窗函数的,可以利用下面这个表格进行筛选,具体方法如下: 这个表格给出了近似过渡带宽、精确过渡带宽和最小阻带衰减,我们可以根据自己滤波器的参数来选择我们的窗函数,因为选择不同的窗函数设计出来的滤波器生成的过渡带宽度和阻带最小衰减是不同的。 在这里我以一个例子来说明函数的选择方式: 用窗函数法设计FIR带通滤波器。 指标如下: 高端通带截止频率 高端阻带截止频率 低端阻带截止频率 低端通带截止频率 通带最大衰减Rp=1dB 阻带最小衰减Rs=60dB 在这样一个例子中,可以看到它明确的给出了Rs=60dB来设置窗函数类型和阶次。 表格中给出的blackman窗其滤波器阻带最小衰减是74dB,再利用给出的其他参数计算滤波器阶数。 表中显示窗口长度M由过渡带宽度B=0.8π-0.65π=0.15π决定,而Blackman窗设计的滤波器过渡带宽度为12π/M,则M=12/0.15=80。 又因M=N+1,所以滤波器阶数N=79。 在了解了怎么选择窗函数和计算滤波器阶数之后,本论文将针对实际FIR数字滤波器进行研究。 已经给出了设计参数,下面开始利用MATLAB程序来设计这个滤波器。 5.窗函数法程序描述与思想 程序和对应的解释: %用窗函数法设计FIR带通滤波器 clear。 closeall。 wls=0.2*pi。 wlp=0.35*pi。 whp=0.65*pi。 B=wlp-wls。 %这里是在计算过渡带宽 N=ceil(12/0.15>。 %计算窗口长度 wc=[wlp/pi-6/N,whp/pi+6/N]。 %设置理想带通截止频率 hn=fir1(N-1,wc,Blackman(N>>。 %设计滤波器参数 6.理论计算方法总结 仿真完成之后,掌握如何去利用已有的指标去设计一个滤波器,总的来说就是四项: 通过傅里叶逆变换获得理想滤波器的单位脉冲响应hd(n>。 分析给定参数,计算出滤波器的阶数,频率等等相关指标。 把已经有的参数用程序函数表达出来,利用已经有的各种内置函数架设起滤波器。 参看Matlab的输出图形和参数是否满足要求。 2.1.5Matlab直接FDAtool设计方式解读 FDATool(FilterDesign&AnalysisTool>是MATLAB信号处理工具箱里专用的滤波器设计分析工具,MATLAB6.0以上的版本还专门增加了滤波器设计工具箱(FilterDesignToolbox>。 FDATool可以设计几乎所有的基本的常规滤波器,包括FIR和IIR的各种设计方法。 它操作简单,方便灵活。 FDATool界面总共分两大部分,一部分是DesignFilter,在界面的下半部,用来设置滤波器的设计参数,另一部分则是特性区,在界面的上半部分,用来显示滤波器的各种特性。 DesignFilter部分主要分为: FilterType(滤波器类型>选项,包括Lowpass(低通>、Highpass(高通>、Bandpass(带通>、Bandstop(带阻>和特殊的FIR滤波器。 DesignMethod(设计方法>选项,包括IIR滤波器的Butterworth(巴特沃思>法、ChebyshevTypeI(切比雪夫I型>法、ChebyshevTypeII(切比雪夫II型>法、Elliptic(椭圆滤波器>法和FIR滤波器的Equiripple法、Least-Squares(最小乘方>法、Window(窗函数>法。 FilterOrder(滤波器阶数>选项,定义滤波器的阶数,包括SpecifyOrder(指定阶数>和MinimumOrder(最小阶数>。 在SpecifyOrder中填入所要设计的滤波器的阶数(N阶滤波器,SpecifyOrder=N-1>,如果选择MinimumOrder则MATLAB根据所选择的滤波器类型自动使用最小阶数。 FrenquencySpecifications选项,可以详细定义频带的各参数,包括采样频率Fs和频带的截止频率。 它的具体选项由FilterType选项和DesignMethod选项决定,例如Bandpass(带通>滤波器需要定义Fstop1(下阻带截止频率>、Fpass1(通带下限截止频率>、Fpass2(通带上限截止频率>、Fstop2(上阻带截止频率>,而Lowpass(低通>滤波器只需要定义Fstop1、Fpass1。 采用窗函数设计滤波器时,由于过渡带是由窗函数的类型和阶数所决定的,所以只需要定义通带截止频率,而不必定义阻带参数。 MagnitudeSpecifications选项,可以定义幅值衰减的情况。 例如设计带通滤波器时,可以定义Wstop1(频率Fstop1处的幅值衰减>、Wpass(通带范围内的幅值衰减>、Wstop2(频率Fstop2处的幅值衰减>。 当采用窗函数设计时,通带截止频率处的幅值衰减固定为6db,所以不必定义。 参数要求: 采样频率fs=100Hz,通带下限截止频率fc1=10Hz,通带上限截止频率fc2=20Hz,过渡带宽6Hz,通阻带波动0.01,采用凯塞窗设计。 针对一个含有5Hz、15Hz和30Hz的混和正弦波信号已知滤波器的阶数n=38,beta=3.4。 本例中,首先在FilterType中选择Bandpass;在DesignMethod选项中选择FIRWindow,接着在Window选项中选取Kaiser,Beta值为3.4;指定FilterOrder项中的Specifyorder为38;采样频率Fs=100Hz,截止频率Fc1=10Hz,Fc2=20Hz。 设置完以后点击窗口下方的DesignFilter,在窗口上方就会看到所设计滤波器的幅频响应,通过菜单选项Analysis还可以看到滤波器的相频响应、组延迟、脉冲响应、阶跃响应、零极点配置等。 设计完成后将结果保存为kaiser15.fda文件。 我们可以根据FDAtool工具得到我们的滤波器相关增益。 系数转换成二进制码: 若采用乘法器,用1位整数位,1位符号位,共22位定点二进制数进行运算,负数用补码表示,由此将减法运算变成累加求和运算。 各系数可用matlab编程转成二进制补码: /* *FilterCoefficients(CSource>generatedbytheFilterDesignandAnalysisTool * *GeneratedbyMATLAB(R>7.0andthe * *Generatedon: 22-Mar-201820: 09: 12 * */ /* *Discrete-TimeFIRFilter(real> *------------------------------- *FilterStructure: Direct-FormFIR *FilterOrder: 38 *Stable: Yes *LinearPhase: Yes(Type1> */ /*GeneraltypeconversionforMATLABgeneratedC-code*/ #include"tmwtypes.h" /* *Expectedpathtotmwtypes.h *D: \MATLAB7\extern\include\tmwtypes.h */ constintBL=39。 constreal64_TB[39]={ -0.0008969942906957,0.001248746631882,0.007070735236406,0.009180571739749,-8.354434235897e-018,-0.01457672567709,-0.01798701306701,-0.005189936475222,0.006300913248271,-5.136773213647e-018,-0.009200436084654,0.01113207796169,.0573********,0.07065284310647,-2.116878167777e-017,-0.1149210109554,-0.157********17,-0.05691148173912,0.1151784185022,0.2,0.1151784185022,-0.05691148173912,-0.157********17,-0.1149210109554,-2.116878167777e-017,0.07065284310647,.0573********,0.01113207796169,-0.009200436084654,-5.136773213647e-018,0.006300913248271,-0.005189936475222,-0.01798701306701,-0.01457672567709,-8.354434235897e-018,0.009180571739749,0.007070735236406,0.001248746631882,-0.0008969942906957 }。 这是一个非常典型的例子,可以清晰的看到利用Matlab提供的FDAtool设计滤波器的方便与快捷。 比较以上几种类型的滤波器参数,在给定的参数要求下,采用椭圆滤波器可以获得最佳的幅频响应特性,具有阶数低,过渡带窄等优点。 虽然椭圆滤波器在通带也会产生波动,但考虑到波动处在可接受的范围内,仍然符合设计要求。 但由直接型传输函数表达式来实现并不实用。 因此如前所说,将其分解为多个二阶传输函数的级联形式。 借助Matlab信号处理工具箱中函tf2sos(Transferfunctiontosecond-order-section>将传递函数转换为二阶级联形式。 对于是数字信号,需要对先前分析计算中分解获得的二阶子系统的滤波器系数进行量化,即用一个固定的字长加以表示。 量化过程中由于存在不同程度的量化误差,由此会导致滤波器的频率响应出现偏差,严重时会使滤波器的极点移到单位圆之外,使系统不稳定。 为了获得最优的滤波器系数,量化的精度也相当重要。 2.1.6FDAtool设计模板及设计结果图 这里把上面的滤波器设计参数的总体图给出,如图2-10 图2-10FIR带通滤波器总体设计参数 2.2程序分析部分 根据上述FIR低通数字滤波器的原理与滤波特性,我们在上面的软件实践中已经掌握了设计数字滤波器的方法并且成功的使用Matlab/Simulink进行了设计和仿真。 通过以上的过程我们可以导出一定性能的FIR滤波器频率响应与抽头系数,然后用VerilogHDL语言设计和QUARTUSⅡ仿真FIR低通数字滤波器,实现用软件描述硬件的动作及功能,应用软件来实现数字滤波器的功能和时序仿真。 2.2.1FPGA可编程逻辑元件
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 毕业设计 方案 FPGA FIR 数字滤波器 设计方案
![提示](https://static.bdocx.com/images/bang_tan.gif)