基于FPGA的FIR滤波器课程设计报告.docx

上传人:b****8 文档编号:10929812 上传时间:2023-02-23 格式:DOCX 页数:20 大小:225.79KB
下载 相关 举报
基于FPGA的FIR滤波器课程设计报告.docx_第1页
第1页 / 共20页
基于FPGA的FIR滤波器课程设计报告.docx_第2页
第2页 / 共20页
基于FPGA的FIR滤波器课程设计报告.docx_第3页
第3页 / 共20页
基于FPGA的FIR滤波器课程设计报告.docx_第4页
第4页 / 共20页
基于FPGA的FIR滤波器课程设计报告.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

基于FPGA的FIR滤波器课程设计报告.docx

《基于FPGA的FIR滤波器课程设计报告.docx》由会员分享,可在线阅读,更多相关《基于FPGA的FIR滤波器课程设计报告.docx(20页珍藏版)》请在冰豆网上搜索。

基于FPGA的FIR滤波器课程设计报告.docx

基于FPGA的FIR滤波器课程设计报告

基于FPGA的FIR滤波器的设计报告

1概述……………………………………………………………3

2课程设计要求…………………………………………………4

3设计内容………………………………………………………5

3.1课程设计内容……………………………………………5

3.1.1设计题目……………………………………………5

3.1.2设计要求……………………………………………5

3.2设计方案的确定………………………………………….6

3.2.1滤波器的设计方法………………………………….6

3.2.2滤波器设计实现方法……………………………….7

3.2.3方案确定……………………………………………..8

3.3设计方案的实现………………………………………….8

3.3.1利用FDATool工具设计FIR数字滤波器………....8

3.3.2FIR数字滤波器的FPGA实现…………………….12

3.4仿真测试与分析………………………………………….15

4心得体会………………………………………………………..17

5参考文献……………………………………………………..…17

1概述

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

本报告中首先讲解了这次设计的具体内容,以及所要求的数字FIR滤波器的技术指标。

然后,数字滤波器的一些设计方法,并具体确定我这次设计所用的设计方案。

滤波器在matlab中的设计方法应用。

通过matlab得到所需滤波器的具体参数h(n),

然后用这些所设计的参数,通过Quartusii工具编程具体实现滤波器功能。

这次滤波器实现过程中,用到以下小模块:

延时器,加法器,乘法器,减法器。

报告中有具体的VHDL源码程序。

仿真测试结果。

2课程设计要求及注意事项

1.设计过程以小组为单位,各组设一个组长,负责组织和协调本小组的讨论、任务分工等;

2.设计过程必须在本组内独立完成,不得跨组参考或抄袭,避免方案出现雷同;

3.设计书一律采用专用报告纸,用统一封面装订;

4.课程设计原则上在3周内做完;

5.最后一周周五进行优秀设计方案评选,在各组推选代表进行方案介绍的基础上,推选出2-3个优秀设计方案。

6.学有余力的学生在完成必做设计内容的基础上,可对内容进一步展开设计,以提高综合应用能力,锻炼独立解决问题的能力。

3课程设计内容

3.1课程设计题目及要求

3.1.1设计题目:

基于FPGA的FIR滤波器设计

3.1.2设计要求

利用所学知识,采用MATLAB和FPGA相结合完成FIR滤波器的设计仿真。

采用直接法或分布式算法实现FIR数字滤波器,了解两种算法的优缺点,选择其中一种算法,得出用它来实现FIR滤波器的硬件结构,对其实现方式进行研究,分别采用合适的方法来设计,最后利用FPGA器件实现FIR数字滤波器的硬件电路,并用Matlab对实现的结果进行仿真分析。

设计指标:

1)系统采样频率:

10KHz

2)通带边缘频率:

1KHz

3)阻带边缘频率:

2KHz

4)通带最大衰减:

1dB

5)阻带最小衰减:

47dB

6)类型:

FIR低通

7)输入序列位宽为8位的有符号数(最高位为符号位);

8)输出序列位宽为16位的有符号数(最高位为符号位)。

3.2设计方案的确定

3.2.1滤波器的设计方法:

一般可分为时窗函数法和等波纹设计法。

1.时窗函数法一般设计步骤如下:

A.根据所需设计的数字滤波器类型(低通、高通、带通、带阻),确定线性相位数字滤波器类型。

B.根据滤波器阻带衰减

,选择窗函数

的类型,根据过渡带宽度确定时窗函数的长度

并根据线性相位条件进行修正。

C.确定理想数字滤波器的频率响应函数

,其中

为幅度特性函数,

为相位特性函数。

D.计算理想滤波器的单位脉冲响应

,即

E.加窗得到设计结果

,即

2.等波纹设计一般步骤如下:

A.根据滤波器的设计指标要求:

边界频率、通带最大衰减

、阻带最小衰减

等,

计滤波器的长度,并确定幅度误差加权函数。

B.采用雷米兹交替算法,获得所设计的滤波器的单位脉冲响应

3.2.2滤波器设计实现方法

一般有线性相位FIR直接型结构和分布式算法的设计。

3.2.3方案确定

经过多种方案的比较,本次设计最终的方案是:

等波纹法的改进的直接型结构FIR数字滤波器

利用MATLAB提供的FDATOOL滤波器设计工具,采用等波纹法的设计。

设计的实现为线性相位FIR滤波器的直接结构。

3.3方案实现

3.3.1利用FDATool工具设计FIR数字滤波器

FIR滤波器设计系数的确定

等波纹法低通滤波器:

阶数:

15采样频率:

10k通带频率:

1k阻带频率:

2k

通带衰减1db阻带衰减:

47db

滤波器类型:

等波纹FIR

滤波器幅频响应

滤波器相频响应

 

滤波器系数

导出后的系数

Num*(2^6)

Columns1through9(括号内指在FPGA中不带负号的具体移位实现,)

-0.5695(右移1位)-1.4400(原数+右移1位)-2.0498(左移1位)-1.1969(原数+右移2位)2.0784(左移1位)7.5634(左移2位+左移1+原数+右移1位)13.5214(左移3位+左移2位+原数+右移1位)17.4256(左移4位+原数+右移1位)17.4256

Columns10through16

13.52147.56342.0784-1.1969-2.0498-1.4400-0.5695

3.3.2FIR数字滤波器的FPGA实现

一,工程实现概述

工程设计所用的模块有:

顶层原理图文件:

fir.qdf。

底层vhdl文件:

延时器:

suoc8。

实现系数相乘的mult0~mult7。

加法器:

add889,add41415,add51516,

减法器:

sub16

直接型结构的FPGA实现。

顶层原理图如下:

我的原理说明是根据上面原理图的设计顺序逐步进行的。

1寄存器(延时器)。

原理图上标有suoc8的器件。

输入8位数据,通过suoc8的D触发寄存器,达到延时的作用。

2第一级加法器

数据通过add889,就是8位数字输入,9位数字输出加法器,完成第一级相加运算,因为本题是16阶FIR数字滤波器,它的滤波系数有对称的关系,所以采用上面的第一级加法器,达到简化运算的效果。

3乘法器

乘法器用来将数据乘以由matlab计算得到的滤波系数,各系数的结果是通过移位运算得到,节约了硬件乘法器资源。

由系数可知:

-0.5695(右移1位)-1.4400(原数+右移1位)-2.0498(左移1位)-1.1969(原数+右移2位)2.0784(左移1位)7.5634(左移2位+左移1+原数+右移1位)13.5214(左移3位+左移2位+原数+右移1位)17.4256(左移4位+原数+右移1位)前4个全为负,后4个全为正。

因此前四个相加,后四个相加,再用后四个的结果减去前四个结果,即可得到有负号相乘的最终结果。

但在乘法器设计时暂时没有考虑符号,符号问题由下面的减法器实现。

4第二级加

第二级加法器为add141415。

Add141415就是说14位数据加14位数据输出15位数据。

在乘法级时,我已将数据全都整理成14位输出,所以这级可用同一类型加法器。

5第三级加

与上一级大体相同的原理,加法器为add151516。

6减法器输出

输出通过减法器sub16:

16位数减去16位数结果输出16位数。

由于是向减,不会有溢出现象,因此没做符号位的扩展。

到此,整个FIR数字滤波器设计完毕,下面详细说明各个部分的具体实现。

二,详细说明

我的说明是根据上面的概要逐一展开的。

我的设计是先编写各个功能的vhdl源文件,再生成功能模块,最后在顶层用原理图的设计方法连线,组成整个系统。

1寄存器(延时器)

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

这里用来寄存一组8位的二进制数据。

实现功能:

在CP正跳沿前接受输入信号,正跳沿时触发翻转,正跳沿后输入即被封锁。

源文件:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYsuoc8IS

PORT(clk:

INSTD_LOGIC;

clear:

INSTD_LOGIC;

Din:

INSTD_LOGIC_VECTOR(7DOWNTO0);

Dout:

OUTSTD_LOGIC_VECTOR(7DOWNTO0));

ENDsuoc8;

ARCHITECTUREaOFsuoc8IS

BEGIN

PROCESS(clk,clear)

BEGIN

IFclear='1'THEN

Dout<="00000000";

ELSIFclear='0'THEN

IF(clk'EVENTANDclk='1')THEN

Dout<=Din;

ENDIF;

ENDIF;

ENDPROCESS;

ENDa;

2第一级加法器

实现两个二进制数字的相加运算。

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

源文件:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_arith.ALL;

ENTITYadd889is

PORT(clk:

inSTD_LOGIC;

Din1,Din2:

insigned(7downto0);

Dout:

outsigned(8downto0));

ENDadd889;

ARCHITECTUREaofadd889is

SIGNALs1:

signed(8downto0);

SIGNALs2:

signed(8downto0);

BEGIN

s1<=(Din1(7)&Din1);

s2<=(Din2(7)&Din2);

PROCESS(Din1,Din2,clk)

BEGIN

ifclk'eventandclk='1'then

Dout<=s1+s2;

endif;

endprocess;

enda;

3乘法器

功能:

将数据乘以由matlab计算得到的滤波系数。

总共有8个乘法器。

源文件(以mult1为例):

LIBRARYieee;

USEieee.std_logic_1164.all;

USEieee.std_logic_arith.all;

ENTITYmult1is

PORT

(clk:

INSTD_LOGIC;

Din:

INSIGNED(8DOWNTO0);

Dout:

OUTSIGNED(13DOWNTO0));

ENDmult1;

ARCHITECTUREaOFmult1IS

SIGNALs1:

SIGNED(13DOWNTO0);

--SIGNALs2:

SIGNED(10DOWNTO0);

SIGNALs3:

SIGNED(13DOWNTO0);

BEGIN

P1:

process(Din)

BEGIN

s1(13DOWNTO5)<=Din;

s1(4DOWNTO0)<="00000";

--s2(10DOWNTO1)<=Din;

--s2(0)<='0';

ifDin(8)='0'then

s3<=("00000"&Din)+("000000"&Din(8DOWNTO1));

else

s3<=("11111"&Din)+("111111"&Din(8DOWNTO1));

endif;

endprocess;

P2:

PROCESS(clk)

BEGIN

ifclk'eventandclk='1'then

Dout<=s3;

endif;

ENDPROCESS;

ENDa;

4第二级加

对于乘了滤波系数的数据,进行第二次的加和,

以add41415为例源码如下:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_arith.ALL;

ENTITYadd141415is

PORT(clk:

inSTD_LOGIC;

Din1,Din2:

insigned(13downto0);

Dout:

outsigned(14downto0));

ENDadd141415;

ARCHITECTUREaofadd141415is

SIGNALs1:

signed(14downto0);

SIGNALs2:

signed(14downto0);

BEGIN

s1<=(Din1(13)&Din1);

s2<=(Din2(13)&Din2);

PROCESS(Din1,Din2,clk)

BEGIN

ifclk'eventandclk='1'then

Dout<=s1+s2;

endif;

endprocess;

enda;

5输出减法器

乘法系数为正的各分支之和减去乘法系数为负的各分支。

Din1接正,Din2接负。

源码如下sub16:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_arith.ALL;

ENTITYsub16is

PORT(clk:

inSTD_LOGIC;

Din1,Din2:

insigned(15downto0);

Dout:

outsigned(15downto0));

ENDsub16;

ARCHITECTUREaofsub16is

SIGNALs1:

signed(16downto0);

SIGNALs2:

signed(16downto0);

SIGNALs3:

signed(16downto0);

BEGIN

s1<=Din1(15)&Din1;

s2<=Din2(15)&Din2;

PROCESS(Din1,Din2,clk)

BEGIN

ifclk'eventandclk='1'then

s3<=s1-s2;

endif;

endprocess;

Dout<=s3(16downto1);

enda;

3.4仿真测试与分析

为了测试15阶等波纹FIR低通滤波器的滤波性能,本设计加入了输入

的信号,其中

是叠加在

上的噪声。

如图4-4所示,假设抽样频率为1000,则经过抽样的输入序列为:

,取n=0,1…39,由于

为浮点数,本设计将

扩大2^4倍,得到

,然后再取整。

具体如表4-4所示:

表4-4输入序列的处理

n

取整

n

取整

n

取整

n

取整

0

16.00

16

10

32.00

32

20

16.00

16

30

0

0

1

-13.49

-13

11

-0.19

0

21

-18.50

-19

31

-31.80

-32

2

20.94

21

12

31.21

31

22

11.05

11

32

0.78

1

3

-8.73

-9

13

-1.74

-2

23

-23.26

-23

33

-30.25

-30

4

25.40

25

14

28.94

29

24

6.59

7

34

3.05

3

5

-4.68

-4

15

-4.6

-5

25

-27.31

-27

35

-27.31

-27

6

28.94

29

16

25.40

25

26

3.05

3

36

6.5

7

7

-1.74

-2

17

-8.7

-9

27

-30.25

-30

37

-23.26

-23

8

31.21

31

18

20.94

21

28

0.78

1

38

11.05

11

9

-0.19

0

19

-13.49

-13

29

-31.80

-32

39

-18.50

-19

抽样,放大取整后的40个输入数据如下:

Din=[16,-13,21,-9,25,-4,29,-2,31,0,32,0,31,-2,29,-5,25,-9,21,-13,16,-19,11,-23,7,-27,3,-30,1,-32,0,-32,1,-30,3,-27,7,-23,11,-19]

滤波系数:

h=[-0.5,-1.4,-2.0,-1.2,2.0,7.5,13.5,17.4,17.4,13.5,7.5,2.0,-1.2,-1.4,-0.5]

QuartusII仿真波形如下:

如仿真图输出为:

Dout=[-4,-9,-11,-10,4,25,57,89,126,167,222,285,358,427,486,532,560,574,573,558,527,484,430,366,295,217,133,45,-45,-133,-217,-295,-366,-430,-485,-529,-560,-576,-560,-525,-476,-418,-356,-299,-243,-191,-136,-82,-33,-1,17,12,5]

Matlab中卷积结果如下:

y=round(conv(h,Din)/2)

y=

Columns1through24

-4-8-12-93275690126170222287358432490536563583582571539500443383

Columns25through48

30923414761-34-121-210-286-363-425-486-529-566-580-585-568-539-489-434-371-315-258-207-149

Columns49through54

-96-45-119115

仿真结果与matlab计算结果比较可知基本一样。

在matlab中输出函数

如图:

t=0:

.5:

50;

y=sin(0.05*pi*t)+cos(pi*t);

plot(t,y);

抽样40点x(n)如下:

t=0:

1:

39;y=sin(0.05*pi*t)+cos(pi*t);stem(t,y);

仿真输出在matlab中杆状图表示:

Dout=[-4,-9,-11,-10,4,25,57,89,126,167,222,285,358,427,486,532,560,574,573,558,527,484,430,366,295,217,133,45,-45,-133,-217,-295,-366,-430,-485,-529,-560,-576,-560,-525,-476,-418,-356,-299,-243,-191,-136,-82,-33,-1,17,12,5]

t=0:

52;stem(t,Dout);

滤波后有Dout得如下图:

结论:

比较仿真输出与matlab计算输出几乎完全一样,可得所设计是正确的。

4心得体会

在这次的课程设计中,将以前的所学知识得到一个综合的应用和巩固学习。

首先,这次课设能够完全顺利的实现最终的结果,要感谢我们的指导老师杨艳老师:

老师您辛苦了。

然后,通过这次课设学习到了,具体滤波器的设计与应用。

这次设计的是个低通滤波器,但可以举一反三的效果,以后无论是高通,带通,带阻滤波器都会设计应用。

另外,这次课设让我重新熟悉到了,功能强大的matlab工具软件。

通过课设现在可以进一步的对matlab中一些功能函数的运用。

最后,对嵌入式FPGA的具体系统设计应用有了一个更加确切的认识与实践。

5参考文献

[1]刘爱荣.EDA技术与CPLD/FPGA开发应用简明教程[M].北京:

清华大学出版社,2007.

[2]潘松.EDA技术实用教程[M].北京:

清华大学出版社,2006.

[3]薛年喜.MATLAB在数字信号处理中的应用[M].北京:

清华大学出版社,2003.

[4]程佩青.数字信号处理教程[M].北京:

清华大学出版社,2003.

 

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

当前位置:首页 > 工作范文 > 演讲主持

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

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