0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

使用matlab产生待滤波信号并编写testbench进行仿真分析

Hx 来源:CSDN技术社区 作者:DengFengLai123 2021-04-27 18:18 次阅读

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

本例使用上一讲的FIR滤波器IP核工程。

matlab与FPGA数字滤波器设计(2)——Vivado调用IP核设计FIR滤波器

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

100063647-127709-tu_1.png

1. 新建仿真文件

(1) Simulation Sources -》 sim_1 -》右键 Add Sources;

(2) Add or Create Simulation Sources,新建仿真文件 fir_ip_tb;

100063647-127710-tu_2.png

2. 编写testbench

(1) 例化加入的IP核,其中:

输入时钟引脚为 clk,设置为32MHz(此处暂时还未设定频率);

输入数据引脚为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核输入的数据目前只有两个,一个是时钟,一个是待滤波数据。

100063647-127711-tu_3.png

(2) 产生32MHz时钟信号;

初始 initial 时设置时钟信号clk为低电平0,always 表示一直执行,#16表示每隔16 ns(单位是在仿真文件开头自动有定义ns)时钟取反一次,即每隔 16ns 时钟 0/1间隔变化,相当于32ns一个时钟周期,约等于32MHz;

100063647-127712-tu_4.png

3. 产生待滤波数据data_in

(1) 编写matlab程序,产生两个信号0.5MHz和5MHz,采样频率32MHz,采样5个周期,进行16-bit量化,并把量化后的数据写到 .txt 文件中;

100063647-127713-tu_5.png

可以看到,在 0.5MHz 和 5MHz处有两个峰,表示抽样后的两个信号,经过滤波器之后,5MHz 信号被滤除,只剩下 0.5MHz 信号,蓝色框内可以看到,在 3MHz 以后滤波器的响应已经低于 -80dB,相当于滤波后的幅度是滤波前的1/10000,滤波效果很好。

100063647-127714-tu_6.png

使用 32MHz 的采样时钟采样 0.5MHz 待滤波信号(相当于0.5MHz信号叠加了5MHz噪声),每个周期采样 64 个点,在testbench中读取一个周期的64个点,重复30个周期得到30个周期的输入待滤波信号给FIR滤波器;

100063647-127715-tu_7.png

4. 仿真结果分析

点击1处开始仿真,Vivado中一般默认只会仿真1us,这时候只看到了初始化的一部分,是看不到后续结果的,点击2处进行仿真,会将所有的仿真步骤完成,执行到上图中第64行的 $stop 语句停止仿真;

100063647-127716-tu_8.png

5. 仿真结果分析

(1) data_out_valid:初始为0,在1.872 ns跳变为1,输出数据开始有效,在为0的那段时间输出数据data_out无效,这段时间内是FIR的IP核进行一些内部的配置和初始化;

100063647-127717-tu_9.png

(2) 更改数据表示模式

对data_in,右键设置其数据格式Radix为有符号的十进制数(Signed Decimal),设置其波形为模拟波形(Analog);

对 data_out 同样设置;

对 Pattern 设置 无符号十进制,不需要设置波形。

100063647-127718-tu_10.png

(3) 点击放大缩小可以查看整个仿真的效果

通过下面几图,可以看到仿真效果很好,5MHz高频噪声滤除干净,肉眼观察不出来。

100063647-127719-tu_11.png

100063647-127720-tu_12.png

100063647-127721-tu_13.png

(4) Matlab数据分析

肉眼观察时域的仿真图无法得知高频噪声具体被滤掉了多少,是否还混有噪声,此时需要将滤波后的数据按照前文读取仿真数据的方式,将仿真得到的滤波后的数据写入.txt文件,再通过 matlab 读取 FPGA 滤波后的数据并进行FFT 频谱分析,通过频域的波形来观察滤波效果,通过 matlab 仿真,可以看到高频信号的确被滤除。

100063647-127722-tu_14.png

100063647-127723-tu_15.png

下一讲使用两个 DDS 产生待滤波的信号,结合FIR滤波器搭建一个信号产生及滤波的系统,并编写testbench进行仿真分析。
编辑:lyn

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • matlab
    +关注

    关注

    175

    文章

    2924

    浏览量

    228465
  • 仿真
    +关注

    关注

    50

    文章

    3872

    浏览量

    132167
  • fir滤波器
    +关注

    关注

    1

    文章

    92

    浏览量

    18717
  • Vivado
    +关注

    关注

    18

    文章

    790

    浏览量

    65107
收藏 人收藏

    评论

    相关推荐

    FPGA入门必备:Testbench仿真文件编写实例详解

    编写完HDL代码后,往往需要通过仿真软件Modelsim或者Vivadao自带的仿真功能对HDL代码功能进行验证,此时我们需要编写
    发表于 04-29 10:43 38次阅读

    请问一下spice仿真怎么产生时钟信号呢?

    SPICE是一种用于模拟和分析电子电路的计算机程序。在SPICE仿真中,产生时钟信号是许多电路设计和模拟任务中的关键步骤。
    的头像 发表于 02-06 14:22 339次阅读

    AD5933相移必须是由信号通过网络而产生的才能准确算出测阻抗吗?

    AD5933产生的正弦信号通过阻抗网络产生了相移后,再通过IV转换输入给芯片,并在芯片内部做DFT运算。请问这个相移必须是由信号通过网络而产生
    发表于 01-08 12:17

    testbench编写基本结构

    testbench编写基本结构
    发表于 09-28 17:43

    VHDL与Verilog硬件描述语言TestBench编写

    小的设计中,用TestBench进行仿真是一个很不错的选择。VHDL与Verilog语言的语法规则不同,它们的TestBench的具体写法也不同,但是应包含的基本结构大体相似,在VH
    的头像 发表于 09-09 10:16 895次阅读
    VHDL与Verilog硬件描述语言<b class='flag-5'>TestBench</b>的<b class='flag-5'>编写</b>

    【verilog每日一练】testbench编写基本结构

    根据如下模块,编写对应的testbench文件
    发表于 09-08 10:35

    Verilog Testbench怎么写 Verilog Testbench文件的编写要点

    熟练了一点、但是整体编写下来比较零碎不成体系,所以在这里简要记录一下一般情况下、针对小型的verilog模块进行测试时所需要使用到的testbench文件的编写要点。
    的头像 发表于 08-01 12:44 1515次阅读
    Verilog <b class='flag-5'>Testbench</b>怎么写 Verilog <b class='flag-5'>Testbench</b>文件的<b class='flag-5'>编写</b>要点

    matlab仿真原理 matlab仿真的用法

      Matlab Simulink仿真工具的APP应用程序Simulink是用于动态系统建模、仿真分析的软件包。 使用Simulink对各种动态系统(包括连续系统、离散系统和混合系统
    发表于 07-19 10:58 1次下载

    matlab信号进行傅里叶变换

    傅氏变换分析信号分析中很重要的方法,借助matlab可以很方便的对各类信号进行傅氏频域
    的头像 发表于 07-19 10:10 1362次阅读
    用<b class='flag-5'>matlab</b>对<b class='flag-5'>信号</b><b class='flag-5'>进行</b>傅里叶变换

    MATLAB语言编程方法 MATLAB实现信号通过系统的仿真

    实现信号通过系统的仿真方法。  实验任务  1、利用MATLAB指令完成对图三系统的频域分析,结合实验三所得xinhao1信号的频谱特征,说
    发表于 07-18 16:51 0次下载

    语音信号设计方案 MATLAB语音信号分析与处理

      1.课程设计目的  综合运用数字信号处理的理论知识对语音信号进行时频分析滤波器设计,通过理论推导得出相应结论,再利用
    发表于 07-18 14:52 19次下载

    testbench是什么? testbench测试的机制是什么?

    废话不多说直接上干货,testbench就是对写的FPGA文件进行测试的文件,可以是verilog也可以是VHDL。
    的头像 发表于 06-28 16:44 2275次阅读
    <b class='flag-5'>testbench</b>是什么? <b class='flag-5'>testbench</b>测试的机制是什么?

    Matlab/Simulink中进行永磁同步电机流频比I/F控制系统的仿真分析

    本章节采用流频比I/F控制方法驱动永磁同步电机的转动,首先分析流频比I/F的控制原理,然后在Matlab/Simulink中进行永磁同步电机流频比I/F控制系统的仿真
    发表于 06-08 15:31 712次阅读
    在<b class='flag-5'>Matlab</b>/Simulink中<b class='flag-5'>进行</b>永磁同步电机流频比I/F控制系统的<b class='flag-5'>仿真</b><b class='flag-5'>分析</b>

    基于扩展卡尔曼滤波EKF的无感控制+Matlab/Simulink仿真案例

    本章节采用扩展卡尔曼滤波进行永磁同步电机的无传感器控制,首先分析了扩展卡尔曼滤波的原理,然后基于扩展卡尔曼滤波对PMSM
    发表于 06-08 14:42 2687次阅读
    基于扩展卡尔曼<b class='flag-5'>滤波</b>EKF的无感控制+<b class='flag-5'>Matlab</b>/Simulink<b class='flag-5'>仿真</b>案例

    如何用MATLAB进行电路仿真

    本文演示如何用MATLAB进行电路仿真,测量RLC电路的电压。我用的是R2014a,不同版本软件界面稍有差别。
    的头像 发表于 05-26 09:47 3123次阅读
    如何用<b class='flag-5'>MATLAB</b><b class='flag-5'>进行</b>电路<b class='flag-5'>仿真</b>?