fir滤波器设计Word文件下载.docx

上传人:b****3 文档编号:17930481 上传时间:2022-12-12 格式:DOCX 页数:35 大小:428.54KB
下载 相关 举报
fir滤波器设计Word文件下载.docx_第1页
第1页 / 共35页
fir滤波器设计Word文件下载.docx_第2页
第2页 / 共35页
fir滤波器设计Word文件下载.docx_第3页
第3页 / 共35页
fir滤波器设计Word文件下载.docx_第4页
第4页 / 共35页
fir滤波器设计Word文件下载.docx_第5页
第5页 / 共35页
点击查看更多>>
下载资源
资源描述

fir滤波器设计Word文件下载.docx

《fir滤波器设计Word文件下载.docx》由会员分享,可在线阅读,更多相关《fir滤波器设计Word文件下载.docx(35页珍藏版)》请在冰豆网上搜索。

fir滤波器设计Word文件下载.docx

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

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

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

三、设计思路:

根据课程上老师所讲例题,首先使用matlab计算出符合设计要求的滤波器冲激响应系数。

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

原理图编辑部分完成单元器件的电气连接工作。

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

图3-1滤波器整体设计思路

 

四、设计过程:

(一)基于matlab工具的滤波器系数计算:

在matlab命令编辑窗口输入Fdatool指令,敲击回车可以打开FilterDesign&

AnalysisTool窗口(如图4-1所示),在该工具的帮助下,我们可以完成f.i.r.滤波器系数的计算工作。

图4-1FilterDesign&

AnalysisTool窗口

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

designfilter部分主要分为:

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

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

DesignMethod(设计方法)选项,包括IIR滤波器的Butterworth(巴特沃思)法、ChebyshevTypei(切比雪夫i型)法、ChebyshevTypeii(切比雪夫ii型)法、Elliptic(椭圆滤波器)法等和FIR滤波器的Equiripple法、Least-squares(最小乘方)法、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、Fc。

采用窗函数设计滤波器时,由于过渡带是由窗函数的类型和阶数所决定的,所以只需要定义通带截止频率,而不必定义阻带参数。

MagnitudeSpecifications选项,可以定义幅值衰减的情况。

采用窗函数设计时,通带截止频率处的幅值衰减固定为6db,所以不必定义。

本次作业中的参数设定结果如图4-2所示。

图4-2滤波器参数设定结果

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

在计算结果中我们可以看到该滤波器的一些相关曲线,如幅频响应(如图4-3)、相频响应(如图4-4)、冲激响应(如图4-5)等以及具体的系数值(如图4-6)。

图4-3幅频响应

图4-4相频响应

图4-5冲激响应

图4-6所设计滤波器冲激系数

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

图4-7冲激系数输出对话框

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

图4-8输出在matlab的冲激系数

对FIR滤波器的系数进行调整,做整数化操作(如图4-9)。

可得到滤波器整数化的系数为[-31-88-106-547023940149949940123970-54-106-88-31]

图4-9整数化后的冲激系数

(二)单元器件的语言编辑:

1、寄存器模块

寄存器用于寄存一组二值代码,只要求它们具有置1、置0的功能即可。

在本设计中用D触发器组成寄存器,实现寄存功能。

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

●程序代码如下:

---------------------------

LIBRARYieee;

USEieee.std_logic_1164.all;

ENTITYdff16IS

PORT(rst,clk:

INSTD_LOGIC;

d:

INSTD_LOGIC_VECTOR(9DOWNTO0);

q:

OUTSTD_LOGIC_VECTOR(9DOWNTO0));

ENDdff16;

ARCHITECTUREdff16OFdff16IS

BEGIN

PROCESS(rst,clk)

BEGIN

IF(rst='

1'

)THEN

q<

=(OTHERS=>

'

0'

);

ELSIF(clk'

EVENTANDclk='

)THEN

=d;

ENDIF;

ENDPROCESS;

仿真结果如图4-10所示:

图4-10寄存器仿真结果

2、加法器模块

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

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

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

其中一个20位和22位有符号数相加产生23位有符号数的加法器电路为最后一级,所以在加法器电路中在引入低位舍去功能只保留最终10位输出,最终保留10位输出采用了直接取输出23位数的高十位的方法,因此在输出中近似等于除掉了2^13即8192以后的结果。

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

----------------------

USEieee.std_logic_arith.all;

ENTITYsum101011IS

PORT(a,b:

INSIGNED(9DOWNTO0);

clk:

s:

OUTSIGNED(10DOWNTO0));

ENDSUM101011;

ARCHITECTUREsum101011OFsum101011IS

PROCESS(clk)

BEGIN

IF(clk'

s<

=(a(9)&

a)+(b(9)&

b);

ENDsum101011;

仿真结果如图4-11所示:

图4-11两10位相加产生11位加法器仿真结果

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

ENTITYsum7023918IS

PORT(a:

INSIGNED(17DOWNTO0);

b:

INSIGNED(18DOWNTO0);

OUTSIGNED(19DOWNTO0));

ENDsum7023918;

ARCHITECTUREsum7023918OFsum7023918IS

=(a(17)&

a(17)&

a)+(b(18)&

仿真结果如图4-12所示:

图4-1218位19位相加产生20位数仿真结果

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

ENTITYsum40149919IS

INSIGNED(19DOWNTO0);

OUTSIGNED(20DOWNTO0));

ENDsum40149919;

ARCHITECTUREsum40149919OFsum40149919IS

=(a(19)&

a)+(b(19)&

仿真结果如图4-13所示:

图4-13两20位相加产生21位数仿真结果

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

ENTITYsum181819IS

ENDsum181819;

ARCHITECTUREsum181819OFsum181819IS

=(a(18)&

仿真结果如图4-14所示:

图4-14两19位相加产生20位数仿真结果

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

ENTITYsum192021IS

INSIGNED(20DOWNTO0);

OUTSIGNED(21DOWNTO0));

ENDsum192021;

ARCHITECTUREsum192021OFsum192021IS

a(19)&

a)+(b(20)&

仿真结果如图4-15所示:

图4-1520位和21相加产生22位数仿真结果

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

----------------------

ENTITYsum192110IS

INSIGNED(21DOWNTO0);

OUTSIGNED(9DOWNTO0));

ENDsum192110;

ARCHITECTUREsum192110OFsum192110IS

VARIABLEc:

SIGNED(22DOWNTO0);

c:

a)+(b(21)&

=c(22DOWNTO13);

仿真结果如图4-16所示:

图4-1620位22位相加产生被截短的10位数仿真结果

3、减法器模块:

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

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

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

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

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

--------------------

ENTITYsub318817is

PORT(clk:

inSTD_LOGIC;

Din1:

insigned(15downto0);

Din2:

insigned(17downto0);

Dout:

outsigned(18downto0));

ENDsub318817;

ARCHITECTUREsub318817ofsub318817IS

SIGNALs1:

signed(17downto0):

=(Din1(15)&

Din1(15)&

Din1);

SIGNALs2:

signed(18downto0):

PROCESS(Din1,Din2,clk)

IFclk'

eventandclk='

THEN

Dout<

=s2-Din2-s1;

仿真结果如图4-17所示:

图4-17-31和-88减法器的仿真结果

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

ENTITYsub1065417is

insigned(16downto0);

ENDsub1065417;

ARCHITECTUREsub1065417ofsub1065417IS

=(Din2(16)&

Din2);

=s2-Din1-s1;

仿真结果如图4-18所示:

图4-18-106和-54减法器的仿真结果

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电路设计:

ENTITYmult31IS

PORT(clk:

Din:

INSIGNED(10DOWNTO0);

OUTSIGNED(15DOWNTO0));

ENDmult31;

ARCHITECTUREmult31OFmult31IS

SIGNALs1:

SIGNED(15DOWNTO0);

SIGNALs2:

SIGNED(10DOWNTO0);

SIGNALs3:

A1:

PROCESS(Din,s1,s2,s3)

s1<

=Din&

"

00000"

;

s2<

=Din;

IF(Din(10)='

)THEN

s3<

=('

&

s1(14downto0))-("

s2(10DOWNTO0));

ELSE

11111"

A2:

PROCESS(clk,s3)

I

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

当前位置:首页 > 人文社科 > 文学研究

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

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