基于FPGA的FIR滤波器课程设计报告.docx
- 文档编号:10929812
- 上传时间:2023-02-23
- 格式:DOCX
- 页数:20
- 大小:225.79KB
基于FPGA的FIR滤波器课程设计报告.docx
《基于FPGA的FIR滤波器课程设计报告.docx》由会员分享,可在线阅读,更多相关《基于FPGA的FIR滤波器课程设计报告.docx(20页珍藏版)》请在冰豆网上搜索。
基于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.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 FPGA FIR 滤波器 课程设计 报告