主頁 > 後端開發 > QT 繪制波形圖、頻譜圖、瀑布圖、星座圖、眼圖、語圖

QT 繪制波形圖、頻譜圖、瀑布圖、星座圖、眼圖、語圖

2023-05-29 07:46:15 後端開發

說明

最近在學中頻信號處理的一些東西,順便用 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() 直接對原始繪圖資料所在的記憶體塊進行操作,提升資料更新的速度,主界面如下:

Oh Shit!-圖片走丟了-打個廣告-歡迎來博客園關注“木三百川”


2. 時域波形圖

測驗信號:2FSK 調制,調制速率 8888 Baud/s,采樣率 284416 Hz,信號頻率 62216 Hz 與 79992Hz,檔案大小 64 MB,波形顯示時做了貝塞爾平滑處理,

Oh Shit!-圖片走丟了-打個廣告-歡迎來博客園關注“木三百川”


3. 幅度譜

測驗信號:2FSK 調制,調制速率 8888 Baud/s,采樣率 284416 Hz,信號頻率 62216 Hz 與 79992Hz,檔案大小 64 MB,

Oh Shit!-圖片走丟了-打個廣告-歡迎來博客園關注“木三百川”


4. 功率譜

測驗信號:2FSK 調制,調制速率 8888 Baud/s,采樣率 284416 Hz,信號頻率 62216 Hz 與 79992Hz,檔案大小 64 MB,

Oh Shit!-圖片走丟了-打個廣告-歡迎來博客園關注“木三百川”


5. 二次方譜

測驗信號:8PSK 調制,調制速率 8888 Baud/s,采樣率 284416 Hz,載波頻率 71104 Hz,檔案大小 64 MB,

Oh Shit!-圖片走丟了-打個廣告-歡迎來博客園關注“木三百川”


6. 四次方譜

測驗信號:8PSK 調制,調制速率 8888 Baud/s,采樣率 284416 Hz,載波頻率 71104 Hz,檔案大小 64 MB,

Oh Shit!-圖片走丟了-打個廣告-歡迎來博客園關注“木三百川”


7. 八次方譜

測驗信號:8PSK 調制,調制速率 8888 Baud/s,采樣率 284416 Hz,載波頻率 71104 Hz,檔案大小 64 MB,

Oh Shit!-圖片走丟了-打個廣告-歡迎來博客園關注“木三百川”


8. 瞬時包絡

測驗信號:8PSK 調制,調制速率 8888 Baud/s,采樣率 284416 Hz,載波頻率 71104 Hz,檔案大小 64 MB,

Oh Shit!-圖片走丟了-打個廣告-歡迎來博客園關注“木三百川”


9. 瞬時頻率

測驗信號:2FSK 調制,調制速率 8888 Baud/s,采樣率 284416 Hz,信號頻率 62216 Hz 與 79992Hz,檔案大小 64 MB,

Oh Shit!-圖片走丟了-打個廣告-歡迎來博客園關注“木三百川”


10. 瞬時相位

測驗信號:8PSK 調制,調制速率 8888 Baud/s,采樣率 284416 Hz,載波頻率 71104 Hz,檔案大小 64 MB,

Oh Shit!-圖片走丟了-打個廣告-歡迎來博客園關注“木三百川”


11. 非線性瞬時相位

測驗信號:8PSK 調制,調制速率 8888 Baud/s,采樣率 284416 Hz,載波頻率 71104 Hz,檔案大小 64 MB,

Oh Shit!-圖片走丟了-打個廣告-歡迎來博客園關注“木三百川”


12. 瞬時幅度直方圖

測驗信號:8PSK 調制,調制速率 8888 Baud/s,采樣率 284416 Hz,載波頻率 71104 Hz,檔案大小 64 MB,

Oh Shit!-圖片走丟了-打個廣告-歡迎來博客園關注“木三百川”


13. 瞬時頻率直方圖

測驗信號:2FSK 調制,調制速率 8888 Baud/s,采樣率 284416 Hz,信號頻率 62216 Hz 與 79992Hz,檔案大小 64 MB,

Oh Shit!-圖片走丟了-打個廣告-歡迎來博客園關注“木三百川”


14. 瞬時相位直方圖

測驗信號:8PSK 調制,調制速率 8888 Baud/s,采樣率 284416 Hz,載波頻率 71104 Hz,檔案大小 64 MB,

Oh Shit!-圖片走丟了-打個廣告-歡迎來博客園關注“木三百川”


15. 眼圖

測驗信號:8PSK 調制,調制速率 8888 Baud/s,采樣率 284416 Hz,基帶信號,檔案大小 64 MB,

Oh Shit!-圖片走丟了-打個廣告-歡迎來博客園關注“木三百川”


16. 星座圖

測驗信號:8PSK 調制,調制速率 8888 Baud/s,采樣率 284416 Hz,載波頻率 71104 Hz,檔案大小 64 MB,

Oh Shit!-圖片走丟了-打個廣告-歡迎來博客園關注“木三百川”


17. 語譜圖

測驗信號:2FSK 調制,調制速率 8888 Baud/s,采樣率 284416 Hz,信號頻率 62216 Hz 與 79992Hz,檔案大小 64 MB,從計算到顯示總耗時不超過 1 秒,

Oh Shit!-圖片走丟了-打個廣告-歡迎來博客園關注“木三百川”


18. 瀑布圖

測驗信號:2FSK 調制,調制速率 8888 Baud/s,采樣率 284416 Hz,信號頻率 62216 Hz 與 79992Hz,檔案大小 64 MB,譜線為實時計算,由于 GIF 上傳大小限制為 5 MB,錄制為 GIF 時做了質量損失,

Oh Shit!-圖片走丟了-打個廣告-歡迎來博客園關注“木三百川”

Oh Shit!-圖片走丟了-打個廣告-歡迎來博客園關注“木三百川”

本文作者:木三百川

本文鏈接:https://www.cnblogs.com/young520/p/17438635.html

著作權宣告:本文系博主原創文章,著作權歸作者所有,商業轉載請聯系作者獲得授權,非商業轉載請附上出處鏈接,遵循 署名-非商業性使用-相同方式共享 4.0 國際版 (CC BY-NC-SA 4.0) 著作權協議,

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/553640.html

標籤:其他

上一篇:【VS Code+Qt6】拖放操作

下一篇:返回列表

標籤雲
其他(159868) Python(38178) JavaScript(25460) Java(18141) C(15232) 區塊鏈(8268) C#(7972) AI(7469) 爪哇(7425) MySQL(7214) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5873) 数组(5741) R(5409) Linux(5343) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4577) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2434) ASP.NET(2403) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) .NET技术(1977) 功能(1967) Web開發(1951) HtmlCss(1948) C++(1924) python-3.x(1918) 弹簧靴(1913) xml(1889) PostgreSQL(1878) .NETCore(1862) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【C++】Microsoft C++、C 和匯編程式檔案

    ......

    uj5u.com 2020-09-10 00:57:23 more
  • 例外宣告

    相比于斷言適用于排除邏輯上不可能存在的狀態,例外通常是用于邏輯上可能發生的錯誤。 例外宣告 Item 1:當函式不可能拋出例外或不能接受拋出例外時,使用noexcept 理由 如果不打算拋出例外的話,程式就會認為無法處理這種錯誤,并且應當盡早終止,如此可以有效地阻止例外的傳播與擴散。 示例 //不可 ......

    uj5u.com 2020-09-10 00:57:27 more
  • Codeforces 1400E Clear the Multiset(貪心 + 分治)

    鏈接:https://codeforces.com/problemset/problem/1400/E 來源:Codeforces 思路:給你一個陣列,現在你可以進行兩種操作,操作1:將一段沒有 0 的區間進行減一的操作,操作2:將 i 位置上的元素歸零。最終問:將這個陣列的全部元素歸零后操作的最少 ......

    uj5u.com 2020-09-10 00:57:30 more
  • UVA11610 【Reverse Prime】

    本人看到此題沒有翻譯,就附帶了一個自己的翻譯版本 思考 這一題,它的第一個要求是找出所有 $7$ 位反向質數及其質因數的個數。 我們應該需要質數篩篩選1~$10^{7}$的所有數,這里就不慢慢介紹了。但是,重讀題,我們突然發現反向質數都是 $7$ 位,而將它反過來后的數字卻是 $6$ 位數,這就說明 ......

    uj5u.com 2020-09-10 00:57:36 more
  • 統計區間素數數量

    1 #pragma GCC optimize(2) 2 #include <bits/stdc++.h> 3 using namespace std; 4 bool isprime[1000000010]; 5 vector<int> prime; 6 inline int getlist(int ......

    uj5u.com 2020-09-10 00:57:47 more
  • C/C++編程筆記:C++中的 const 變數詳解,教你正確認識const用法

    1、C中的const 1、區域const變數存放在堆疊區中,會分配記憶體(也就是說可以通過地址間接修改變數的值)。測驗代碼如下: 運行結果: 2、全域const變數存放在只讀資料段(不能通過地址修改,會發生寫入錯誤), 默認為外部聯編,可以給其他源檔案使用(需要用extern關鍵字修飾) 運行結果: ......

    uj5u.com 2020-09-10 00:58:04 more
  • 【C++犯錯記錄】VS2019 MFC添加資源不懂如何修改資源宏ID

    1. 首先在資源視圖中,添加資源 2. 點擊新添加的資源,復制自動生成的ID 3. 在解決方案資源管理器中找到Resource.h檔案,編輯,使用整個專案搜索和替換的方式快速替換 宏宣告 4. Ctrl+Shift+F 全域搜索,點擊查找全部,然后逐個替換 5. 為什么使用搜索替換而不使用屬性視窗直 ......

    uj5u.com 2020-09-10 00:59:11 more
  • 【C++犯錯記錄】VS2019 MFC不懂的批量添加資源

    1. 打開資源頭檔案Resource.h,在其中預先定義好宏 ID(不清楚其實ID值應該設定多少,可以先新建一個相同的資源項,再在這個資源的ID值的基礎上遞增即可) 2. 在資源視圖中選中專案資源,按F7編輯資源檔案,按 ID 型別 相對路徑的形式添加 資源。(別忘了先把檔案拷貝到專案中的res檔案 ......

    uj5u.com 2020-09-10 01:00:19 more
  • C/C++編程筆記:關于C++的參考型別,專供新手入門使用

    今天要講的是C++中我最喜歡的一個用法——參考,也叫別名。 參考就是給一個變數名取一個變數名,方便我們間接地使用這個變數。我們可以給一個變數創建N個參考,這N + 1個變數共享了同一塊記憶體區域。(參考型別的變數會占用記憶體空間,占用的記憶體空間的大小和指標型別的大小是相同的。雖然參考是一個物件的別名,但 ......

    uj5u.com 2020-09-10 01:00:22 more
  • 【C/C++編程筆記】從頭開始學習C ++:初學者完整指南

    眾所周知,C ++的學習曲線陡峭,但是花時間學習這種語言將為您的職業帶來奇跡,并使您與其他開發人員區分開。您會更輕松地學習新語言,形成真正的解決問題的技能,并在編程的基礎上打下堅實的基礎。 C ++將幫助您養成良好的編程習慣(即清晰一致的編碼風格,在撰寫代碼時注釋代碼,并限制類內部的可見性),并且由 ......

    uj5u.com 2020-09-10 01:00:41 more
最新发布
  • QT 繪制波形圖、頻譜圖、瀑布圖、星座圖、眼圖、語圖

    最近在學中頻信號處理的一些東西,順便用 QT 寫了一個小工具,可以顯示信號的時域波形圖、幅度譜、功率譜、二次方譜、四次方譜、八次方譜、瞬時包絡、瞬時頻率、瞬時相位、非線性瞬時相位、瞬時幅度直方圖、瞬時頻率直方圖、瞬時相位直方圖、眼圖、星座圖、語譜圖、瀑布圖。 ......

    uj5u.com 2023-05-29 07:46:15 more
  • 【VS Code+Qt6】拖放操作

    由于老周的示例代碼都是用 VS Code + CMake + Qt 寫的,為了不誤匯入,在標題中還是加上“VS Code”好一些。 上次咱們研究了剪貼板的基本用法,也了解了叫 QMimeData 的重要類。為啥要強調這個類?因為接下來扯到的拖放操作也是和它有關系。哦,對了,咱們先避開一下主題,關于剪 ......

    uj5u.com 2023-05-29 07:45:36 more
  • Python asyncio之協程學習總結

    ## 實踐環境 Python 3.6.2 ## 什么是協程 **協程**(Coroutine)一種電腦程式組件,該程式組件通過允許暫停和恢復任務,為非搶占式多任務生成子程式。**協程**也可以簡單理解為協作的程式,通過協同多任務處理實作并發的函式的變種(一種可以支持中斷的函式)。 下面,我們通過日常 ......

    uj5u.com 2023-05-29 07:45:19 more
  • Java 網路編程 —— 創建非阻塞的 HTTP 服務器

    ## HTTP 概述 HTTP 客戶程式必須先發出一個 HTTP 請求,然后才能接收到來自 HTTP 服器的回應,瀏覽器就是最常見的 HTTP 客戶程式。HTTP 客戶程式和 HTTP 服務器分別由不同的軟體開發商提供,它們都可以用任意的編程語言撰寫。HTTP 嚴格規定了 HTTP 請求和 HTTP ......

    uj5u.com 2023-05-29 07:45:07 more
  • 527訓練總結

    訓練內容:2023江西省賽VP 賽后總結: 比賽程序: 做了簽到以后純純開始坐牢...... 策略失誤: I題被定位成簽到題也過了十四個人,但是后續沒有花更多的時間去看,一直在鉆“如何存盤圖上路徑”的牛角尖,沒有往“存在巧妙解法”這個角度思考。另外寫dfs的假解法的程序中發現對vector的基本洗掉 ......

    uj5u.com 2023-05-29 07:45:03 more
  • FreeSWITCH添加自定義endpoint

    作業系統 :CentOS 7.6_x64 FreeSWITCH版本 :1.10.9 日常開發程序中會遇到需要擴展FreeSWITCH對接其它系統的情況,這里記錄下撰寫FreeSWITCH自定義endpoint的程序。 一、模塊定義函式 使用FreeSWITCH自帶的框架來定義模塊函式,函式指標及引數 ......

    uj5u.com 2023-05-29 07:44:41 more
  • 【python基礎】基本資料型別-字串型別

    # 1.初識字串 字串就是一系列字符。在python中,用引號括起來文本內容的都是字串。 其語法格式為:‘文本內容’或者“文本內容” 我們發現其中的引號可以是單引號,也可以是雙引號。這樣的靈活性可以使我們進行引號之間的嵌套。 撰寫程式如下所示: ![image](https://img2023 ......

    uj5u.com 2023-05-29 07:44:15 more
  • Rust Web 全堆疊開發之自建TCP、HTTP Server

    # Rust Web 全堆疊開發之自建TCP、HTTP Server ## 課程簡介 ### 預備知識 - Rust 編程語言入門 - https://www.bilibili.com/video/BV1hp4y1k7SV ### 課程主要內容 - WebService - 服務器端Web App - ......

    uj5u.com 2023-05-29 07:43:58 more
  • Python 標準類別庫-因特網資料處理之Base64資料編碼

    該模塊提供將二進制資料編碼為可列印ASCII字符并將這種編碼解碼回二進制資料的功能。它為[RFC 3548](https://tools.ietf.org/html/rfc3548.html)中指定的編碼提供編碼和解碼功能。定義了Base16、Base32和Base64演算法,以及事實上的標準Asci ......

    uj5u.com 2023-05-29 07:43:47 more
  • 關于STL容器的簡單總結

    # 關于STL容器的簡單總結 ## 1、結構體中多載運算子的示例 ``` //結構體小于符號的多載 struct buf { int a,b; bool operator queuea; //定義 a.push(x); //壓入 a.pop(); //彈出 a.size(); //取大小 a.fro ......

    uj5u.com 2023-05-29 07:43:38 more