基于Verilog实现一维数字信号处理算法FIR滤波器要点.docx
- 文档编号:284562
- 上传时间:2022-10-08
- 格式:DOCX
- 页数:13
- 大小:568.54KB
基于Verilog实现一维数字信号处理算法FIR滤波器要点.docx
《基于Verilog实现一维数字信号处理算法FIR滤波器要点.docx》由会员分享,可在线阅读,更多相关《基于Verilog实现一维数字信号处理算法FIR滤波器要点.docx(13页珍藏版)》请在冰豆网上搜索。
基于Verilog实现一维数字信号处理算法FIR滤波器要点
广东工业大学研究生课程考试试卷封面
学院:
题号
分数
1
2
3
4
5
6
7
8
合计
平时成绩
总评成绩
开课单位:
专业:
姓名:
学号:
考试科目:
学生类别:
考试时间:
第周星期
(年月日)
开课学期:
年秋季
任课教师:
说明:
1.以上左栏学生填写,右栏老师填写;
2.学位课考试的答题均写在答题纸上,考查课若无课堂考试可不用答题纸,但仍应填写此页封面;
3.平时成绩根据任课教师所写的课程教学大纲规定评定;
4.任课教师评完分后从网上录入成绩,再打印成绩单一式两份连同试卷、答题纸交教务员保管(保管四年)。
1.设计内容
本设计是一个基于FPGA的一维数字信号处理算法的FIR的设计,设计使用Verilog语言编写FIR滤波器的模块,通过编译和综合,并通过MATLAB和modelsim仿真对比验证设计结果。
2.设计原理
有限冲击响应(FIR)滤波器和无限冲击响应(IIR)滤波器广泛应用于数字信号处理系统中。
IIR数字滤波器方便简单,但它相位的线性,要采用全通网络进行相位校正。
图象处理以及数据传输,都要求信道具有线性相位特性,而有限冲击响应(FIR)滤波器既具有严格的线性相位,又具有任意的幅度。
与此同时FIR滤波器还具有以下优点:
(1)FIR滤波器的单位抽样响应是有限长的,在有限z平面上不存在极点,其运算结构中不存在反馈支路,即没有环路,因而滤波器性能稳定。
(2)只要经过一定的延时,任何非因果有限长序列都能变成因果的有限长序列,因而能用因果系统来实现。
(3)FIR滤波器由于单位冲击响应是有限长的,因而可用快速傅里叶变换(FFT)算法来实现过滤信号,可大大提高运算效率,因此越来越受到广泛的重视。
如果的长度为N,则它的系统函数和差分方程一般具有如下形式:
根据差分方程直接画出FIR滤波器的结构,称为直接型结构。
如图所示:
图2.1FIR滤波器直接结构
FIR滤波器的特点:
(1)系统的单位冲击响应h(n)在有限个n值处不为零。
(2)系统函数H(z)在|z|>0处收敛,极点全部在z=0处(稳定系统)。
(3)结构上主要是非递归结构,没有输出到输入的反馈,但有些结构中(例如频率抽样结构)也包含有反馈的递归部分。
对线性时不变系统保持线性相位的条件是:
单位脉冲响应为偶对称或奇对称。
即:
为设计线性滤波器,应保证h(n)为对称的。
1)若N为偶数,其线性相位FIR滤波器的对称结构流图:
图2.2若N为偶数线性相位FIR滤波器的对称结构流图
图中:
“+1”对应偶对称情况,“-1”对应奇对称情况。
当n为奇数时,最后一个支路断开。
2)若N为奇数,其线性相位FIR滤波器的对称结构流图:
图2.3N为奇数线性相位FIR滤波器的对称结构流图
在本设计中,我们采用线性FIR低通滤波器,所采用的阶数N=8,所以是偶对称的,估采取图2.2的结构,其中“±1“取“+1”。
3.设计思路
由上面的FIR滤波器的对称结构流图,可知要在FPGA上实现FIR滤波器,首先要确定滤波器的抽头系数h(n)。
其系数的确定,我们可以通过两种办法来实现:
第一种就是通过MATLAB编写FIR滤波器程序,然后直接导出抽头系数“h(n)”;另外一种办法就是使用MATLAB自带的FDATOOL简便地设计一个FIR滤波器,然后导出系数。
考虑到要更直观地描述FIR滤波器的设计,我采用了第一种方法,用编写MATLAB代码的方式设计一个FIR低通滤波器。
设计好滤波器后,接着就是准备一维数字信号(语音信号),通过滤波器的滤波,看能把语音信号中的高频的信号滤除,只剩下低频的信号,从而验证滤波器的性能。
然后再把语音信号保存起来,以供后面验证用Verilog设计的FIR滤波器模块使用。
这里面涉及到怎样读取音频文件的问题,这就需要了解音频文件的格式(.wav),每个音频文件都有文件头,这个文件头就包含了音频文件的很多像类似采样率这样的信息。
文件头后就是具体的语音信号。
做好准备工作后,就可以在QUARTUSII里面编写Verilog代码了。
由于是硬件描述语言,所以设计的思路很简单,就是通过把输入序列移位,然后首位对称相加再乘以抽头系数,然后把相乘结果再相加最后给输出。
其中涉及的难点是FPGA对有符号小数的乘法处理部分。
在QUARTUSII编写好模块之后,就要用到modelsim来对设计进行仿真。
对于仿真信号的输入,我们可以添加一个altera的romIP核来存放之前用MATLAB读取的语音信号,然后通过时钟的驱动一个一个输入到FIR滤波器模块,最后在modelsim中显示滤波器的输出结果,同时把滤波器的输出结果保存起来,以备最后用来跟用MATLAB设计的滤波器的结果作对比。
验证的最后一步,就是要把modelsim输出的仿真结果用MATLAB进行绘图,和之前MATLAB的仿真输出结果进行比较,从而验证滤波器的设计是否成功。
4.设计过程
1)用MATLAB仿真FIR滤波器
用MATLAB仿真设计线性FIR滤波器,首先要确定其指标,在本设计里,我们规定滤波器的指标如下:
阶数N=8,截止频率为12.5Hz。
用加汉明窗函数的方法设计FIR滤波器。
根据此可以编得MATLAB代码如下:
据此可以求得滤波器抽头系数h(n)为:
h=0.00280.02980.12590.23250.23250.12590.02980.0028
由于FPGA不支持浮点数的运算,所以我们采用定点数的格式来量化抽头系数。
对于16位的输入数据,我们这里采用Q11的定点小数格式,即11位小数位,4位整数位,1位符号位。
将抽头系数乘以2^11可得:
b=560257476476257605
这样我们就得到了8阶FIR滤波器的量化系数了。
确定好FIR滤波器的系数了,再接着就是准备需要处理的语音信号作为FIR滤波器的输入数据。
语音信号是以.wav格式存储的音频文件,这种格式的音频文件,都是有文件头的,文件头里包含许多有用的信息,例如,采样频率、声道数、文件长度等这类的详细信息。
所以要想准确的读取的语音信号的采样值,必须知道音频信号的格式。
在这里,采用了自定义函数read_wav读取.wav格式的音频文件的方式读取语音信号。
用读取的语音信号分别与滤波器系数进行卷积运算,可以得到滤波器后的结果。
代码和结果如下图所示:
图4.1MATLAB仿真FIR的输入波形以及输出波形对照
通过简单分析上述处理前后的对照图的结果,可以看出,其信号的高频部分可得到滤除,而低频部分会无失真地保留。
然后将读取的语音信号以十六进制的方式保存起来,为验证后面用FPGA设计滤波器提供输入。
具体实现代码如下:
图4.2对语音信号的采样点以十六进制保存到txt文件中
2)用verilog编写FIR滤波器模块
本设计中,整个Verilog程序可以分为三个部分:
FIR滤波器主程序、有符号小数的乘法模块以及modelsim仿真的TestBench代码。
其中关键程序就是有符号小数的乘法处理模块。
(1)FIR滤波器主程序:
其主程序的变量定义如下:
其中输入数据和滤波器的抽头系数,都是16位,由于输入序列最大值不超过40,所以相加结果仍然是16位。
相乘的结果用32位表示。
为了防止相乘再相加后数据的溢出,我们在这里把存放相乘再相加的结果扩大了2位,用到34位,然后最后的输出,在原来的基础上再扩大1位,35位的输出。
在最后的输出中,可以把低位去掉,只保留若干高位,但这里只需要仿真出结果便可,所以没有进行截断处理,然而在实际工程中,由于数位的限制,还是要注意这点。
FIR主程序就是描述图2.2的FIR滤波器结构,其行为描述,具体可以用以下代码实现:
其中x1~x8通过前一个值对后一个值的赋值,可以实现移位操作;而s1~s4是用来存放首位对称相加的结果;然后y1~y4是乘法输出的结果,通过out1与out2的相加,最后输出到结果out。
其中乘法的运算,我们调用4次乘法模块(因为线性FIR滤波器是对称结构,所以可以只进行8/2=4次的乘法运算。
(2)有符号小数的乘法模块
对于有符号的小数运算,在FPGA里面,其实是和有符号整数的运算是一样的。
只是定点数的小数点的位置,我们需要牢记,在最后输出结果的时候,要适当的进行移位。
由于负数在Verilog中是以补码形式保存的,所以在输入16位有符号数的时候,在进行相乘之前,要把负数变为原码再相乘,而正数的补码就是其本身,所以不用转换。
然后把符号位提出来,进行异或运算,得到输出的符号位,再把有效数位的原码进行相乘,最后得到1位符号位和30位相乘结果。
为了补全32位,可以在最低位加上一个无关位0。
最终输出如果是负数,还需要把它变成补码的形式输出。
至此,一个有符号的小数乘法运算就完成了。
根据以上思路,我们可以写出出乘法模块的代码:
(3)modelsim仿真的TestBench代码
5.分析验证
设计好以上Verilog模块后,可以进行FPGA的编译综合和Modelsim仿真了。
结果如下图所示:
图5.1modelsim仿真波形
为了方便将modelsim的仿真跟MATLAB的仿真作对比,本设计将modelsim的仿真结果保存在txt文件中,然后通过MATLAB读出这些数据,画图验证modelsim的仿真结果是否达标,从而验证FIR这种一维数字信号处理算法是否正确。
图5.2modelsim仿真结果保存在txt文件中
执行以下MATLAB代码,读取modelsim的仿真结果并画出modelsim仿真结果:
图5.3分别画出用matlab仿真和用modelsim仿真后的FIR数字滤波器的输出波形
图5.4比较matlab仿真的输出波形和modelsim仿真的输出波形
根据上面这些输出波形,可以清楚看出,modelsim仿真的输出波形和MATLAB的输出波形基本是一致的,可以确定用FPGA设计的一维数字信号处理的FIR算法正常工作,达到了预期的效果。
6.设计总结
通过本次设计,我对Verilog这门语言有了更深入的理解和认识,掌握了FPGA对有符号小数乘法的处理技巧。
另外通过对设计进行modelsim和matlab的联合仿真,使我对这两个工具的操作水平有了进一步的提高。
同时也加强了我思考和解决问题的能力,使我把所学的知识与实际联系起来,做设计的同时也让我对课本知识巩固和加强了。
本设计经多次测试,能正常运行,并基本上实现了预期功能。
但同时也存在一些不足的地方,例如这个设计是否可以更通用等。
此次课程设计由于本人在知识、经验方面都存在着不足,设计时未能做到完全满足要求。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 Verilog 实现 数字信号 处理 算法 FIR 滤波器 要点