• 方案介绍
  • 附件下载
  • 相关推荐
申请入驻 产业图谱

数字信号处理及FIR滤波设计Verilog代码VIVADO仿真

08/06 11:07
744
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

2-24061Q24641208.doc

共1个文件

名称:数字信号处理及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

  • 2-24061Q24641208.doc
    下载

相关推荐