名称:数字信号处理及FIR滤波设计Verilog代码VIVADO仿真
软件:VIVADO
语言:Verilog
代码功能:
数字信号处理及FIR滤波
首先通过DDS产生50K的sin信号,再将sin 50K信号乘以输入的(30~70K)信号下变频到(-20K~20K),再通过截止频率为20KHz的Fir低通滤波器滤波,得到滤波后的波形。
若输入的信号频率为20KHz,40KHz,100KHz的混合信号。20K与50K混频后得到30K和70KHz;40K与50K混频后得到10K和90KHz;100K与50K混频后得到50K和150KHz;混频后信号经过截止频率为20KHz的Fir低通滤波器,可以得到40K的混频信号10K,其他信号均被滤除。
Fir滤波器阶数为128。阶数32与64都试过,没有128的效果好。阶数更高应该还会好一点,但是对应消耗的FPGA资源会越多,考虑到性能和资源的平衡,选择128阶。
FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com
演示视频:
设计文档:
1. 设计思路
首先通过DDS产生50K的sin信号,再将sin 50K信号乘以输入的(30~70K)信号下变频到(-20K~20K),再通过截止频率为20KHz的Fir低通滤波器滤波,得到滤波后的波形。
若输入的信号频率为20KHz,40KHz,100KHz的混合信号。20K与50K混频后得到30K和70KHz;40K与50K混频后得到10K和90KHz;100K与50K混频后得到50K和150KHz;混频后信号经过截止频率为20KHz的Fir低通滤波器,可以得到40K的混频信号10K,其他信号均被滤除。
Fir滤波器阶数为128。阶数32与64都试过,没有128的效果好。阶数更高应该还会好一点,但是对应消耗的FPGA资源会越多,考虑到性能和资源的平衡,选择128阶。
2. 工程文件
3. 程序文件
4. RTL图
5. Testbench
先分别产生20K,40K,100KHz的信号,再产生20KHz,40KHz,100KHz三个信号的混合信号。该混叠信号作为激励,输入到所设计的模块内仿真。验证代码功能,若最终输出信号为10K则表示仿真正确,代码正确。
6. 仿真图
备注
FIR滤波器系数设计
1. 打开matlab
2. 输入fdatool回车,打开滤波器设计工具fdatool
3. 设置如下
导出coe文件即可
部分代码展示:
`timescale?1ns?/?1ps ////////////////////////////////////////////////////////////////////////////////// //?Company:? //?Engineer:? //? //?Create?Date:?2020/08/10?22:48:07 //?Design?Name:? //?Module?Name:?FIR_process //?Project?Name:? //?Target?Devices:? //?Tool?Versions:? //?Description:? //? //?Dependencies:? //? //?Revision: //?Revision?0.01?-?File?Created //?Additional?Comments: //? ////////////////////////////////////////////////////////////////////////////////// module?FIR_process( input?clk,//10MHz input?[15:0]?data_in,//16bit有符号数(30K~70K) output?[31:0]?data_out//输出波形 ????); wire?tvalid_1; wire?[31:0]?tdata_1; //调用dds,输出50KHz正弦波 //输出频率f=10M*N/2^16,N为频率控制字,N=327时,计算出频率为50K dds1?i_dds1?( ??.aclk(clk),??????????????????????????????????//?input?wire?aclk ??.s_axis_config_tvalid(1'b1),??//?input?wire?s_axis_config_tvalid ??.s_axis_config_tdata(16'd327),????//?input?wire?[15?:?0]?s_axis_config_tdata ??.m_axis_data_tvalid(tvalid_1),??????//?output?wire?m_axis_data_tvalid ??.m_axis_data_tdata(tdata_1)????????//?output?wire?[31?:?0]?m_axis_data_tdata ); wire?[15:0]
点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=878
744