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
    +关注

    关注

    189

    文章

    3018

    浏览量

    237601
  • 仿真
    +关注

    关注

    53

    文章

    4407

    浏览量

    137671
  • fir滤波器
    +关注

    关注

    1

    文章

    97

    浏览量

    19627
  • Vivado
    +关注

    关注

    19

    文章

    846

    浏览量

    70475
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    求助,关于testbench仿真的问题求解

    我用c 写了一段加密算法,其中包含了S盒替换表和密钥等参数,现在想用vcs和testbench仿真这个程序,c 编译成机器码后怎么区分哪段数据是写入ITCM哪段是写入DTCM的,又应该怎么写入DTCM
    发表于 11-05 08:56

    语法纠错和testbench的自动生成

    编写Verilog代码时,我一般都是先在编辑器上写完,因为编辑器vscode或者notepad++可以提供语法高亮和自动补全等功能,然后用仿真器跑仿真,但是在编写过程中不可避免的会有
    发表于 10-27 07:07

    基于Matlab与FPGA的双边滤波算法实现

    前面发过中值、均值、高斯滤波的文章,这些只考虑了位置,并没有考虑相似度。那么双边滤波来了,既考虑了位置,有考虑了相似度,对边缘的保持比前几个好很多,当然实现上也是复杂很多。本文将从原理入手,采用Matlab与FPGA设计实现双边
    的头像 发表于 07-10 11:28 4081次阅读
    基于<b class='flag-5'>Matlab</b>与FPGA的双边<b class='flag-5'>滤波</b>算法实现

    无刷直流电机控制系统的建模仿真分析

    摘要:分析了BLDCM的数学模型,运用MATLAB仿真软件搭建了无刷直流电机控制系统的仿真模型。本系统采用了速度PID控制、电流迟滞控制的双闭环控制方案,电流迟滞控制是为了更方便地跟踪
    发表于 06-27 16:52

    罗德与施瓦茨方案:D波段射频宽带信号产生分析

    R&S D波段宽带信号产生分析方案,是市面上最为紧凑及易用的解决方案,信号源可直接对上变频器进行参数设定,频谱与
    的头像 发表于 06-16 14:46 1449次阅读
    罗德与施瓦茨方案:D波段射频宽带<b class='flag-5'>信号</b><b class='flag-5'>产生</b>与<b class='flag-5'>分析</b>

    利用MATLAB对交流电机调速系统进行建模和仿真

    技术是借助计算机及相关技术,对真实系统的运行过程和状态进行数字化模拟的技术。Simulink作为MATLAB的一个组件,能够实现对动态系统的建模、仿真和综合分析。本文在Simulink
    发表于 06-06 14:31

    基于 FPGA 的任意波形发生器+低通滤波器系统设计

    滤波信号,两个正弦波的频率分别是200Hz、800Hz。用MATLAB产生频率为500Hz的低通滤波
    发表于 05-07 15:34

    testbench中如何使用阻塞赋值和非阻塞赋值

    本文详细阐述了在一个testbench中,应该如何使用阻塞赋值与非阻塞赋值。首先说结论,建议在testbench中,对时钟信号(包括分频时钟)使用阻塞赋值,对其他同步信号使用非阻塞赋值
    的头像 发表于 04-15 09:34 1006次阅读
    在<b class='flag-5'>testbench</b>中如何使用阻塞赋值和非阻塞赋值

    如何用FOC电机控制MATLAB仿真

    )、电机与控制模块(蓝色方框)、控制信号给定模块(黄色方框)、信号分路与显示模块(绿色方框)。整体结构及功能介绍 用MATLAB2013以上版本打开文件,看到如图1所示界面:可以看到仿真
    发表于 03-28 14:51

    使用AFG31000系列信号发生器精准复制真实场景信号

    中的核心工具。本文将详细介绍如何利用该系列信号发生器复制复杂场景信号探讨其在不同领域的应用与优化技巧。   一、信号特性分析:复制真实
    的头像 发表于 03-20 11:45 599次阅读
    使用AFG31000系列<b class='flag-5'>信号</b>发生器精准复制真实场景<b class='flag-5'>信号</b>

    dac5681z用Matlab多次仿真,但是DAC出来的信号质量很差,是哪里的问题?

    大家好,我最近用xilinx 的ML605 Virtex6的开发板,DAC转换器用的是TI 的5681z,我产生信号中心频率大概是8M,带宽是3M左右的扫频信号,理论波形很好,用Matla
    发表于 02-08 08:24

    函数信号分析仪的原理和应用场景

    到频域,从而揭示信号的频率成分和能量分布。 信号采集:函数信号分析仪首先通过传感器或探头采集分析
    发表于 01-20 14:13

    做一个测量系统,信号输出阻抗很高,模拟前端怎么设计?

    我最近在做一个测量系统,信号输出阻抗很高,约为400K欧姆,输出频率40KHz,最大输出范围±50V。 我用10M欧姆电阻分压,再用运放跟随进行测量,测得直流分量衰减约5%,交流分量衰减很大
    发表于 12-25 07:19

    卡尔曼滤波信号处理中的应用分析

    卡尔曼滤波信号处理中的应用十分广泛,其强大的滤波和预测能力使其成为信号处理领域的一种重要工具。以下是对卡尔曼滤波
    的头像 发表于 12-16 09:14 3956次阅读

    Simulink与 MATLAB 的结合使用 Simulink中的信号处理方法

    被快速搭建和仿真MATLAB信号处理中的作用 MATLAB 是一个强大的数学计算工具,它提供了大量的内置函数和工具箱,用于信号的生成
    的头像 发表于 12-12 09:25 2193次阅读