基于FPGAFIR滤波器研发设计.docx

上传人:b****6 文档编号:15642885 上传时间:2023-07-06 格式:DOCX 页数:42 大小:920.61KB
下载 相关 举报
基于FPGAFIR滤波器研发设计.docx_第1页
第1页 / 共42页
基于FPGAFIR滤波器研发设计.docx_第2页
第2页 / 共42页
基于FPGAFIR滤波器研发设计.docx_第3页
第3页 / 共42页
基于FPGAFIR滤波器研发设计.docx_第4页
第4页 / 共42页
基于FPGAFIR滤波器研发设计.docx_第5页
第5页 / 共42页
基于FPGAFIR滤波器研发设计.docx_第6页
第6页 / 共42页
基于FPGAFIR滤波器研发设计.docx_第7页
第7页 / 共42页
基于FPGAFIR滤波器研发设计.docx_第8页
第8页 / 共42页
基于FPGAFIR滤波器研发设计.docx_第9页
第9页 / 共42页
基于FPGAFIR滤波器研发设计.docx_第10页
第10页 / 共42页
基于FPGAFIR滤波器研发设计.docx_第11页
第11页 / 共42页
基于FPGAFIR滤波器研发设计.docx_第12页
第12页 / 共42页
基于FPGAFIR滤波器研发设计.docx_第13页
第13页 / 共42页
基于FPGAFIR滤波器研发设计.docx_第14页
第14页 / 共42页
基于FPGAFIR滤波器研发设计.docx_第15页
第15页 / 共42页
基于FPGAFIR滤波器研发设计.docx_第16页
第16页 / 共42页
基于FPGAFIR滤波器研发设计.docx_第17页
第17页 / 共42页
基于FPGAFIR滤波器研发设计.docx_第18页
第18页 / 共42页
基于FPGAFIR滤波器研发设计.docx_第19页
第19页 / 共42页
基于FPGAFIR滤波器研发设计.docx_第20页
第20页 / 共42页
亲,该文档总共42页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

基于FPGAFIR滤波器研发设计.docx

《基于FPGAFIR滤波器研发设计.docx》由会员分享,可在线阅读,更多相关《基于FPGAFIR滤波器研发设计.docx(42页珍藏版)》请在冰点文库上搜索。

基于FPGAFIR滤波器研发设计.docx

基于FPGAFIR滤波器研发设计

基于FPGA的FIR滤波器设计

一、设计目的

为了帮助学生深入理解和消化基本理论、进一步提高综合应用能力并且锻炼独立解决问题的能力,我们将《数字信号处理》、《集成电路原理与应用》和《《FPGA系统设计与应用》几门课程融合在一起开设的FPGA综合实验课程设计。

本次完成的是利用FPGA来完成FIR滤波器的设计、程序设计和实验调试任务。

二、设计要求

(1)基本要求

利用所学知识,采用VHDL语言完成FIR滤波器的设计仿真。

要求用VHDL编程设计底层文件,顶层文件可任意(可用原理图方式或文本方式);完成仿真文件(包括MATLAB和QUARTUSII两种仿真)并对其结果比较。

具体设计指标如下:

(1)采样频率

(2)截止频率

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

(4)窗口类型为kaiser窗,

=0.5;

(5)滤波器长度为16;

(6)输出结果保留10位。

(2)提高部分

根据所学知识,设计出一个具有频率控制功能DDS,要求输出频率分别为10KHz和100KHz,将输出的两路数字信号进行叠加,并通过所设计的FIR滤波器进行滤波,将滤波输出的数字信号通过D/A转换电路输出波形,并用示波器观察输出波形,并完成测试结果分析。

结构框图如图1-1所示。

图2-1整体结构框图

三、设计原理

3.1FIR滤波器

由线性系统理论可知,在某种适度条件下,输入到线性系统的一个冲击完全可以表征系统。

当我们处理有限的离散数据时,线形系统的响应(包括对冲击的响应)也是有限的。

若线性系统仅是一个空间滤波器,则通过简单地观察它对冲击的响应,我们就可以完全确定该滤波器。

通过这种方式确定的滤波器称为有限冲击响应(FIR)滤波器。

3.2线性FIR滤波器原理

FIR滤波器响应(简称FIR)系统的单位脉冲响应

为有限长序列,系统函数

在有限z平面上不存在极点,其运算结构中不存在反馈支路,即没有环路。

如果

的长度为N,则它的系统函数和差分方程一般具有如下形式:

根据差分方程直接画出FIR滤波器的结构,称为直接型结构。

如图3-1所示:

图3-1FIR滤波器直接结构

FIR滤波器的特点:

单位脉冲响应序列为有限个;可快速实现;可得到线性相位;滤波器阶数较高。

对线性时不变系统保持线性相位的条件是:

单位脉冲响应为偶对称或奇对称。

即:

为设计线性滤波器,应保证h(n)为对称的。

①若N为偶数,其线性相位FIR滤波器的对称结构流图如图3-2所示:

图3-2若N为偶数线性相位FIR滤波器的对称结构流图

图中:

“+1”对应偶对称情况,“-1”对应奇对称情况。

当n为奇数时,支路断开。

若N为奇数,其线性相位FIR滤波器的对称结构流图如图3-3:

图3-3N为奇数线性相位FIR滤波器的对称结构流图

其中y(n)和x(n)分别是输出和输入序列。

有限冲激响应滤波器的一种直接型实现,可由式

(2)生成,M=5的情况如图3-4(a)所示。

其转置,如图3-4(b)所示,是第二个直接型结构。

通常一个长度为M的有限冲激响应滤波器由M个系数描述,并且需要M个乘法器和(M-1)个双输入加法器来实现。

图3-4(a)直接型一

图3-4(b)直接型二

长度为M的线性相位有限冲激响应滤波器由对称的冲激响应h(n)=h(M-1-n)或反对称的冲激响应h(n)=-h(M-1-n)描述。

利用线性相位有限冲激响应滤波器的对称(或反对称)性质,可以将传输函数的直接型实现所需的乘法器总量减少一半。

例如,图3-5显示了一个具有对称冲击响应的、长度为7的有限冲激响应传输函数的实现。

图3-5线性相位有限冲激响应结构

四、设计方案

因为N=16为偶数,根据老师上课时所讲,可以按照上面第一个原理图设计滤波器,如图4-1所示。

图4-1若N为偶数线性相位FIR滤波器的对称结构流图

本设计取

为偶对称的情况,则图中:

应取“+1”。

由上图可分析得到,要完成滤波器的设计,需要设计的底层文件包括延时单元、加法电路单元、乘以负一单元、乘法器单元及截取10位数单元。

由各单元VHDL编程后,生成相应的符号文件。

最后连接成顶层原理图。

整个电路的原理图设置方案如图4-2所示:

图4-2滤波器整体设计方案原理图

五、设计内容及结果分析

首先使用matlab计算出符合设计要求的滤波器冲激响应系数。

后将整个电路规划为语言编辑和原理图编辑两个单元,其中语言编辑部分负责编辑整个滤波器电路中所需用的单元器件,包括寄存器、加法器、减法器以及乘法器几个单元器件;最后将所有的器件连接成顶层原理图。

在进行编译及仿真。

5.1基于matlab的FIR滤波器系数计算

在matlab命令编辑窗口输入Fdatool指令,再点回车即可打开FilterDesign&AnalysisTool窗口,在该工具的帮助下,我们就可以完成f.i.r.滤波器系数的计算。

Fdatool界面总共分两大部分,一部分是designfilter,在界面的下半部分,用来设置滤波器的设计参数,另一部分则是特性区,在界面的上半部分,用来显示滤波器的各种特性。

designfilter部分主要分为:

ResponseType(响应类型)选项,包括Lowpass(低通)、Highpass(高通)、Bandpass(带通)、Bandstop(带阻)和特殊的滤波器。

根据本次作业要求,在该选项中选择Lowpass选项。

DesignMethod(设计方法)选项,包括IIR滤波器的Butterworth(巴特沃思)法、ChebyshevTypei(切比雪夫i型)法、ChebyshevTypeii(切比雪夫ii型)法、Elliptic(椭圆滤波器)法等和Window(窗函数)法等多种方法。

结合本次课设要求,选择FIR滤波器的窗函数法进行设计。

选定窗函数法后,会在右侧出现Options区域,进行窗函数法相关参量的设置,根据作业要求选择Kaiser窗并设置Beta为:

0.5。

FilterOrder(滤波器阶数)选项,定义滤波器的阶数,包括Specifyorder(指定阶数)和Minimumorder(最小阶数)。

在Specifyorder中填入所要设计的滤波器的阶数(n阶滤波器,specifyorder=n-1),如果选择Minimumorder则matlab根据所选择的滤波器类型自动使用最小阶数。

本次作业要求设计16阶滤波器,所以选定Specifyorder并填入15。

FrenquencySpecifications选项,可以详细定义频带的各参数,包括采样频率Fs和频带的截止频率。

它的具体选项由ResponseType选项和DesignMetho选项决定。

我们要求的Lowpass(低通)滤波器只需要定义Fs=80KHz、Fc=10KHz。

本次课设中的参数全部设定后的结果如图5-1所示。

图5-1参数全部设定后图

参数设定完毕,单击工具窗口下方的DesignFilter按钮,就开始进行相关参数计算。

在计算结果中可以看到该滤波器的一些相关曲线,如幅频响应(如图5-2)、相频响应(如图5-3)、冲激响应(如图5-4)等。

图形如下:

图5-2幅频响应曲线

图5-3相频响应曲线

图5-4冲激响应

计算的结果可通过File下拉菜单中的Export命令取出,点击Export打开Export对话框(如图5-5),点击Export按钮可将滤波器系数数据存放到当前工作空间,并以Num命名。

图5-5冲激系数输出对话框

保存并关闭滤波器设计分析工具回到matlab主窗口,在命令编辑区输入Num可得到工具的计算结果(如图5-6)。

图5-6输出在matlab的冲激系数

对FIR滤波器的系数进行调整,做整数化操作。

可得到滤波器整数化的系数为[-31-88-106-547023940149949940123970-54-106-88-31],如图5-7所示:

图5-7整数化后的冲激系数

5.2单元器件的编辑及仿真

5.2.1、寄存器模块

在本次课设中延迟单元可用寄存器来替代,寄存器用于寄存一组二值代码,只要求它们具有置1、置0的功能即可。

在本设计中使用带异步复位rst端的D触发器,当rst=1时,输出信号q=0,当rst=0且上升沿脉冲到达时q=d,即延迟了一个在周期。

其程序代码如下:

LIBRARYieee;

USEieee.std_logic_1164.all;

ENTITYjicunqiIS

PORT(rst,clk:

INSTD_LOGIC;

d:

INSTD_LOGIC_VECTOR(9DOWNTO0);

q:

OUTSTD_LOGIC_VECTOR(9DOWNTO0));

ENDjicunqi;

ARCHITECTUREdff16OFjicunqiIS

BEGIN

PROCESS(rst,clk)

BEGIN

IF(rst='1')THEN

q<=(OTHERS=>'0');

ELSIF(clk'EVENTANDclk='1')THEN

q<=d;

ENDIF;

ENDPROCESS;

ENDdff16;

程序编译后就可进行仿真,仿真结果如图5-8所示:

图5-8寄存器模块仿真结果

由上图可知,与预期相符,即设计正确,再将其生成为一个元件以便后来调用,其生成图如图5-9所示。

图5-9寄存器元件图

5.2.2、加法器模块

即实现两个有符号数的相加运算。

即将输入的两数,在时钟脉冲到来时相加运算,输出结果。

在本设计中共有8个:

两个10位有符号数相加产生一个11位有符号数的加法器、一个18位和19位有符号数相加产生20位有符号数的加法器、一个两个20位有符号数相加产生一个21位有符号数的加法器、一个两个19位有符号数相加产生一个20位有符号位数的加法器、一个20位和21位有符号数相加产生22位有符号数的加法器,以及一个20位和22位有符号数相加产生23位有符号数的加法器电路。

具体如下:

⑴两个10位有符号数相加产生一个11位有符号数的加法器设计:

由分析可写出如下程序:

LIBRARYieee;

USEieee.std_logic_1164.all;

USEieee.std_logic_arith.all;

ENTITYadd101011IS

PORT(a,b:

INSIGNED(9DOWNTO0);

clk:

INSTD_LOGIC;

s:

OUTSIGNED(10DOWNTO0));

ENDadd101011;

ARCHITECTUREsum101011OFadd101011IS

BEGIN

PROCESS(clk)

BEGIN

IF(clk'EVENTANDclk='1')THEN

s<=(a(9)&a)+(b(9)&b);

ENDIF;

ENDPROCESS;

ENDsum101011;

 

程序编译后就可进行仿真,仿真结果如图5-10所示:

图5-10两个10位有符号数相加结果波形图

由上图可知,与预期相符,即设计正确,再将其生成为一个元件以便后来调用,其生成图如图5-11所示

图5-11两个10位有符号数相加元件图

218位和19位有符号数相加产生20位有符号数的加法器设计:

由分析可写出如下程序:

LIBRARYieee;

USEieee.std_logic_1164.all;

USEieee.std_logic_arith.all;

ENTITYadd181920IS

PORT(a:

INSIGNED(17DOWNTO0);

b:

INSIGNED(18DOWNTO0);

clk:

INSTD_LOGIC;

s:

OUTSIGNED(19DOWNTO0));

ENDadd181920;

ARCHITECTUREsum7023918OFadd181920IS

BEGIN

PROCESS(clk)

BEGIN

IF(clk'EVENTANDclk='1')THEN

s<=(a(17)&a(17)&a)+(b(18)&b);

ENDIF;

ENDPROCESS;

ENDsum7023918;

程序编译后就可进行仿真,仿真结果如图5-12所示:

图5-1218位和19位有符号数相加结果波形图

由上图可知,与预期相符,即设计正确,再将其生成为一个元件以便后来调用,其生成图如图5-13所示

图5-1318位和19位有符号数相加元件图

3两个20位有符号数相加产生一个21位有符号数的加法器设计:

由分析可写出如下程序:

LIBRARYieee;

USEieee.std_logic_1164.all;

USEieee.std_logic_arith.all;

ENTITYadd202021IS

PORT(a:

INSIGNED(19DOWNTO0);

b:

INSIGNED(19DOWNTO0);

clk:

INSTD_LOGIC;

s:

OUTSIGNED(20DOWNTO0));

ENDadd202021;

ARCHITECTUREsum40149919OFadd202021IS

BEGIN

PROCESS(clk)

BEGIN

IF(clk'EVENTANDclk='1')THEN

s<=(a(19)&a)+(b(19)&b);

ENDIF;

ENDPROCESS;

ENDsum40149919;

程序编译后就可进行仿真,仿真结果如图5-14所示:

图5-14两个20位有符号数相加结果波形图

由上图可知,与预期相符,即设计正确,再将其生成为一个元件以便后来调用,其生成图如图5-15所示

图5-15两个20位有符号数相加元件图

⑷两个19位有符号数相加产生一个20位有符号位数的加法器设计:

由分析可写出如下程序:

LIBRARYieee;

USEieee.std_logic_1164.all;

USEieee.std_logic_arith.all;

ENTITYadd191920IS

PORT(a:

INSIGNED(18DOWNTO0);

b:

INSIGNED(18DOWNTO0);

clk:

INSTD_LOGIC;

s:

OUTSIGNED(19DOWNTO0));

ENDadd191920;

ARCHITECTUREsum181819OFadd191920IS

BEGIN

PROCESS(clk)

BEGIN

IF(clk'EVENTANDclk='1')THEN

s<=(a(18)&a)+(b(18)&b);

ENDIF;

ENDPROCESS;

ENDsum181819;

程序编译后就可进行仿真,仿真结果如图5-16所示:

图5-16两个19位有符号数相加结果波形图

由上图可知,与预期相符,即设计正确,再将其生成为一个元件以便后来调用,其生成图如图5-17所示

图5-17两个19位有符号数相加元件图

⑸20位和21位有符号数相加产生22位有符号数的加法器:

由分析可写出如下程序:

LIBRARYieee;

USEieee.std_logic_1164.all;

USEieee.std_logic_arith.all;

ENTITYadd202122IS

PORT(a:

INSIGNED(19DOWNTO0);

b:

INSIGNED(20DOWNTO0);

clk:

INSTD_LOGIC;

s:

OUTSIGNED(21DOWNTO0));

ENDadd202122;

ARCHITECTUREsum192021OFadd202122IS

BEGIN

PROCESS(clk)

BEGIN

IF(clk'EVENTANDclk='1')THEN

s<=(a(19)&a(19)&a)+(b(20)&b);

ENDIF;

ENDPROCESS;

ENDsum192021;

程序编译后就可进行仿真,仿真结果如图5-18所示:

图5-1820位和21位有符号数相加结果波形图

由上图可知,与预期相符,即设计正确,再将其生成为一个元件以便后来调用,其生成图如图5-19所示

图5-1920位和21位有符号数相加元件图

⑹20位和22位有符号数相加产生23位有符号数的加法器电路设计(最后一级带舍位):

在此加法器电路中在引入低位舍去功能只保留最终10位输出,最终保留10位输出采用了直接取输出23位数的高十位的方法,因此在输出中近似等于除掉了2^13即8192以后的结果。

为了比较,特又引出了一个23位全输出引脚(quan)。

其程序如下:

LIBRARYieee;

USEieee.std_logic_1164.all;

USEieee.std_logic_arith.all;

ENTITYadd202223IS

PORT(a:

INSIGNED(19DOWNTO0);

b:

INSIGNED(21DOWNTO0);

quan:

OUTSIGNED(22DOWNTO0);

clk:

INSTD_LOGIC;

s:

OUTSIGNED(9DOWNTO0));

ENDadd202223;

ARCHITECTUREsum192110OFadd202223IS

BEGIN

PROCESS(clk)

VARIABLEc:

SIGNED(22DOWNTO0);

BEGIN

IF(clk'EVENTANDclk='1')THEN

c:

=(a(19)&a(19)&a(19)&a)+(b(21)&b);

ENDIF;

s<=c(22DOWNTO13);

quan<=c;

ENDPROCESS;

ENDsum192110;

程序编译后就可进行仿真,仿真结果如图5-20所示

图5-2020位和22位有符号数相加结果波形图

由上图可知,与预期相符,即设计正确,再将其生成为一个元件以便后来调用,其生成图如图5-21所示;

图5-2120位和22位有符号数相加元件图

5.2.3、减法器模块:

它实现零值减去两个有符号数的减法运算。

即用零值减去输入的两数,在时钟脉冲到来时做减法运算,输出结果。

注意:

-31和-88的乘结果都只包含了乘系数31和88的数值,并没有将两个负号代入,所以两乘法器后面的加法器运算改为减法器模块,采用0-31*累加结果-88*累加结果的方法,实现(-31)*累加结果+(-88)*累加结果的计算。

-106和-54后面的加法器采用同样的方式处理。

⑴-31和-88的减法器设计:

由分析可写出如下程序:

LIBRARYieee;

USEieee.std_logic_1164.all;

USEieee.std_logic_arith.all;

ENTITYjian3188is

PORT(clk:

inSTD_LOGIC;

Din1:

insigned(15downto0);

Din2:

insigned(17downto0);

Dout:

outsigned(18downto0));

ENDjian3188;

ARCHITECTUREsub318817ofjian3188IS

SIGNALs1:

signed(17downto0):

=(Din1(15)&Din1(15)&Din1);

SIGNALs2:

signed(18downto0):

=(OTHERS=>'0');

BEGIN

PROCESS(Din1,Din2,clk)

BEGIN

IFclk'eventandclk='1'THEN

Dout<=s2-Din2-s1;

ENDIF;

ENDPROCESS;

ENDsub318817;

程序编译后就可进行仿真,仿真结果如图5-22所示:

图5-2231和-88的减法器结果仿真图

由上图可知,与预期相符,即设计正确,再将其生成为一个元件以便后来调用,其生成图如图5-23所示;

图5-23-31和-88的减法器元件图

⑵-106和-54的减法器的设计:

由分析可写出如下程序:

LIBRARYieee;

USEieee.std_logic_1164.all;

USEieee.std_logic_arith.all;

ENTITYjian10654is

PORT(clk:

inSTD_LOGIC;

Din1:

insigned(17downto0);

Din2:

insigned(16downto0);

Dout:

outsigned(18downto0));

ENDjian10654;

ARCHITECTUREsub1065417ofjian10654IS

SIGNALs1:

signed(17downto0):

=(Din2(16)&Din2);

SIGNALs2:

signed(18downto0):

=(OTHERS=>'0');

BEGIN

PROCESS(Din1,Din2,clk)

BEGIN

IFclk'eventandclk='1'THEN

Dout<=s2-Din1-s1;

ENDIF;

ENDPROCESS;

ENDsub1065417;

程序编译后就可进行仿真,仿真结果如图5-24所示:

图5-24-106和-54的减法器结果仿真图

由上图可知,与预期相符,即设计正确,再将其生成为一个元件以便后来调用,其生成图如图5-25所示;

图5-25-106和-54的减法器元件图

5.2.4、乘法器模块:

实现输入带符号数据与固定数据两个二进制数的乘法运算。

当到达时钟上升沿时,将两数输入,运算并输出结果。

从资源和速度方面考虑,常系数乘法运算可用移位相加来实现。

将常系数分解成几个2的幂的和形式,然后再分别进行运算。

滤波器系数分别为-31、-88、-106、-54、70、239、401、499、499、401、239、70、-54、-106、-88、-31。

算法:

其中带负号数先乘去负号的整数部分,在后面的求和中做减法运算。

编码方式如下:

31被编码为2^5-2^0、88被编码为2^6+2^4+2^3、106被编码为2^6+2^5+2^3+2^1、54被编码为2^6-2^3-2^1、70被编码为2^6+2^2+2^1、239被编码为2^8-2^4-2^0、401被编码为2^9-2^7+2^4+2^0、499被编码为2^9-2^3-2^2-2^0。

具体如下:

⑴乘31电路设计:

由分析可写出如下程序:

LIBRA

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

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2