说明

最近在学中频信号处理的一些东西,顺便用 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 绘制波形图、频谱图、瀑布图、星座图、眼图、语图相关推荐

  1. 2021-02-28 Matlab绘制短时傅里叶变换的频谱图和时间-频率-幅值三维图

    Matlab绘制短时傅里叶变换的频谱图和时间-频率-幅值三维图 function [t,frequency,f_spectrum]=fft_s(y,windowlength,Fs) % 输入 : % ...

  2. QT绘制嵌套的圆饼状图

    QT绘制嵌套的圆饼状图 项目简介 项目技术 项目展示 主要源码片段解析 获取完整项目源码传送门 项目简介 使用QPieSeries API创建嵌套的甜甜圈图. 项目技术 qt5.12,qt chart ...

  3. Python绘制卫星星下点轨迹图和卫星星座图

    目录 简介 卫星轨迹图展示 STARLINK-2300 IRIDIUM 180 GPS BIIF-12 BEIDOU 10 星历解算 代码示例 地图绘制 代码示例 卫星星座图绘制展示 starlink ...

  4. Qt绘制旋转的轮播图

    前言 目前见的比较多的轮播图有平移和旋转两种方式.平移类似淘宝那种切换幻灯片一样的效果,旋转一般是近大远小,看起来有点3D的感觉.本文代码实现旋转轮播图效果如下: 完整代码链接: https://gi ...

  5. matlab绘制星座图,怎么弄星座图:systemview 信号星座图怎么画

    systemview 信号 用接收计算器 matlab中怎么绘制星座图??? 看看这个程序是否符合你的要求:按下鼠标左键开始绘制一个星座图,点击右键结束当前星座function xingzuofigu ...

  6. 如何优雅地进行频谱分析—— 一行代码实现绘制MATLAB频谱、功率谱图

    之前的文章里讲了关于信号频谱.能量谱的相关理论和MATLAB编程实现方法: Mr.看海:信号频域分析方法的理解(频谱.能量谱.功率谱.倒频谱.小波分析) Mr.看海:频域特征值提取的MATLAB代码实 ...

  7. QT绘制面积图 QAreaSeries

    相关链接: QT绘制直方图BarChart QT绘制饼状图PieChart QT绘制曲线图SplineChart QT绘制散点图ScatterChart QT绘制折线图LineChart 0.创建ui ...

  8. 【181128】VC++ 实现绘制波形图动态图源代码

    源码下载简介 VC++ 实现绘制波形图动态图,类似示波器的界面,信号用正弦信号模拟,可调节显示的幅度档和时间档,可对信号进行暂停观测,可上下左右移动信号波形. 源码下载地址:点击下载 备用下载地址:点 ...

  9. matlab 画qpsk眼图,qpsk调制星座图:通信里 星座图 到底是什么意思

    通信里 一个星座点对应一个 qpsk和0qpsk星座图的不同代表了什么 亲切有礼,感情丰富.细腻,有很强的感受力,具有母性的博爱之心,但情绪起伏. QPSK.OQPSK. Pi/4 QPSK的星座图和 ...

最新文章

  1. android 虚拟机快捷键中英列表
  2. Yen 的k_shortest paths 算法的C++实现
  3. expdp impdp中 exclude/include 的使用
  4. 计算机秋招必备!上海互联网大厂企业整理清单!
  5. “约见”面试官系列之常见面试题之第八十篇之css常见属性(建议收藏)
  6. idea数据库反向生成实体类_IntelliJ IDEA 的数据库管理工具实在太方便了
  7. 《人月神话》读后感1
  8. SQL SERVER 用户自定义函数如何定义.
  9. Linux mysql
  10. 10个调试和排错的小建议
  11. Storm入门之第6章一个实际的例子
  12. MySQL 查询各科前三名(考虑成绩并列情况)
  13. 显示一个立方体的一点透视投影图;(用数组存放正方体的各顶点坐标)。
  14. HCIA网络基础7-VRP和命令行基础
  15. 英语日常短语积累(1)
  16. HTTP协议中的1xx,2xx,3xx,4xx,5xx状态码分别表示什么,列举常见错误码及含义
  17. 交通行业大数据应用和发展现状
  18. 从数据库当中读取Double类型数据,数值过大时会变成科学计数法问题解决方案
  19. Parameter 'arg0' not found. Available parameters are [xxx, xxx, param1, param2]
  20. golang 连接mysql 的时间参数loc, parseTime

热门文章

  1. 《Imperfect C++》译序[已出版]
  2. Scripting Xilinx® ISE™ using Tcl
  3. java在Linux下写文件
  4. Java IO:File类方法简介
  5. 模治具ERP系统不稳定的3大外部因素
  6. 211大学 计算机-软件工程专业保研经历 同济、南大、复旦
  7. [矩阵论] Unit 2. Jordan 标准形介绍 - 知识点整理
  8. 如何成为TD 系列【1】--在maya中进行python编辑准备
  9. Retrofit 协程 下载
  10. 钙钛矿量子点FAPbI/CsPbI3 QD 锐钛矿二氧化钛奈米晶体(HD1-HD5)