QT 绘制波形图、频谱图、瀑布图、星座图、眼图、语图
说明
最近在学中频信号处理的一些东西,顺便用 QT 写了一个小工具,可以显示信号的时域波形图、幅度谱、功率谱、二次方谱、四次方谱、八次方谱、瞬时包络、瞬时频率、瞬时相位、非线性瞬时相位、瞬时幅度直方图、瞬时频率直方图、瞬时相位直方图、眼图、星座图、语谱图、瀑布图。
文章目录
- 说明
- 1. 实现思路
- 2. 时域波形图
- 3. 幅度谱
- 4. 功率谱
- 5. 二次方谱
- 6. 四次方谱
- 7. 八次方谱
- 8. 瞬时包络
- 9. 瞬时频率
- 10. 瞬时相位
- 11. 非线性瞬时相位
- 12. 瞬时幅度直方图
- 13. 瞬时频率直方图
- 14. 瞬时相位直方图
- 15. 眼图
- 16. 星座图
- 17. 语谱图
- 18. 瀑布图
1. 实现思路
工具为纯 C++ 开发,包括频谱计算以及图像可视化。这里简述下实现思路,使用到了以下第三方库:
- QCustomPlot 绘图库。
- FFTW 傅氏变换库。
- FreeGlut 工具包。
频谱计算部分,通过调用 FFTW 的 C++ 接口,同时开启 OpenMP 多核支持,可以获得很快的计算速度,比 MATLAB 还快,工具中的所有频谱都是在点击按钮时现算的。在我的电脑上(8 核 Intel i7-6700HQ CPU @ 2.60GHz),实测对 33554432 长度(2 的 25 次方)的双精度浮点数组进行傅里叶变换,两种方式的耗时如下:
- MATLAB 的
fft
函数耗时 629 毫秒。 - C++ 调用 FFTW 接口并开启 OpenMP 多核支持,耗时 390 毫秒。
图像可视化部分,使用 QCustomPlot 完成图像绘制,并结合 FreeGlut 工具开启 OpenGL 支持,绘图质量及响应速度也得到了较好的提升,大数据显示并进行交互时不会出现卡顿。为了进一步提升速度,还修改了 QCustomPlot 的部分源码,将数据更新接口暴露出来,使用 memcpy()
直接对原始绘图数据所在的内存块进行操作,提升数据更新的速度。主界面如下:
2. 时域波形图
测试信号:2FSK 调制,调制速率 8888 Baud/s,采样率 284416 Hz,信号频率 62216 Hz 与 79992Hz,文件大小 64 MB。波形显示时做了贝塞尔平滑处理。
3. 幅度谱
测试信号:2FSK 调制,调制速率 8888 Baud/s,采样率 284416 Hz,信号频率 62216 Hz 与 79992Hz,文件大小 64 MB。
4. 功率谱
测试信号:2FSK 调制,调制速率 8888 Baud/s,采样率 284416 Hz,信号频率 62216 Hz 与 79992Hz,文件大小 64 MB。
5. 二次方谱
测试信号:8PSK 调制,调制速率 8888 Baud/s,采样率 284416 Hz,载波频率 71104 Hz,文件大小 64 MB。
6. 四次方谱
测试信号:8PSK 调制,调制速率 8888 Baud/s,采样率 284416 Hz,载波频率 71104 Hz,文件大小 64 MB。
7. 八次方谱
测试信号:8PSK 调制,调制速率 8888 Baud/s,采样率 284416 Hz,载波频率 71104 Hz,文件大小 64 MB。
8. 瞬时包络
测试信号:8PSK 调制,调制速率 8888 Baud/s,采样率 284416 Hz,载波频率 71104 Hz,文件大小 64 MB。
9. 瞬时频率
测试信号:2FSK 调制,调制速率 8888 Baud/s,采样率 284416 Hz,信号频率 62216 Hz 与 79992Hz,文件大小 64 MB。
10. 瞬时相位
测试信号:8PSK 调制,调制速率 8888 Baud/s,采样率 284416 Hz,载波频率 71104 Hz,文件大小 64 MB。
11. 非线性瞬时相位
测试信号:8PSK 调制,调制速率 8888 Baud/s,采样率 284416 Hz,载波频率 71104 Hz,文件大小 64 MB。
12. 瞬时幅度直方图
测试信号:8PSK 调制,调制速率 8888 Baud/s,采样率 284416 Hz,载波频率 71104 Hz,文件大小 64 MB。
13. 瞬时频率直方图
测试信号:2FSK 调制,调制速率 8888 Baud/s,采样率 284416 Hz,信号频率 62216 Hz 与 79992Hz,文件大小 64 MB。
14. 瞬时相位直方图
测试信号:8PSK 调制,调制速率 8888 Baud/s,采样率 284416 Hz,载波频率 71104 Hz,文件大小 64 MB。
15. 眼图
测试信号:8PSK 调制,调制速率 8888 Baud/s,采样率 284416 Hz,基带信号,文件大小 64 MB。
16. 星座图
测试信号:8PSK 调制,调制速率 8888 Baud/s,采样率 284416 Hz,载波频率 71104 Hz,文件大小 64 MB。
17. 语谱图
测试信号:2FSK 调制,调制速率 8888 Baud/s,采样率 284416 Hz,信号频率 62216 Hz 与 79992Hz,文件大小 64 MB。从计算到显示总耗时不超过 1 秒。
18. 瀑布图
测试信号:2FSK 调制,调制速率 8888 Baud/s,采样率 284416 Hz,信号频率 62216 Hz 与 79992Hz,文件大小 64 MB。谱线为实时计算。由于 GIF 上传大小限制为 5 MB,录制为 GIF 时做了质量损失。
QT 绘制波形图、频谱图、瀑布图、星座图、眼图、语图相关推荐
- 2021-02-28 Matlab绘制短时傅里叶变换的频谱图和时间-频率-幅值三维图
Matlab绘制短时傅里叶变换的频谱图和时间-频率-幅值三维图 function [t,frequency,f_spectrum]=fft_s(y,windowlength,Fs) % 输入 : % ...
- QT绘制嵌套的圆饼状图
QT绘制嵌套的圆饼状图 项目简介 项目技术 项目展示 主要源码片段解析 获取完整项目源码传送门 项目简介 使用QPieSeries API创建嵌套的甜甜圈图. 项目技术 qt5.12,qt chart ...
- Python绘制卫星星下点轨迹图和卫星星座图
目录 简介 卫星轨迹图展示 STARLINK-2300 IRIDIUM 180 GPS BIIF-12 BEIDOU 10 星历解算 代码示例 地图绘制 代码示例 卫星星座图绘制展示 starlink ...
- Qt绘制旋转的轮播图
前言 目前见的比较多的轮播图有平移和旋转两种方式.平移类似淘宝那种切换幻灯片一样的效果,旋转一般是近大远小,看起来有点3D的感觉.本文代码实现旋转轮播图效果如下: 完整代码链接: https://gi ...
- matlab绘制星座图,怎么弄星座图:systemview 信号星座图怎么画
systemview 信号 用接收计算器 matlab中怎么绘制星座图??? 看看这个程序是否符合你的要求:按下鼠标左键开始绘制一个星座图,点击右键结束当前星座function xingzuofigu ...
- 如何优雅地进行频谱分析—— 一行代码实现绘制MATLAB频谱、功率谱图
之前的文章里讲了关于信号频谱.能量谱的相关理论和MATLAB编程实现方法: Mr.看海:信号频域分析方法的理解(频谱.能量谱.功率谱.倒频谱.小波分析) Mr.看海:频域特征值提取的MATLAB代码实 ...
- QT绘制面积图 QAreaSeries
相关链接: QT绘制直方图BarChart QT绘制饼状图PieChart QT绘制曲线图SplineChart QT绘制散点图ScatterChart QT绘制折线图LineChart 0.创建ui ...
- 【181128】VC++ 实现绘制波形图动态图源代码
源码下载简介 VC++ 实现绘制波形图动态图,类似示波器的界面,信号用正弦信号模拟,可调节显示的幅度档和时间档,可对信号进行暂停观测,可上下左右移动信号波形. 源码下载地址:点击下载 备用下载地址:点 ...
- matlab 画qpsk眼图,qpsk调制星座图:通信里 星座图 到底是什么意思
通信里 一个星座点对应一个 qpsk和0qpsk星座图的不同代表了什么 亲切有礼,感情丰富.细腻,有很强的感受力,具有母性的博爱之心,但情绪起伏. QPSK.OQPSK. Pi/4 QPSK的星座图和 ...
最新文章
- android 虚拟机快捷键中英列表
- Yen 的k_shortest paths 算法的C++实现
- expdp impdp中 exclude/include 的使用
- 计算机秋招必备!上海互联网大厂企业整理清单!
- “约见”面试官系列之常见面试题之第八十篇之css常见属性(建议收藏)
- idea数据库反向生成实体类_IntelliJ IDEA 的数据库管理工具实在太方便了
- 《人月神话》读后感1
- SQL SERVER 用户自定义函数如何定义.
- Linux mysql
- 10个调试和排错的小建议
- Storm入门之第6章一个实际的例子
- MySQL 查询各科前三名(考虑成绩并列情况)
- 显示一个立方体的一点透视投影图;(用数组存放正方体的各顶点坐标)。
- HCIA网络基础7-VRP和命令行基础
- 英语日常短语积累(1)
- HTTP协议中的1xx,2xx,3xx,4xx,5xx状态码分别表示什么,列举常见错误码及含义
- 交通行业大数据应用和发展现状
- 从数据库当中读取Double类型数据,数值过大时会变成科学计数法问题解决方案
- Parameter 'arg0' not found. Available parameters are [xxx, xxx, param1, param2]
- golang 连接mysql 的时间参数loc, parseTime
热门文章
- 《Imperfect C++》译序[已出版]
- Scripting Xilinx® ISE™ using Tcl
- java在Linux下写文件
- Java IO:File类方法简介
- 模治具ERP系统不稳定的3大外部因素
- 211大学 计算机-软件工程专业保研经历 同济、南大、复旦
- [矩阵论] Unit 2. Jordan 标准形介绍 - 知识点整理
- 如何成为TD 系列【1】--在maya中进行python编辑准备
- Retrofit 协程 下载
- 钙钛矿量子点FAPbI/CsPbI3 QD 锐钛矿二氧化钛奈米晶体(HD1-HD5)