matlab与FPGA数字滤波器设计、无线通信、FPGA数字信号处理系列(3)—— Matlab 与 Vivado 联合仿真 FIR 滤波器,fdatool工具箱

本讲使用 matlab 产生待滤波信号,并编写 testbench 进行仿真分析,在 Vivado 中调用 FIR 滤波器的 IP 核进行滤波测试,下一讲使用 两个 DDS 产生待滤波的信号,第五讲、第六讲开始编写verilog代码设计FIR滤波器,不再调用IP核。

MATLAB 与 FPGA无线通信、图像处理、数字信号处理系列 汇总

本例使用上一讲的FIR滤波器IP核工程。
matlab与FPGA数字滤波器设计、无线通信、FPGA数字信号处理系列(3)—— Matlab 与 Vivado 联合仿真 FIR 滤波器,fdatool工具箱_第1张图片

1.新建仿真文件

(1)Simulation Sources -> sim_1 ->右键 Add Sources;
(2)Add or Create Simulation Sources,新建仿真文件 fir_ip_tb;
matlab与FPGA数字滤波器设计、无线通信、FPGA数字信号处理系列(3)—— Matlab 与 Vivado 联合仿真 FIR 滤波器,fdatool工具箱_第2张图片

2.编写testbench

(1)例化加入的 IP 核,其中:
@ 输入时钟引脚为 clk,设置为 32MHz(此处暂时还未设定频率,后面会在 testbench 的 initial 块里给出);
@ 输入数据引脚为 data_in,位宽 16-bit,表示待滤波数据;
@ 输出数据引脚为 data_out,位宽 40-bit,表示滤波后的数据;
@ 输出数据有效信号引脚 data_out_valid,位宽 1-bit,输出状态,为高电平时表示输出的 data_out 有效;
@ 输入数据准备好信号引脚 data_in_ready,位宽 1-bit,输出状态,为高电平时表示准备好接收输入数据;
@ 输入有效信号 S_AXIS_DATA_0_tvalid,为 1 时表示输入信号有效,为 0 时即使有输入信号 data_in 到 fir 的 ip 核 ,ip 核也不做处理,此处直接让其恒为 1,输入数据恒有效
@ 总结,需要给ip核输入的数据目前只有两个,一个是时钟,一个是待滤波数据;
matlab与FPGA数字滤波器设计、无线通信、FPGA数字信号处理系列(3)—— Matlab 与 Vivado 联合仿真 FIR 滤波器,fdatool工具箱_第3张图片
(2)产生32MHz时钟信号;
初始 initial 时设置时钟信号 clk 为低电平0,always 表示一直执行,#16表示每隔 16 ns(单位是在仿真文件开头自动有定义 ns)时钟取反一次,即每隔 16ns 时钟 0/1 间隔变化,相当于 32ns 一个时钟周期,约等于32 MHz;
matlab与FPGA数字滤波器设计、无线通信、FPGA数字信号处理系列(3)—— Matlab 与 Vivado 联合仿真 FIR 滤波器,fdatool工具箱_第4张图片

3.产生待滤波数据data_in

(1)编写 matlab 程序,产生两个信号 0.5 MHz 和 5 MHz,采样频率32 MHz,采样 5 个周期,进行 16-bit 量化,并把量化后的数据写到 .txt 文件中;
matlab与FPGA数字滤波器设计、无线通信、FPGA数字信号处理系列(3)—— Matlab 与 Vivado 联合仿真 FIR 滤波器,fdatool工具箱_第5张图片
可以看到,在 0.5 MHz 和 5 MHz处有两个峰,表示抽样后的两个信号,经过滤波器之后,5 MHz 信号被滤除,只剩下 0.5 MHz 信号,蓝色框内可以看到,在 3 MHz 以后滤波器的响应已经低于 -80 dB,相当于滤波后的幅度是滤波前的1/10000,滤波效果很好。
matlab与FPGA数字滤波器设计、无线通信、FPGA数字信号处理系列(3)—— Matlab 与 Vivado 联合仿真 FIR 滤波器,fdatool工具箱_第6张图片
使用 32 MHz 的采样时钟采样 0.5 MHz 待滤波信号(相当于 0.5 MHz 信号叠加了5 MHz噪声),每个周期采样64个点,在 testbench 中读取一个周期的 64 个点,重复 30 个周期得到 30 个周期的输入待滤波信号给 FIR 滤波器;
matlab与FPGA数字滤波器设计、无线通信、FPGA数字信号处理系列(3)—— Matlab 与 Vivado 联合仿真 FIR 滤波器,fdatool工具箱_第7张图片

4.仿真结果分析

点击 1 处开始仿真,一般默认只会仿真 1 us,这时候只看到了初始化的一部分,是看不到后续结果的,点击 2 处进行仿真,会将所有的仿真步骤完成,执行到上图中第64行的 $stop 语句停止仿真
matlab与FPGA数字滤波器设计、无线通信、FPGA数字信号处理系列(3)—— Matlab 与 Vivado 联合仿真 FIR 滤波器,fdatool工具箱_第8张图片

5.仿真结果分析

(1)data_out_valid:初始为 0,在 1.872 ns跳变为 1,输出数据开始有效,在为 0 的那段时间输出数据 data_out 无效,这段时间内是 FIR 的 IP 核进行一些内部的配置和初始化;
matlab与FPGA数字滤波器设计、无线通信、FPGA数字信号处理系列(3)—— Matlab 与 Vivado 联合仿真 FIR 滤波器,fdatool工具箱_第9张图片
(2)更改数据表示模式
对 data_in,右键设置其数据格式 Radix 为有符号的十进制数(Signed Decimal),设置其波形为模拟波形(Analog);
对 data_out同样设置;
对 Pattern 设置 无符号十进制,不需要设置波形。
matlab与FPGA数字滤波器设计、无线通信、FPGA数字信号处理系列(3)—— Matlab 与 Vivado 联合仿真 FIR 滤波器,fdatool工具箱_第10张图片
(3)点击放大缩小可以查看整个仿真的效果
通过下面几图,可以看到仿真效果很好,5 MHz 高频噪声滤除干净,肉眼观察不出来杂波噪声。
matlab与FPGA数字滤波器设计、无线通信、FPGA数字信号处理系列(3)—— Matlab 与 Vivado 联合仿真 FIR 滤波器,fdatool工具箱_第11张图片
matlab与FPGA数字滤波器设计、无线通信、FPGA数字信号处理系列(3)—— Matlab 与 Vivado 联合仿真 FIR 滤波器,fdatool工具箱_第12张图片
matlab与FPGA数字滤波器设计、无线通信、FPGA数字信号处理系列(3)—— Matlab 与 Vivado 联合仿真 FIR 滤波器,fdatool工具箱_第13张图片
(4)Matlab数据分析
肉眼观察时域的仿真图无法得知高频噪声具体被滤掉了多少,是否还混有噪声,此时需要将滤波后的数据按照类似前文读取仿真数据的方式,将仿真得到的滤波后的数据写入 .txt 文件再通过 matlab 读取 FPGA 滤波后的数据进行FFT 频谱分析通过频域的波形来观察滤波效果,通过 matlab 仿真,可以看到高频信号的确被滤除。
matlab与FPGA数字滤波器设计、无线通信、FPGA数字信号处理系列(3)—— Matlab 与 Vivado 联合仿真 FIR 滤波器,fdatool工具箱_第14张图片
matlab与FPGA数字滤波器设计、无线通信、FPGA数字信号处理系列(3)—— Matlab 与 Vivado 联合仿真 FIR 滤波器,fdatool工具箱_第15张图片
下一讲 使用两个 DDS 产生待滤波的信号,结合FIR滤波器搭建一个信号产生及滤波的系统,并编写 testbench进行仿真分析。

matlab与FPGA无线通信(1)——通过matlab的fdatool工具箱设计FIR滤波器

matlab与FPGA无线通信(2)——Vivado调用IP核设计FIR滤波器

matlab与FPGA无线通信(4)—— Vivado DDS 与 FIR IP核设计 FIR 滤波器系统

MATLAB 与 FPGA无线通信、图像处理、数字信号处理系列 汇总

欢迎关注
matlab与FPGA数字滤波器设计、无线通信、FPGA数字信号处理系列(3)—— Matlab 与 Vivado 联合仿真 FIR 滤波器,fdatool工具箱_第16张图片

你可能感兴趣的:(FPGA,MATLAB,FIR滤波器)