Fir低通滤波器(Verilog手写代码)

Fir低通滤波器(Verilog手写代码)
对于fir低通滤波器,现在很多视频上讲的都是调用IP核,的确,firIP核既简单又快捷,而且效果还不错,但是在使用上也会受限,毕竟他的抽头系数是先固定好的。现在小编来教大家用Verilog手写Fir。手写代码有一下一些好处,首先可以让大家对fir的结构了解的更熟悉,其次抽头系数可以通过 外部 设备从写入ram,传给FPGA可以实现fir-3db可变。
再设计之前,有一些知识点我们必须知道,而且必须注意,不然调几个星期都调不出来。
1:采样频率和输入波形的频率(这里以正弦波为例),假如F(in)=10K,那么我们再用MATLAB设计抽头系数的时候必须把采样频率设为 大于等于20k,这个学了信号与系统的都应该知道,那么我们的FPGA的fir模块的输入时钟频率也必须设成这个频率,大于此频率会降低滤波器 效果,小于此频率会增强滤波效果,大家可通过仿真自己查看
2:输入波形的最高位(符号位)一定要注意,默认一般都是无符号的,但是为了我们fir的通用性,小编在此设计为有符号整形的。
3:数据位的大小需要注意,例如M位数据与N位数据相加至少需要用M+1(M>=N)位来表示,M位数据与N位数据相乘至少需要M+N 位宽来表示。
知道了以上几点,我们就可以来设计FIR低通滤波器了。我给大家准备了一些fir滤波器的书籍,包括matlb生成抽头系数的链接,供大家参考。

链接:https://pan.baidu.com/s/12GMYkP1b37pxAMfGLJ7O4g
提取码:bxjn

FIR低通滤波器说官方点就是做卷积,说的通俗一点就是乘加运算
设计要求,采样为225K,输入为10K和30K合成的正弦波,滤出30K的正弦波
在这里插入图片描述

在这里插入图片描述
调用乘法IP核,这样有利于输出的稳定,31阶乘法器,调用32个IP核,即可在同一时钟内完成32次乘法

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
乘法完成做32次假发,注意位宽,12位有符号*12位有符号需用24位有符号数在表示,在做32次加法,至多需要在增加5位,但经计算28位输出满足要求,由于乘法器输出的为24位有符号数据,在做加法时程序不会自动补位,即会出现溢出情况,所以需要把24位乘法器输出数据拼接位28位,将乘法器输出的最高位重复四次,这样拼接不会改变数据的大小

在这里插入图片描述

在这里插入图片描述
以下是modelsim仿真,data1,data2分别为DDS输出的10k和30k频率的正弦波,data为data1与data2的合成波,data_out为滤波器的输出,经验证,输出频率正确,设计满足要求
在这里插入图片描述

发布了2 篇原创文章 · 获赞 5 · 访问量 87

猜你喜欢

转载自blog.csdn.net/weixin_43517955/article/details/104957591