基于FPGA的FIR数字滤波器设计方案

今天给大侠带来在毕业设计之基于FPGA的FIR数字滤波器设计,仅供大侠参考,话不多说,上货。

本篇介绍基于FPGA的FIR数字滤波器设计,针对毕业设计要做的基本工作有如下几点:

(一)掌握有限冲击响应FIR(FiniteImpulseResponse,FIR)的基本结构,研究现有的实现方法,对各种方案和步骤进行比较和论证分析,然后针对目前FIR数字滤波器需要的特点,速度快和硬件规模小,作为指导思想进行设计计算。

(二)基于硬件FPGA的特点,利用Matlab软件以及窗函数法设计滤波器。对整个FPGA元件,计划采用模块化、层次化设计思想,从而对各个部分功能进行更为详细的理解和分工设计,最终FIR数字滤波器的设计语言选择VerilogHDL硬件编程语言。

(三)设计中的软件仿真使用开发软件QuartusII,并且利用Matlab工具进行对比仿真,在仿真的过程中,对比证明,本设计的滤波器的技术指标已经全部达标。

1.1本课题研究意义

在现代通信信号处理领域中,随着各种精密计算和快速计算的发展对信号处理的实时性、快速性的要求越来越高。以往的模拟滤波器无法克服电压漂移、温度漂移和噪声等问题,从而带来了许多误差和不稳定因素。而数字滤波器具有稳定性高、精度高、设计灵活、实现方便等突出优点。

1.2国内外研究现状分析

1985年,Xilinx生产出了第一块FPGA元器件,由于它有着集成度高、方便易用、开发和上市周期短的绝对优势,使得FPGA器件在数字设计和电子生产中得到迅速普及和应用,发展潜力十分巨大。现在FPGA已经发展到可以利用硬件乘加器、片内储存器、逻辑单元、流水处理技术等特有的硬件结构,高速完成FFT、FIR、复数乘加、卷积、三角函数以及矩阵运算等数字信号处理。这样可以完成信号处理的主要技术,如中频采样、参数估计、自适应滤波、脉冲压缩、自适应波束形成和旁瓣对消等。

1.3研究思路

通过对目前数字滤波器的几种实现方法的简单分析,本文认为基于FPGA的数字滤波器具有许多优点,本文考虑到信息技术的发展对于数字滤波器的要求越来越高,而目前FIR数字滤波器的性能还不完善,于是选择了基于FPGA的数字滤波器作为主要研究内容,通常滤波器在进行数据处理时用到了卷积运算,在设计中的解决这些乘法运算的思路是将它们转换成加减法,这是目前解决乘法运算的主流思想。设计初期在Matlab下对滤波器原理进行证明包括(零极点图、时域和频域分析图等),分析FIR数字滤波器的多种理论设计思想和窗函数选择方法,在设计后期对FIR数字滤波器的小数乘法问题进行单独论证。然后对分析出来的问题进行论证和解决,最后在QuartusⅡ中进行仿真验证。

图1-1总体设计流程图

2FIR数字滤波器的设计方法

2.1理论部分

2.1.1引言

数字滤波器的功能一般是用来变换时域或者频域中某些要求信号的属性,滤除信号中某一部分频率分量。经过数字滤波器的信号是让其频谱与数字滤波器的频率响应相乘从而得出新的结果。经过一个线性卷积过程,从时域上输入信号与滤波器的单位冲击响应作一个卷积和。下面是卷积定义式:

2.1.2FIR数字滤波器的基础

首先介绍FIR数字滤波器基本原理,在如下表格中对FIR和IIR数字滤波器进行了全面的比较:

表2-1两种滤波器特点比较分析

通常情况下一般数字滤波器的N阶FIR数字滤波器基于输入信号x(n)的表达式为:

(2)

这个公式给我们了一个非常明了的直接型网络结构,该结构表现出N个乘法器,每次采样y(n)的内容是n次乘法和n-1次加法,然后做乘累加之和。如图2-1所示:

图2-1FIR滤波器直接型网络结构

从DSP的介绍中,第一类线性相位对h(n)的约束条件:

由公式(3),(4)我们可以推出:

移相并利用三角公式化简得到:

从数字信号处理学科中知道函数关于求和区间的中心(N-1)/2奇对称,于是我们要求和h(n)满足如下条件:

其中对应的有:

图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数字滤波幅频特性曲线,检验设计指标。

这个指标我们可以以如下计算方法来得出详细指标:

所以dev(1),dev(2)可以被表示出来。

2.逼近法程序描述与思想

有了这几个参数我们现在就可以根据已经设定好的格式来调用函数remezord和remez函数了,于是可得如下程序。

clear;closeallfc=1/4;fs=5/16;%输入给定指标Rp=3;As=60;Fs=2;f=[fc,fs];m=[1,0];%计算remezord函数所需参数f,m,devdev=[(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窗函数选择指标

在设计指标中没有直接给出窗函数的,可以利用下面这个表格进行筛选,具体方法如下:

这个表格给出了近似过渡带宽、精确过渡带宽和最小阻带衰减,我们可以根据自己滤波器的参数来选择我们的窗函数,因为选择不同的窗函数设计出来的滤波器生成的过渡带宽度和阻带最小衰减是不同的。在这里我以一个例子来说明函数的选择方式:

用窗函数法设计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,采用凯塞窗设计。

系数转换成二进制码:

若采用乘法器,用1位整数位,1位符号位,共22位定点二进制数进行运算,负数用补码表示,由此将减法运算变成累加求和运算。各系数可用matlab编程转成二进制补码:

/*GeneraltypeconversionforMATLABgeneratedC-code*/#include"tmwtypes.h"/**Expectedpathtotmwtypes.h*D:MATLAB7externinclude mwtypes.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,0.05739543087552,0.07065284310647,-2.116878167777e-017,-0.1149210109554,-0.1575671556317,-0.05691148173912,0.1151784185022,0.2,0.1151784185022,-0.05691148173912,-0.1575671556317,-0.1149210109554,-2.116878167777e-017,0.07065284310647,0.05739543087552,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可编程逻辑元件介绍

EDA是ElectronicDesignAutomation的缩写,意为电子设计自动化,即利用计算机自动完成电子系统的设计。EDA技术是以计算机和微电子技术为先导,汇集了计算机图形学、拓扑、逻辑学、微电子工艺与结构学和计算数学等多种计算机应用学科最新成果的先进技术。

可编程逻辑器PLD(ProgrammableLogicDevices)是ASIC(ApplicationSpecificIntegratedCircuits的一个重要分支。ASIC按制造方法又可分为全定制(FullCustom)产品、半定制(semi-custom)产品和可编程逻辑器件(PLD)。前两种ASIC的设计和制造都离不开器件生产厂家,用户主动性较差。随着微电子技术的发展,设计师们更愿意自己设计专用集成电路芯片,并尽可能缩短设计周期,最好是在实验室里就能设计出合适的ASIC芯片,并且立即投入实际应用之中,在使用中也能比较方便的对设计进行修改。可编程逻辑器件就是为满足用户的这一需求应运而生的。

1.设计灵活

使用FPGA器件,可不受标准系列器件在逻辑功能上的限制。而且修改逻辑可在系统设计和使用过程的任一阶段中进行,并且只须通过对所用的FPGA器件进行重新编程即可完成,给系统设计提供了很大的灵活性。

2.增大功能密集度

功能密集度是指在给定的空间能集成的逻辑功能数量。可编程逻辑芯片内的组件门数高,一片FPGA可代替几片、几十片乃至几百片中小规模的数字集成电路芯片。用FPGA器件实现数字系统时用的芯片数量少,从而减少芯片的使用数目,减少印刷线路板面积和印刷线路板数目,最终导致系统规模的全面缩减。

3.提高可靠性

减少芯片和印刷板数目,不仅能缩小系统规模,而且它还极大的提高了系统的可靠性。具有较高集成度的系统比用许多低集成度的标准组件设计的相同系统具有高得多的可靠性。使用FPGA器件减少了实现系统所需要的芯片数目,在印刷线路板上的引线以及焊点数量也随之减少,所以系统的可靠性得以提高。

4.缩短设计周期

5.工作速度快

FPGA/CPLD器件的工作速度快,一般可以达到几百兆赫兹,远远大于DPS器件。同时,使用FPGA器件后实现系统所需要的电路级数又少,因而整个系统的工作速度会得到提高。

6.增加系统的保密性能

很多FPGA器件都具有加密功能,在系统中广泛的使用FPGA器件可以有效防止产品被他人非法仿制。

7.降低成本

使用FPGA器件实现数字系统设计时,如果仅从器件本身的价格考虑,有时还看不出来它的优势,但是影响系统成本的因素是多方面的,综合考虑,使用FPGA的成本优越性是很明显的。首先,使用FPGA器件修改设计方便,设计周期缩短,使系统的研制开发费用降低;其次,FPGA器件可使印刷线路板面积和需要的插件减少,从而使系统的制造费用降低;再次,使用FPGA器件能使系统的可靠性提高,维修工作量减少,进而使系统的维修服务费用降低。总之,使用FPGA器件进行系统设计能节约成本。

2.2.2QuartusⅡ及VerilogHDL介绍

QuartusII是Intel公司的综合性开发软件,支持原理图、VHDL、VerilogHDL以及AHDL(AlteraHardwareDescriptionLanguage)等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD设计流程。

QuartusII可以在XP、Linux以及Unix上使用,除了可以使用Tcl脚本完成设计流程外,提供了完善的用户图形界面设计方式。具有运行速度快,界面统一,功能集中,易学易用等特点。

QuartusII支持Altera的IP核,包含了LPM/MegaFunction宏功能模块库,使用户可以充分利用成熟的模块,简化了设计的复杂性、加快了设计速度。对第三方EDA工具的良好支持也使用户可以在设计流程的各个阶段使用熟悉的第三方EDA工具。

此外,QuartusII通过和DSPBuilder工具与Matlab/Simulink相结合,可以方便地实现各种DSP应用系统;支持Altera的片上可编程系统(SOPC)开发,集系统级设计、嵌入式软件开发、可编程逻辑设计于一体,是一种综合性的开发平台。

MaxplusII作为Altera的上一代PLD设计软件,由于其出色的易用性而得到了广泛的应用。目前Altera已经停止了对MaxplusII的更新支持,QuartusII与之相比不仅仅是支持器件类型的丰富和图形界面的改变。Altera在QuartusII中包含了许多诸如SignalTapII、ChipEditor和RTLViewer的设计辅助工具,集成了SOPC和HardCopy设计流程,并且继承了MaxplusII友好的图形界面及简便的使用方法。

AlteraQuartusII作为一种可编程逻辑的设计环境,由于其强大的设计能力和直观易用的接口,越来越受到数字系统设计者的欢迎。

VerilogHDL是目前应用最为广泛的硬件描述语言。VerilogHDL可以用来进行各种层次的逻辑设计,也可以进行数字系统的逻辑综合,仿真验证和时序分析等。该语言适合算法级,寄存器级,逻辑级,门级和版图级等各个层次的设计和描述。VerilogHDL进行设计最大的优点是其工艺无关性。这使得我们在功能设计,逻辑验证阶段可以不必过多考虑门级及工艺实现的具体细节,只需根据系统设计的要求施加不同的约束条件,即可设计出实际电路。VerilogHDL是一种硬件描述语言(hardwaredescriptionlanguage),为了制作数字电路而用来描述ASIC和FPGA的设计之用。VerilogHDL的设计者想要以C编程语言为基础设计一种语言,可以使工程师比较容易学习。

2.2.3实际滤波器程序设计(11阶FIR数字滤波器)

FPGA实现FIR滤波器,首先进行指标选定和Matlab软件参数仿真,然后执行基于Verilog方法的硬件实现中用移位方法代替了乘法运算。

表2-3设计指标要求

根据以上指标,利用MATLAB中的FIR滤波器系数设计命令fir1(10,0.85)所设计滤波器的系数。

表2-4Matlab中导出的滤波器系数

MATLAB软件仿真的滤波器的抽头系数及其幅度频响特性如下图2-11所示。

图2-1111阶FIR滤波器的抽头系数和幅频特性曲线

可见抽头系数是奇对称的,即:

FIR滤波器采用对称结构,每个抽头的输出分别乘以相应加权的二进制值,再将结果相加。同时,利用滤波器系数的及对称的特性,对输入信号进行如下等效:

2.2.4.VerilogHDL的实现

这个方法的实现中,使用了移位代替乘法运算来实现滤波器乘加的方法。由于滤波器系数都是小数,所以我们先左移7位(即放大128倍),再用相应的移位来近似这些系数,最后经过乘加运算得到结果,对这个结果再右移7位(即缩小128倍)即可得出正确的结果。各个系数的移位情况如下:其中2表示左移1位,1表示不移位,0.5表示右移1位,其他依次类推:

128×h(0)=128×0.036=0.4608=0.5-0.03125

128×h(1)=128×0.0127=1.6256=1+0.5+0.125

128×h(2)=128×0.0417=5.3376=4+1+0.25+0.625+0.03125

128×h(3)=128×0.0878=11.2384=8+4-1+0.25

128×h(4)=128×0.1318=16.8704=16+1-0.125

128×h(5)=128×0.8500=108.800=128-16-4+0.25+0.0625

这样,我们就可以把这个11阶FIR数字滤波器的输出用一下的算式得到

表2-5Verilog方法设计FIR的实验数据

图2-12系数放大后求SUM

计算得到结果后再将sum右移7位,即可得到正确结果。程序的功能仿真结果如下图2-12所示。

图2-13功能仿真

由上图2-12可以看出,tap0到tap10是输入x的依次延时1个时钟周期,结果sum输出相对于输入x延迟了2个时钟周期,y输出相对于sum输出延迟了1个时钟周期,这和程序设计相符合。同时,对比程序运行结果和MATLAB的计算结果(如章节开头表格所示),可知,二者结果是一致的,其中个别数据的小误差是由于移位取代小数乘法运算带来的误差。因此,程序设计是正确的。

于是,根据以上所有思想我们可以得出以下11阶FIR数字滤波器的Verilog程序如下:

1.分析程序设计

使用MAC单元完成乘加运算(包括单MAC和多MAC的情况)这个方法可以利用FPGA中已有的MAC单元(像XilinxSpartan3E-100中有四个乘加单元),只要设计好数据运算流程,就能方便高效地实现FIR运算。使用MAC单元还有一个优点是系数可以存成系数表,可以方便地修改,这是移位方法代替乘法运算所不及的。

使用移位代替乘法运算这个方法的优点是速度快,例如11阶的滤波器,完成一次运算需要11次乘法,如果使用单MAC的话,需要11个时钟周期来完成,而使用移位方法可以在一个时钟周期完成11个乘法运算;缺点是需要另外去完成滤波系数到移位位数的换算,如果修改滤波系数的话,程序修改将会比较麻烦,同时硬件资源也要使用多一些。

t*0.125={t[7],t[7],t[7],t[7:3]}t*0.125=t/8=t>>3;t为有符号数,所以是带符号右移,于是t>>3={t[7],t[7],t[7],t[7:3]}之所以这么些就是为了节省资源,提高频率

以-4*0.5为例-4的原码:10000100B补码:11111100B-4>>1=01111110而符号位不能变应用原来的位代替11111110B的原码10000010B=-2

2.对程序设计中的问题分析与总结

在最开始的设计中,本文初始计划使用乘法单元。但是在程序设计的过程中我们遇见了实数乘法的问题,程序的运行遇到了困难,在与指导老师的研究中我们发现问题出在实数乘法的问题上。在Verilog的运算中实数乘法需要特殊的小数乘法器来单元来实现。在原来的38阶滤波器的设计中出现了这样子的问题。我们使用过这样的程序:

reg[63:0]filter_in_force[0:3344];reg[63:0]filter_out_expected[0:3344];//Functiondefinitionsfunctionrealabs_real;inputrealarg;beginabs_real=arg>0arg:-arg;endendfunction//functionabs_real//ComponentInstancesfilteru_filter(.clk(clk),.clk_enable(clk_enable),.reset(reset),.filter_in(filter_in),.filter_out(filter_out));initialbegin//Constantsfilter_in_force[0]<=$realtobits(1.0000000000000000E+000);filter_in_force[1]<=$realtobits(0.0000000000000000E+000);filter_in_force[2]<=$realtobits(0.0000000000000000E+000);filter_in_force[3]<=$realtobits(0.0000000000000000E+000);…

系统无法实现real值得计算,于是这里需要我们用小数乘法器进行特殊单元的方案解决。于是我们要进行小数乘法器的设计。

3.小数乘法器介绍及在设计中的作用

随着FPGA的发展以及相应EDA软件工具的成熟,FPGA在高速数字信号处理领域得到了越来越广泛的应用。而乘法,尤其是浮点乘法运算是数值计算和数据分析中最常用的运算之一。目前,多数FPGA上可以实现整数和标准逻辑矢量的乘法,但不支持浮点乘法运算,因此使得FPGA在数值计算、数据分析和信号处理等方面受到了限制。本文采用适合于FPGA实现的自定义26位浮点数据格式,利用改进的基4Booth编码运算方式,以及CSA和4-2压缩器综合的Wallace树形结构,减少了部分积,使系统具有高速度,低功耗的特点,并且结构规则。在尾数的舍入中采用了基于预测和选择的舍入方法,进一步提高了运算的速度,优化了乘法器的性能。

4.小数乘法器程序设计与仿真

小数乘法器的仿真结果如下图2-14所示:

图2-14小数乘法器仿真结果

全过程可以看成:把32位的小数截取高16位左移16位,变为16位整数相乘得到32位整数乘积后,右移32位调整无关位的位置得到32位小数,这样就可以完成早期程序中的小数乘法功能,然后来进行设计中的FPGA数字滤波器设计的优化。

在先前的设计中我们使用Matlab进行综合仿真设计,并且借助FDAtool设计出滤波器。在QuartusII的仿真中我们发现程序无法正常的完成运行,究其原因在于小数乘法器的问题。在原来的滤波器中需要对每一个参数进行单独设置,这样会使得程序占有巨量的篇幅大大的增加了工作量和容错度。于是,我们需求另外一种方法来解决这个问题,后来我们研究了移位算法。利用移位来把小数运算转换成整数运算,这样我们的11阶滤波器程序大大减少篇幅同时也增加了程序的可读程度和稳定程度。

3滤波器仿真滤波

3.1设置混合信号

在Matlab中进行我们设计过的FIR数字滤波器的仿真,首先我们启动Matlab中的Simulink,启动方式是直接在文本窗口中输入命令Simulink,或者点击Matlab中的快速启动按钮。

图2-15Simulink工具窗口图

本论文模拟一个混合信号正弦波信号他包涵了10,30,60(Hz)的信号,在Matlab模拟出来是这样一个信号:

Fs=200;t=(1:200)/Fs;x1=sin(2*pi*t*10);x2=sin(2*pi*t*30);x3=sin(2*pi*t*60);X=x1+x2+x3;plot(t,X);title('混合正弦波信号X(t)-滤波前');grid;Moduleend//整个模拟滤波信号结束//使用软件仿真出待滤波信号

混合信号设定之后利用Matlab工具进行模型仿真。

图2-16Matlab中模拟的混合信号

然后在程序中设置好仿真模型如下图(2-17)

图2-17Simulink模型仿真

3.2设置仿真参数

设置好仿真参数,对各个信号进行单独修改和设置如下图(2-18):

图2-18sin(2*pi*30*t)参数模块

在主设置中,振幅(Amplitude)设置为1,

频率(Frequency)设置为30Hz,

采样帧数设置为1帧,以下不同频率信号同理设置:

图2-19sin(2*pi*10*t)参数模块

图2-20混合参数模块

图2-21仿真设计模块

图2-22滤波前信号波形图

图2-23滤波后信号波形图

3.3仿真总结

由上面的仿真结果输出图可以看出,所设计的数字带通滤波器使混合输入信号中频率为30Hz的正弦波信号通过,明显的出现了带中信号。而将频率为10Hz和60Hz的正弦波信号大大衰减,从而达到滤波效果。用MatlabSimulink仿真数字滤波器设计更加直观,操作便捷,易于分析。

4总结与展望

4.1设计成果总结

在理论积累和重复实践的基础上,多种滤波器设计思路已经相当成熟,设计出来的滤波器通过仿真概率高,仿真结果符合设计要求。FIR数字滤波器的设计方式选择更具有科学性和时效性,可以根据自己熟悉的软件,需要的FIR数字滤波器的精度,FIR数字滤波器的类型和滤波器阶数来灵活选择设计思路和方法。

4.2设计心得

设计路径优化确定好所需要设计的FIR数字滤波器滤波器后,首先对其进行性能需求分析,明确FIR数字滤波器系统应该达到的各种性能指标,其次,拟定多种滤波器类型,对这些方案采用Matlab进行仿真,在这个过程中我们有许多的窗函数选择和设计方法选择,进行综合分析和比较,选择出最佳的滤波器类型作为本设计方案,然后依据其性能指标编写Matlab程序,确定二阶节系数,或者直接进行VerilogHDL语言的编写。

系统整体思维细节决定整体,整体展现细节。我们的设计必须有系统的设计思维,把每一个细节都融入到整个系统中考虑,去发现整个FIR数字滤波器系统的主观性、完整性、稳定性和仿真功能的实现,才能让各个细节完美缝合,才能快速的完成性能优越的硬件设计。

多做设计尝试和总结,在FIR数字滤波器的设计中遇到过很多困难甚至是障碍。但是必须坚持自己的设计思路,去寻找其他的解决方法比如本论文中所提到的小数乘法器。这个本来是设计过程无法逾越的障碍,最后在不懈努力下,一样做出的小数乘法器。并且我们要善于积累和总结让障碍成为我们的另一种知识沉淀,这样我们才能融会贯通,才能更善于发现问题和解决问题。无论在什么时候,科学的道路上永远都是未知。我们应该一直坚持自己的原则,不抛弃,不放弃,这样才能在这条充满荆棘的路上走的更远!

THE END
1.路径规划基于matlab粒子群算法栅格地图最短路径规划含Matlab源码1.2.1基本思想 粒子群算法通过设计一种无质量的粒子来模拟鸟群中的鸟,粒子仅具有两个属性:速度和位置,速度代表移动的快慢,位置代表移动的方向。每个粒子在搜索空间中单独的搜寻最优解,并将其记为当前个体极值,并将个体极值与整个粒子群里的其他粒子共享,找到最优的那个个体极值作为整个粒子群的当前全局最优解,粒子https://blog.csdn.net/TIQCmatlab/article/details/115014184
2.算法与程序设计思想(精选8篇)《算法与程序设计思想》教学案例1 一、教学目标 1.知识与技能: 求一批数据中最大值的算法设计思想,并将算法的设计思想用流程图表示出来。2.过程与方法: 利用现实生活中比较身高的活动,以及对武术比赛中“打擂台”流程的逐步梳理,让学生学会从此类生活实际中提炼出求最大值的思想方法,即算法思想。 https://www.360wenmi.com/f/fileavgfb18k.html
3.基于FPGA的FIR数字滤波器设计FPGA元器件在高速并行处理和数据传输中有独特优势,FPGA正在前端信号处理中越来越多地代替ASIC和DSP。我们需要的就是这种设计周期短,功能密度高,重组时间短的元器件。本文在FPGA元器件的基础上,实现现代FIR数字滤波器功能。并且研究多种快速的FIR数字滤波器的理论设计思想和程序设计方法。 https://www.eet-china.com/mp/a309942.html
4.C语言常见排序算法归并排序C语言归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法 (Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序 列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。 1.2 算法思想 到这里,我们可以得到一https://www.jb51.net/article/255354.htm
5.一种基于LSD改进的室内直线特征匹配算法2.2 Light-LSD算法设计思想 针对室内长廊场景下存在大量垂直线段特征,改进算法的主要任务就是用尽可能少的线段特征描述出室内结构,原版LSD 造成大量冗余线段特征的原因是大量长短不一的短线段描述了图像中的同一处线特征。如图10 所示,原版LSD 会在图像中物体边缘处产生多条短线段,但理想情况下只应该有一条长线段紧紧https://www.fx361.com/page/2022/0725/10775281.shtml
6.程序=数据结构+算法《禅与计算机程序设计艺术》/陈光剑“数据结构和算法是过去 50 年来最重要的发明之一,它们是软件工程师需要了解的基础工具。”《Think Data Structures: Algorithms and Information Retrieval inJava》(Allen B.Downey) 基本数据类型 道生一,一生二,二生三,三生万物。 在计算机程序设计的世界里,先有基本数据类型,复合组装成复杂对象类型,不同对象之间https://cloud.tencent.com/developer/article/1815180
7.算法与程序设计课教学反思与建议.doc算法与程序设计课教学反思与建议.doc,算法与程序设计课教学反思与建议 算法与程序设计作为信息技术课程中的选修模块,其内容在广度和深度上都具有较高的要求。课标中对本模块的教学目标表述为“体验算法思想,了解算法和程序设计在解决问题过程中的地位和作用;能从简单问题https://max.book118.com/html/2018/0528/169137262.shtm
8.网络工程专业人才培养方案(2022)3. 工程基础知识。掌握从事网络工程专业所需的数字电路与逻辑设计、计算机组成原理、程序设计、算法与数据结构、软件工程概论、数据库原理与技术等基础知识。 4. 网络工程专业知识。掌握从事网络工程专业所需的计算机网络原理与技术、操作系统、信息安全导论、物联网技术基础、网络安全技术、网络互连技术、无线网络技术、网https://www.csust.edu.cn/jtxy/info/1148/20900.htm
9.《算法与程序设计》课堂教学教材组织方案《算法与程序设计》课堂教学教材组织方案 一.课堂教学教材组织方案简介 《算法与程序设计》是高中信息技术课程的选修模块之一。通过本课程的学习,让学 生体验算法思想、了解算法和程序设计在解决问题过程中的地位和作用,并能从简单问题出 发,设计解决问题的算法,并能初步使用一种程序设计语言编制程序实现算法解决问题。https://doc.mbalib.com/view/076091718f8ad96a60434cc3a43481f7.html
10.系列文章分类汇总《程序员修炼之道》解读1 会计学包含的两种程序设计思想 在【编程一生】公众号留言:666 可获取经典电子书。 三言 三言集锦6|不断规划与寻找自己的人生,想法把自己变重要 三言周集锦|评估一个事情要比去理解你评估了什么容易 三言周集锦|一个人写的烂软件将会给另一个人带来一份全职工作 三言周集锦|考虑可维护性https://maimai.cn/article/detail?fid=1717206459&efid=rjkjp3XnQ3Cilaj-ZIoEXw
11.2024年四川专升本计算机考试大纲公布,包含考试内容参考书目了解程序设计的基本思想。掌握程序设计的基本结构(顺序结构、选择结构、循环结构)。 3.程序流程图 了解流程图的基本概念和应用。理解累加、累乘、顺序查找、二分查找、冒泡排序算法的思想。掌握根据流程图判断算法功能、得出算法结果的方法。 六、数据库技术 https://www.exueshi.com/news/6-30991
12.高中信息技术课程标准本模块旨使学生进一步体验算法思想,了解算法和程序设计在解决问题过程中的地位和作用;能从简单问题出发,设计解决问题的算法,并能初步使用一种程序设计语言编制程序实现算法解决问题。本模块为选修模块。 本模块的教学,应注意与数学课程中有关内容的衔接,要强调理论与实践的结合,引导学生注意寻找、发现身边的实际问题,进而https://www.fqkhzx.cn/index/article/view/id/94.html
13.程序员必须要知道的8种常用算法思想(转)寻觅左岸③ 递归算法通常显得很简洁,但是运行效率较低,所以一般不提倡用递归算法设计程序。 ④ 在递归调用过程中,系统用栈来存储每一层的返回点和局部量。如果递归次数过多,则容易造成栈溢出,所以一般不提倡用递归算法设计程序。 分治算法思想 分治算法也采取了各个击破的方法,将一个规模为N的问题分解为K个规模较小的子https://www.cnblogs.com/linxw-blog/p/10500570.html
14.计算机实验报告3.2算法设计思想与算法实现步骤 3.3程序核心代码,程序调试过程中出现的问题及解决方法 3.4 程序运行的结果 4、实验总结 4.1实验结果分析及问题讨论 4.2实验总结心得体会 注解:实验总结的内容根据不同学科和类型实验要求不一样,一般理工科类的实验需要对实验结果进行分析,并且对实验过程中问题进行讨论;在计算机上进行的编https://www.ruiwen.com/shiyanbaogao/5615610.html
15.程序设计基础清华大学基本的算法思想,如排序、查找、筛法、递推、递归、动态规划等; 文件创建与读写操作,以及各种应用。 本课程在教学过程中,将采用任务驱动方式,培养学生用程序设计语言解决实际问题的能力;强调在解题实践中掌握程序设计的基本概念、基本思想和基本方法;突出对编程思想的阐述和计算思维的训练;平时作业与测验考试均使用上机解https://www.xuetangx.com/courses/course-v1:TsinghuaX+30240233X_2015_T2+sp/about
16.程序设计的思想程序设计的思想是程序设计过程中的核心,它指导着程序员如何思考和解决问题。下面我们将探讨程序设计的几个关键思想。 1. 问题分解 程序设计始于问题分解。将复杂问题分解成更小、更易于管理的部分是程序设计的基础。这种分解有助于理解问题的结构,并为编写代码提供清晰的路径。 2. 抽象思维 抽象思维是程序设计中不可https://wenku.baidu.com/view/f1353f30e63a580216fc700abb68a98271feac8b.html
17.带你入门动态规划算法?动态规划(Dynamic Programming,DP)是算法设计思想中最难也是最有趣的部分。掌握动态规划算法,对于大厂面试是必不可少的。有接触过DP的小伙伴也许会联想到许许多多的名词,如什么状态转移方程什么的;要不就想到教材书上严谨而又晦涩难懂的对于动态规划的介绍;也有人想到高中的通项公式或数列题等等,但是左看右看都https://www.jianshu.com/p/5793f25a006d