当前位置: 首页 > news >正文

闲庭信步使用SV搭建图像测试平台:第二十九课——绘制正弦波的图片

  (本系列只需要modelsim即可完成数字图像的处理,每个工程都搭建了全自动化的仿真环境,只需要双击文件就可以完成整个的仿真,大大降低了初学者的门槛!!!!如需要该系列的工程文件请关注知识星球:成工fpga,关注即送200GB学习资料,链接已置顶!)

如果有一组正弦波的数据,怎么能够凭空绘制出一副正弦波的图片呢?当然很多人会说可以使用matlab或者python,用plot可以很方便的绘制图片。但是我们这个教程只能使用modelsim,大家有没有思路?其实如果看过成工前面的课程,绘制直方图的那篇,大家可能会有一些思路,那篇也是根据一组直方图的数据,凭空画出来的直方图图片。

首先我们要有一组正弦波的数据,当然我们也可以采用cordic算法来生成一组正弦波数据,这不是本系列的重点,我们直接给出一组正弦波的数据,如下所示。

有了数据,如何绘制图片呢?其实有两种方式,一种是根据纵向画图,一种是横向画图。先说说纵向画正弦波,就是每行绘制一个正弦波的数据,比如在第零行读取正弦波第一个数据0x7f,在列数为0x7f的位置绘制第一个点,在第一行读取正弦波的第二个数据0x82,在列数为0x82的位置绘制第二个点,以此类推,在第255行读取最后一个数据0x7c,在列数为0x7c的位置绘制第256个点,从第256行再从0开始循环绘制,可以想象,绘制的正弦波是纵向的,也就是说y轴是索引,x轴是正弦波的数值

其实我们常见的正弦是横向的,也就是x轴是索引,y轴是正弦的数值。如何画出横向的正弦波呢?那就要转换一下思路了,需要在每一行都把所有的正弦波数据循环读取,查询和当前行号一样的点绘制出来,比如第0行找出正弦波值为0的点的标号,在与标号对应的列绘制正弦波。

根据上面的思路可以绘制横向的正弦波,但是还有个问题,那就是绘制的正弦波比较靠下,而不是在图像中间的位置。因为正弦波的值为0,1,2等值时,第0,1,2等行已经绘制正弦波了。所以我们要设置一个整体的偏移,让正弦波往上偏移。这样就要在行号比较大的位置开始开始画正弦波,比如我们想在图片下面空出来100行,那就是从第101行开始绘制,由于正弦波最大值是255,所以只要行号加上正弦波的值大于255+100,也就是355即可,相当与把正弦波往上偏移了100行进行绘制

讲起来不太直观,我们直接在img_process_pkt包的image_process类中新建一个test_sin的task,如下所示,其中1039-1043是绘制方格线,便于观察。1044行实现了上面讲解的功能,之所以两部分取与是想让正弦波粗一些。

仿真文件tb_image_sim如下,设置新图片的参数,生成正弦波的图片,然后绘制图片。

最后我们双击sim文件夹下的top_tb.bat文件,完成系统的自动化仿真。

打开img文件夹,就可以看到新生成的图片,如下所示。

把task的1144行稍微修改一下就可以得到下面的图形,大家可以自己尝试一下。

上面两张图结合一下,用不同的颜色表示。

http://www.dtcms.com/a/266480.html

相关文章:

  • Android 实现底部弹窗
  • Datasophon的Ranger安装时数据库踩坑及问题解决
  • NeighborGeo:基于邻居的IP地理定位(三)
  • NeighborGeo:基于邻居的IP地理定位(二)
  • 【WEB】Polar靶场 6-10题 详细笔记
  • Jenkins-Email Extension 插件插件
  • 前端开发-前置知识
  • Android WebView 性能优化指南
  • Vue2中的keep-alive:组件状态缓存与性能优化实战指南
  • Android发展历程
  • Android 安装使用教程
  • [论文精读]StruQ: Defending Against Prompt Injection with Structured Queries
  • 前端捕获异常的全面场景及方法
  • 算法题目记录
  • OTC机器人焊机节气设备
  • EPLAN 电气制图:建立自己的部件库,添加部件-加SQL Server安装教程(三)上
  • web3钱包的运作原理
  • Type-C PD快充协议智能芯片S312L详解
  • GO 语言学习 之 结构体
  • mysql索引:索引应该选择哪种数据结构 B+树 MySQL中的页 页主体 页目录 索引分类
  • C++学习笔记一
  • Mac获取终端历史
  • Docker 部署 Prometheus 和 Grafana 监控 Spring Boot 服务
  • Java 与 MySQL 性能优化:MySQL全文检索查询优化实践
  • Rust+Blender:打造高性能游戏引擎
  • 宽表设计(Wide Table) 与 子表 + 类型 + 属性表设计(EAV 模型或“属性表”模型)
  • golang 中当 JSON 数据缺少结构体(struct)中定义的某些字段,会有异常吗
  • 【Modbus学习笔记】stm32实现Modbus
  • 类图+案例+代码详解:软件设计模式----单例模式
  • AI智能体革命:从ChatGPT到自主决策的技术演进