基于VHDL的低通FIR数字滤波器设计Word下载.docx

上传人:b****5 文档编号:17779499 上传时间:2022-12-10 格式:DOCX 页数:15 大小:445.73KB
下载 相关 举报
基于VHDL的低通FIR数字滤波器设计Word下载.docx_第1页
第1页 / 共15页
基于VHDL的低通FIR数字滤波器设计Word下载.docx_第2页
第2页 / 共15页
基于VHDL的低通FIR数字滤波器设计Word下载.docx_第3页
第3页 / 共15页
基于VHDL的低通FIR数字滤波器设计Word下载.docx_第4页
第4页 / 共15页
基于VHDL的低通FIR数字滤波器设计Word下载.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

基于VHDL的低通FIR数字滤波器设计Word下载.docx

《基于VHDL的低通FIR数字滤波器设计Word下载.docx》由会员分享,可在线阅读,更多相关《基于VHDL的低通FIR数字滤波器设计Word下载.docx(15页珍藏版)》请在冰豆网上搜索。

基于VHDL的低通FIR数字滤波器设计Word下载.docx

数字滤波器具有高精度、高可靠性、可程控改变特性或复用、便于集成等优点。

数字滤波器在语言信号处理、图像信号处理、医学生物信号处理以及其他应用领域都得到了广泛应用。

数字滤波器

数字滤波器是一种电子滤波器,它与完全工作在模拟信号域的模拟滤波器不同。

数字滤波器工作在数字信号域,它处理的对象是经由采样器件将模拟信号转换而得到的数字信号。

数字滤波器的工作方式与模拟滤波器也完全不同:

后者完全依靠电阻器、电容器、晶体管等电子元件组成的物理网络实现滤波功能;

而前者是通过数字运算器件对输入的数字信号进行运算和处理,从而实现设计要求的特性。

数字滤波器有着模拟滤波器所无法比拟的优越性,数字滤波器具有比模拟滤波器更高的精度,甚至能够实现后者在理论上也无法达到的性能。

比如数字滤波器甚至可以使通带内极接近截止频率处还能保持原信号幅度,而信号一过截止频率到达阻带就能发现信号有着明显的衰减。

数字滤波器相较于模拟滤波器还具有更高的信噪比和无可比拟的可靠性。

数字滤波器原理

数字滤波器是按照程序计算信号,到达滤波的目的。

通过对数字滤波器的存储器编写程序,到达滤波的目的。

通过对数字滤波器的存储编写程序,就可以实现各种滤波功能。

数字滤波器的原理图如下1-1所示,其核心就是数字信号处理器。

应用数字滤波器处理模拟信号(对应模拟频率)时,首先须对输入模拟信号进行限带、抽样和模数转换。

数字滤波器输入信号的数字频率,按照奈奎斯特抽样定理,要使抽样信号的频谱不产生重叠,应小于折叠频率,其频率响应具有以2π为间隔的周期重复特性,且以折叠频率即ω=π点对称。

为得到模拟信号,数字滤波器处理的输出数字信号须经数模转换、平滑。

数字滤波器分类

数字滤波器有低通、高通、带通、带阻和全通等类型。

它可以是时不变的或时变的、因果的或非因果的、线性的或非线性的。

一般来说,数字滤波器主要分为两种,即IIR(InfiniteImpulseResponse,无限脉冲响应)和FIR(FiniteImpulseResponse,有限脉冲响应)。

IIR数字滤波器采用递归型结构,即结构上带有反馈环路。

IIR滤波器运算结构通常由延时、乘以系数和相加等基本运算组成,可以组合成直接型、正准型、级联型、并联型四种结构形式,都具有反馈回路。

由于运算中的舍入处理,使误差不断累积,有时会产生微弱的寄生振荡。

而且IIR数字滤波器的相位特性不好控制,对相位要求较高时,需加相位校准网络。

IIR的设计相对来说,较为复杂,不利于计算机编程,用于计算的时延也相对较大,这几点不利于信号的实时处理。

FIR数字滤波器的结构上没有反馈回路,所以FIR数字滤波器的实现上相对于IIR数字滤波器要简单得多。

虽然FIR滤波器的幅频特性精度较之于IIR低,其性能也不如同样阶数的IIR,但是FIR滤波器具有线性相位,即不同频率分量的信号经过FIR滤波器后它们的时间差不变,这在信号处理中非常重要。

FIR滤波器最重要的优点就是它不存在系统极点,所以FIR滤波器是绝对稳定的系统。

而且由于数字计算硬件的飞速发展,FIR滤波器性能上的相对不足已经不成为问题。

再加上引入计算机辅助设计,FIR滤波器的设计也得到极大的简化。

现在应用最广的是线性、时不变数字滤波器,以及FIR滤波器。

FIR滤波器的设计

本次课题设计就是基于VHDL语言设计一个高效的FIR数字滤波器。

FIR滤波器的单位脉冲响应长度是有限的,它的差分方程或输出方程如下式(1-1)所示:

(1-1)

FIR的系统函数为:

(1-2)

从FIR的系统函数可以看出其有n-1个零点,极点都在原点上,其系统函数的分母为1,不存在反馈回路。

FIR滤波器具有h(0),h

(1)……h(n-1)共n个冲击响应序列,即有n个系数,通常被称为n阶FIR滤波器。

实现输出公式(1-1)的直接结构形式如下图(1-2)所示。

从该图可以看出,要实现n阶FIR滤波器至少需要n个乘法器,n-1个加法器。

在电路实现中,乘法器占用的逻辑单元数较多。

乘法器的增加,意味着电路成本增加,另外对电路的工作速度也有影响。

所以FIR滤波器设计的主要任务就是乘法器的设计。

FIR滤波器的参数决定其冲击响应h(i),一旦FIR滤波器的参数确定后,其冲击响应也就随之确定,即h(i)为一个常数。

信号与一个常数进行相乘,可以针对特定系数设计特定的乘法器,可以用移位器,加法器和减法器来实现。

一般情况下,移位器不消耗芯片资源,而减法器由加法器来实现。

如此就可以将复杂的乘法器简化为简单的加法器,不仅节省芯片资源,也不会对电路的工作速度有所影响。

那么具体需要多少加法器,必须先知道数字滤波器的冲击响应系数,接下来就进行获取系数的相关工作。

FIR参数设置、获取冲击响应系数

数字滤波器能比模拟滤波器做得更好,相应地,对数字滤波器的技术指标也比较高。

模拟滤波器常用的技术指标是半功率点截止频率

,半功率点是指角频率

时,滤波器的幅度平方等于其最大值的1/2。

数字滤波器中常用的技术指标有四个:

通带截止频率、通带最大衰减、阻带截止频率和阻带最小衰减。

本次课题设计所制作的是低通滤波器,下面就以低通滤波器为例,介绍上述四个指标。

下图1-3所示为低通滤波器的频率响应图。

其中,

为通带截止频率,

是通带允许的偏差,简称通带波动,

是通带的范围;

是阻带截止频率,

是阻带允许的波动,简称阻带波动,

是阻带的范围;

的区间称过渡带,

也就是半功率点截止频率。

如果通带和阻带的波动用分贝的衰减函数来表示的话,则叫做通带衰减和阻带衰减。

本次课程设计通过使用Matlab中的FDATool(FilterDesign&

AnalysisTool)工具来设计获取所设计的低通滤波器的冲击响应参数。

本次课程设计的低通滤波器的相关系数设定如下:

(1)类型:

FIR低通滤波器(16阶);

(2)采样频率:

Fs=96kHz,截止频率:

Fc=5kHz;

(3)输入序列位宽为10位(最高位为符号位)。

Matlab中的FDATool的界面如图1-4所示,选择低通(Lowpass),Kaiser窗口法(Beta设定为0.5)来进行设计,设定阶数为15,采样频率96000Hz,截止频率5000Hz。

经过Matlab的计算后可以对所设计的低通FIR滤波器进行分析。

可以查看滤波器的幅频响应,相频响应,群延时,冲击响应,阶跃响应,零极点图等。

图1-5和图1-6分别显示了本次设计的幅频和相频响应,阶跃响应。

从图1-5中可以看出所设计的FIR滤波器在通带范围内有很好的线性相位特性;

从图1-6中可以看出冲击响应在低频到高频呈现对称结构。

经过Matlab量化后得到的系数为:

467299125148167181188188181167148125997246

从生成的系数中可以发现系数对称分布,所以在设计FIR数字滤波器中的乘法器时就可以只用设计一半的乘法器即可。

获取冲击响应系数后,就可以开始设计FIR数字滤波器中的重要元件乘法器。

由上述讨论可知乘法器的设计可以由移位器,加减法器来实现。

而加法器的个数则主要决定了乘法器所需资源和对电路速度的影响。

当输入信号与固定系数相乘时,即一个二进制数与一常数(也用二级制表示)相乘时,常数表示成二进制数中的1的个数就决定了所需加法器个数。

获得系数后所需要做的就是对系数的二进制码进行优化改进,以减少加法器的个数。

CSD编码优化系数

本次课程设计过程中,选择通过CSD编码方法来对系数进行优化改进。

常规情况下,乘法器的系数如果是常数,会进行二进制编码,从而决定所需加法器个数。

CSD编码方式就是对普通二进制码进行重新编码从而减少非零个数,即减少加法器个数,也就减少了芯片资源的占用,而且还会提高芯片运行的速度和效率。

以上述所得系数的125为例。

FIR数字滤波器采样得到一个信号后,对信号模数转换后,得到一个二进制数,将该二进制数与125相乘就是乘法器的主要工作。

125用二进制表示为:

125=1111101=26+25+24+23+22+20,其电路结构如下图1-7所示。

从中可以看出该结构需要使用6个加法器。

从上述乘法器系数为125的例子可以看出,很显然这样的方法会随着系数的增大而使加法器显著增多,这对芯片的使用会占用较多资源,不利于芯片高质量、高效率地完成任务。

目前较为流行的方法就是对二进码进行改进,已达到减少非零数的个数,从而降低结构的复杂度。

一种有效的方法是用有符号数字量(SignedDigitNumbers,SD)来表示二进制数。

有符号数字量表示法与传统二进制有所不同,它具有三重值(也就是说数字的值域是{0,1,-1},其中-1经常写成—1)。

SD表示法应用在超前进位加法器或乘法器中已经被证明能够降低复杂性,这是因为:

通常可以通过非零元素的数量来估计乘法的效率,而应用SD表示法可以降低非零元素的数量。

统计表明,数字的二进制补码编码中有一半数位是零。

对于SD编码而言,零元素的密度增加到三分之二,从而简化了乘法器的结构。

例如上述的125系数用SD编码方式可以表示为:

125=10000—101SD=27-22+20;

125=111111—1SD=1—1111101SD=10—111101SD

从例子中可以发现,125的SD编码有多种方式,并不唯一,而且有些方式并没有能够减少非零个数。

因此便需要用CSD(CanonicSignedDigit)编码方法来对SD编码进一步优化。

CSD也就是指具有最少非零个数的SD编码。

针对于上例,125的CSD编码就是10000—101。

其结构图如图1-8所示。

明显地可以看到加法器的个数减少了,只有之前的一半,很显然可以有效地降低乘法器的复杂度。

一个常数进行二进制编码后,运用以下方法即可得到CSD编码。

(1)从最低有效位开始,用10…0—1取代所有大于2的1序列。

此外还需要用110—1取代1011。

(2)从最高有效位开始,用011取代10—1

本次FIR低通滤波器的乘法器的系数经CSD编码后为:

46=1100—10;

72=1001000;

99=1100011;

125=10000—101

148=10010100;

167=1010100—1;

181=1100—1—101;

188=11000—100;

乘法器的具体实现

本次课程设计的FIR数字滤波器核心部分就是乘法器的设计。

通过上述分析,已经得到乘法器的系数并对其进行了优化,接下来就是对乘法器的具体实现。

此次FIR数字滤波器的设计使用VHDL语言来实现。

VHDL(Very-High-SpeedIntegratedCircuitHardwareDescriptionLanguage)诞生于1982年。

1987年底,VHDL被IEEE和美国国防部确认为标准硬件描述语言。

自IEEE-1076(简称87版)之后,各EDA公司相继推出自己的VHDL设计环境,或宣布自己的设计工具可以和VHDL接口。

1993年,IEEE对VHDL进行了修订,从更高的抽象层次和系统描述能力上扩展VHDL的内容,公布了新版本的VHDL,即IEEE标准的1076-1993版本,简称93版。

VHDL和Verilog作为IEEE的工业标准硬件描述语言,得到众多EDA公司支持,在电子工程领域,已成为事实上的通用硬件描述语言。

本课程设计使用Altera公司的QuartusII作为VHDL语言的开发环境。

上述分析中可知,FIR数字滤波器的乘法器是由移位器和加减法器组成的。

乘法器的系数经过CSD编码后可以使得加法器个数最优化。

下面以本次设计的乘法器中系数为125的乘法器为例来介绍乘法器的具体设计。

系数125的乘法器经过CSD编码后,可以使用两个加法器和一个减法器来实现。

信号进入乘法器后,分别乘上27、22、20,也就是相应地右移7位,2位和保持原值。

接着再对移位后得到的值进行加减运算。

主要过程代码如下图1-9所示。

整个代码在顺序语句Process中完成,中间设置的变量使用相等位数为的是使各值位宽相等。

在变量前拼接输入信号最高位,是为了保持值的正负性。

设计乘法器时应注意包集的使用,由于是有符号数之间的算术运算,所以应加入std_logic_arith.all和std_logic_signed.all这两个包集。

乘法器设计完成后运用ModelSim进行了功能仿真,从图1-10可以看出乘法器的设计符合要求。

FIR数字滤波器的整体实现

乘法器的设计完成也就表明可以开始完整地设计FIR数字滤波器。

由公式(1-1)可知,FIR数字滤波器的输出就是输入信号与单位冲击响应的卷积,所以需要设计寄存器对输入信号进行延时传输。

上述讨论中发现FIR数字滤波器的乘法器系数是对称分布的,所以可以在将信号乘以冲击响应前,将需要乘以同一系数的两信号进行相加,再经过乘法器。

由公式可知乘法器输出的值还需进行相加,可针对性的分别设计加法器。

本次课题设计中,我将所需要到的加法器和乘法器都设计成元件,并封装在自制包中。

主程序设计时对自制包中的元件进行调用,这样做的好处在于主程序可以使人容易理解。

设计过程中应当注意中间过程量的位宽设置应做到匹配。

还有一点就是FIR数字滤波器在完成对信号的卷积运算后,其输出的位宽会超过10位,即无法使用规定位数来进行输出。

解决的方法就是对最终输出信号进行截尾,保留高十位。

这样一来只会使信号的输出幅度有所衰减,并不会对滤波的功能产生影响。

设计过程中可以通过Quartus中的RTLViewer工具对设计进行分析。

从中可以看出VHDL写出的程序与最初的设计是否相一致。

图1-11就是本次设计的RTLViewer。

从中可以看到16阶的FIR数字滤波器使用了15个寄存器和8个乘法器,信号进入乘法器之前会进行相加。

即输入序列中冲击响应值相同的会在进入乘法器之前进行相加,以减少乘法器的个数。

之所以只需要15个寄存器,是由于设计的16阶的FIR数字滤波器的常数系数项h(0)=0。

分析RTLViewer可以看出FIR数字滤波器的设计符合原理,与最初的设计相符。

FIR数字滤波器设计完成后,通过编译,对比RTLViewer也符合设计,那么就需要对其进行仿真,以观察此次设计是否符合要求。

图1-12即为FIR数字滤波器的功能仿真图,主要是来验证设计过程中是否有哪些元件是错误的,所以可以用一个常数作为输入来进行验证,即相当于输入序列为一矩形序列。

由于输出是经过截尾处理的,所以输出值不能与计算出来的值进行直接比较,可以通过观察中间值或者对输出不进行截尾来仿真,都可以验证设计的正确与否。

验证仿真结果的结论是设计的FIR数字滤波器是符合要求的。

DDS设计

FIR数字滤波器的设计完成后,需要进行实验验证。

那么就需要一个信号源来进入数字滤波器进行验证。

使用模拟信号源不宜控制频率,难以稳定地输出足够宽的频率来对所设计的FIR数字滤波器进行验证。

所以本次设计中选择使用的是数字信号源,也就是DDS(DirectDigitalSynthesizer,直接式数字频率合成器)。

DDS简介

DDS同DSP(数字信号处理)一样,是一项关键的数字化技术。

与传统的频率合成器相比,DDS具有低成本、低功耗、高分辨率和快速转换时间等优点,广泛使用在电信与电子仪器领域,是实现设备全数字化的一个关键技术。

DDS中主要包括频率控制寄存器、高速相位累加器和正弦计算器三个部分。

频率控制寄存器可以串行或并行的方式装载并寄存用户输入的频率控制码;

而相位累加器根据

DDS频率控制码在每个时钟周期内进行相位累加,得到一个相位值;

正弦计算器则对该相位值计算数字化正弦波幅度。

DDS输出的一般是数字化的正弦波,因此还需经过高速D/A转换器和低通滤波器才能得到一个可用的模拟频率信号。

市面上有专门的DDS芯片,也可以通过FPGA技术来制作DDS。

DDS具有非常优越的性能,有着众多优点。

DDS频率分辨率高,输出频点多,可达2的N次方个频点(N为相位累加器位数);

频率切换速度快,可达us量级;

频率切换时相位连续;

可以输出宽带正交信号;

输出相位噪声低,对参考频率源的相位噪声有改善作用;

可以产生任意波形。

DDS的制作

本次课程设计通过VHDL语言和FPGA技术,自行制作DDS来作为信号源,而非选择现有芯片。

DDS的制作包括了相位累加器和存储正弦波幅度的Rom(只读存储器),并没有设计频率控制寄存器,而是设计了一个步长控制端,通过外部的按键获取读取Rom的步长值,从而达到改变输出波形的频率。

累加器的功能主要是实现对步长的累加从而获取Rom的地址,从Rom中读取正弦波幅度值。

DDS的输入端为时钟端和步长控制端,输出端为Rom的地址。

DDS的输出频率由时钟频率、步长以及Rom的存储空间共同决定。

具体公式如下式1-3所示。

(1-3)

其中,

为输出频率,

为时钟频率,S为步长,R为Rom总地址范围。

Rom的制作可以通过多种方法来生成,最重要的步骤就是正弦波形幅度值得获取。

由于QuartusII中自带Rom,所以设计中就直接使用软件中自带Rom。

Rom的初始化的过程中,需要进行mif文件的加载。

mif文件中保存的就是正弦波幅度值。

可以运用C、Matlab等软件制作mif文件,文件中输入固定格式后,就将计算的值与地址对应放入其中。

计算过程主要是将0~2π的正弦波进行一定量等分处理,获取每一点的幅度值,再进行量化处理,就可以得到所需正弦波幅度值。

mif文件制作中需要注意的是地址应当设置为无符号数,而计算所得幅度值应具有符号,DDS输出数据位宽最好与FIR数字滤波器的输入信号位宽相同。

本次设计使用的Rom由matlab生成,地址范围0~4095(即4k),数据位宽为10位有符号数。

DDS的时钟频率与FIR数字滤波器的采样频率(96kHz)相同,DDS要达到FIR数字滤波器的5kHz截止频率,要在Rom中获取19.2个点,步长理论值为213.33。

所以步长控制端应设置为8位,这样可使DDS的频率在24Hz~5.97kHz间变化。

用以观察FIR数字滤波器是足够的,当然也可以提高步长位数从而使DDS具有更宽的频带。

本次设计就使步长控制端为8位,与开发板上的8个开关相连,方便外部操作来改变DDS的输出频率。

DDS设计完成后,需要对其进行仿真以验证DDS能否输出正弦波。

图1-13为ModelSim的DDS仿真波形。

从图中可以看出当相位累加器的步长设置为1时,DDS能从Rom中读出所有的存储值,所形成的波形是较为平滑的正弦波形。

改变相位累加器的步长值就可以获取不同频率的正弦波。

实验结果

本次课程设计主要设计了FIR数字滤波器的制作,为了检测所制作的FIR数字滤波器的功效,又设计了DDS来作为信号源产生不同频率的正弦波,来检验低通FIR数字滤波器的设计是否成功。

本次课程设计所用FPGA芯片为Altera公司的Cyclone系列的EP1C12Q240C8,所用开发板上具有两片DA芯片,最终设计通过这两片DA芯片输出模拟波形来对比FIR数字滤波器滤波前后的波形,便于观察FIR数字滤波器的效果。

开发板上的时钟频率为48MHz,而设计的FIR数字滤波器的采样频率为96kHz,所以需要再设计一个分频器来获取所需采样频率。

分频器的设计思想就是设置一个变量,用来记录输入时钟的脉冲数,当达到一定量时,对输出信号进行翻转,从而改变时钟频率的效果。

本次课程设计的最终原理图如图1-14所示。

引脚分配上,输入引脚有时钟输入和步长控制端(8位,与开发板上开关相连),输出引脚有两路DA模式段,DA时钟端,还有两路信号输出端,分别是输出DDS的波形,和FIR滤波器后的波形。

各模块的时钟都采用分频器输出的采样时钟。

设计完成后,将程序编译,烧写至开发板中,经示波器观察可以看到FIR数字滤波器滤波前后的波形对比,图1-15和图1-16分别是信号频率在设计的低通FIR数字滤波器通带内和阻带内的波形情况。

从图中和实验时的示波器中可以观察到,信号频率在通带内时,输出波形一直维持相同幅度,信号频率在阻带内时,输出波形有明显衰减。

滤波器输出波形的幅度值远低于DA参考电压是由于滤波器输出的数据经过截尾操作。

实验改进分析

本次课程设计的实验结果基本上到达了最初的设计要求,当然从实验现象上也可以发现还是有很多的不足之处,比如DDS生成的波形不够平滑,还有就是最初设计低通滤波器的参数时,没有进行严谨的计算,导致后面实验观察波形时,无法通过按键调整步长使其恰好达到截止频率。

还有一点就是通过示波器输出的DDS波形来看,其幅度值竟然比滤波后的波形幅值还小,这是很不合理的。

针对上述实验中出现的问题,可以运用一些方案来进行改进。

针对DDS输出的波形不够平滑,可以通过提高采样频率和扩充Rom的量化位数来进行改进,当然如果是针对截止频率处的波形不平滑,则主要是通过提高采样频率,使其可以在截止频率处从Rom中读取尽可能多的点(最少20个点)来保持正弦波的大致波形。

提高Rom的量化位数也可以使波形更为光滑,但是由于最终是通过DA来观察波形,所以光提高Rom的量化位数是不起作用的,除非更换更高位数的DA芯片。

针对实验中难以通过按键调整使输出正弦波频率恰好等于截止频率,这问题的主要解决方法就是在最初设计时,算好相关系数。

比如采样频率取96kHz,低通的截止频率选取3kHz,Rom设为4096bit,则步长设置为128的时候恰好可以使DDS输出波形达到3kHz的截止频率。

当然也可以通过其他方法来观察低通滤波的效果,比如累加器的步长输入前可以加上一个模块,使其可以定时改变步长值,从而可以使DDS的输出频率动态发生变化,无需人为控制,可以更好地观察波形。

至于DDS的波形幅值从示波器上读取的幅度值过小,不排除是当时使用的示波器的原因,因为之前滤波后的波形幅值也很小,只有10mv左右,但调整示波器后,波形幅值已到达500mv。

所以DDS输出波形幅值过低可以通过其他示波器来检查,或者单独制作一个DDS的工程进行波形检查。

总结与收获

这次的课程设计让我感悟很深,我从一个个完完全全的门外汉已经变成了一个初窥门径的初学者。

当然这还主要归功于蒋老师对课程教学的认真负责,正是由于蒋老师认真细致地课堂讲解,以及课程设计前的梳理导通,使我清晰地知道了自己所需要的事情是什么。

蒋老师的这种模式不同于我至今所上研究生课程中的任何一门,这是一门能够真真实实学到知识的课程。

课堂上

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

当前位置:首页 > 高等教育 > 军事

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

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