GNU Radio創建時間戳 C++ OOT塊

文章目錄

  • 前言
  • 一、創建自定義的 C++ OOT 塊
    • 1、創建 timestamp_sender C++ OOT 模塊
      • ①、創建 timestamp_sender OOT 塊
      • ②、修改 C++ 代碼
    • 2、創建 timestamp_receiver C++ OOT 模塊
      • ①、創建 timestamp_receiver OOT 塊
      • ②、修改 C++ 代碼
    • 3、創建 delayMicroSec C++ OOT 模塊
      • ①、創建 delayMicroSec OOT 塊
      • ②、修改 C++ 代碼
  • 二、編譯及安裝 OOT 塊
  • 三、測試
    • 1、grc 圖
    • 2、運行結果
  • 四、資源自取


前言

目前有這么樣一個需求,我想在 GNU Radio 中計算從一個模塊到其他模塊執行所花費的時間,我的做法是將獲取的時間戳信息作為標簽添加到數據流中,然后傳入到待計算時間的那個模塊后再獲取當前時間并與流標簽中的時間戳信息進行相減,即可得到所耗費的時間,也就達到了計算時間間隔的目的。

因此本文將創建紅框內的三個 C++ OOT塊,實現時間測量。

在這里插入圖片描述


一、創建自定義的 C++ OOT 塊

參考官方教程 Creating C++ OOT with gr-modtool 創建自定義的 OOT塊

1、創建 timestamp_sender C++ OOT 模塊

可以參考我之前的博客內容,做法都是差不多的:GNU Radio創建Zadoff-Chu序列C++ OOT塊

詳細代碼及配置文件文末自取

①、創建 timestamp_sender OOT 塊

gr_modtool newmod myModule 
cd gr-myModule 
gr_modtool add timestamp_sender

當讓你輸入模塊類型時,選擇 sync

Enter block type: sync

當讓你輸入參數時,按照如下方式輸入:

Enter valid argument list, including default arguments: 
size_t itemsize

②、修改 C++ 代碼

修改 gr-myModule/lib/ 目錄下的 timestamp_sender_impl.cctimestamp_sender_impl.h 文件和 gr-myModule/grc/ 目錄下的配置文件myModule_timestamp_sender_impl.block.yml

timestamp_sender_impl.cc 核心部分程序:

auto now = std::chrono::high_resolution_clock::now();
// 返回自紀元(通常是1970年1月1日)以來的時間間隔, 獲取以微秒為單位的時間間隔值
auto now_us = std::chrono::duration_cast<std::chrono::microseconds>(now.time_since_epoch()).count();	// 以微秒(microseconds)為單位輸出// 創建標簽并添加時間戳
pmt::pmt_t key = pmt::string_to_symbol("timestamp");
pmt::pmt_t value = pmt::from_long(now_us);
add_item_tag(0, nitems_written(0), key, value);

timestamp_sender_impl.h 核心部分程序:

private:// Nothing to declare in this block.size_t d_itemsize;public:timestamp_sender_impl(size_t itemsize);~timestamp_sender_impl();void send_timestamp(pmt::pmt_t msg);

myModule_timestamp_sender_impl.block.yml 部分核心配置:

parameters:
-   id: typelabel: Typedtype: enumoptions: [complex, float, int, short, byte]option_attributes:size: [gr.sizeof_gr_complex, gr.sizeof_float, gr.sizeof_int, gr.sizeof_short,gr.sizeof_char]hide: part

2、創建 timestamp_receiver C++ OOT 模塊

①、創建 timestamp_receiver OOT 塊

gr_modtool newmod myModule 
cd gr-myModule 
gr_modtool add timestamp_receiver 

當讓你輸入模塊類型時,選擇 sync

Enter block type: sync

當讓你輸入參數時,按照如下方式輸入:

Enter valid argument list, including default arguments: 
size_t itemsize

②、修改 C++ 代碼

修改 gr-myModule/lib/ 目錄下的 timestamp_receiver_impl.cctimestamp_receiver_impl.h 文件和 gr-myModule/grc/ 目錄下的配置文件myModule_timestamp_receiver_impl.block.yml

timestamp_receiver_impl.cc 核心部分程序:

std::vector<tag_t> tags;
get_tags_in_window(tags, 0, 0, noutput_items);	// 獲取輸入樣本范圍內的所有標簽,并存儲在 tags 向量中for (const auto& tag : tags)					// 遍歷 tags 向量中的每個標簽
{calculate_delay(tag.key, tag.value);
}

timestamp_receiver_impl.h 核心部分程序:

private:size_t d_itemsize;void calculate_delay(const pmt::pmt_t& key, const pmt::pmt_t& value);

myModule_timestamp_receiver_impl.block.yml 部分核心配置:

parameters:
-   id: typelabel: Typedtype: enumoptions: [complex, float, int, short, byte]option_attributes:size: [gr.sizeof_gr_complex, gr.sizeof_float, gr.sizeof_int, gr.sizeof_short,gr.sizeof_char]hide: part

3、創建 delayMicroSec C++ OOT 模塊

①、創建 delayMicroSec OOT 塊

gr_modtool newmod myModule 
cd gr-myModule 
gr_modtool add delayMicroSec

當讓你輸入模塊類型時,選擇 sync

Enter block type: sync

當讓你輸入參數時,按照如下方式輸入:

Enter valid argument list, including default arguments: 
size_t itemsize, int delay_us

②、修改 C++ 代碼

修改 gr-myModule/lib/ 目錄下的 delayMicroSec_impl.ccdelayMicroSec_impl.h 文件和 gr-myModule/grc/ 目錄下的配置文件myModule_delayMicroSec_impl.block.yml

delayMicroSec_impl.cc 核心部分程序:

// 延時指定的微秒數,只在第一次時延遲
if (first_time) {// 延時指定的微秒數std::this_thread::sleep_for(std::chrono::microseconds(d_delay_us));first_time = false; // 重置標志位,后續不再延遲
}

delayMicroSec_impl.h 核心部分程序:

private:size_t d_itemsize;int d_delay_us;bool first_time;

myModule_delayMicroSec_impl.block.yml 部分核心配置:

parameters:
-   id: typelabel: Typedtype: enumoptions: [complex, float, int, short, byte]option_attributes:size: [gr.sizeof_gr_complex, gr.sizeof_float, gr.sizeof_int, gr.sizeof_short,gr.sizeof_char]hide: part
-   id: delay_uslabel: delay usdtype: intdefault: 0 

詳細代碼及配置文件文末自取

二、編譯及安裝 OOT 塊

1、上面創建的三個 OOT 塊需要編譯和安裝,確保目前位于 gr-myModule 目錄中:

cd gr-myModule

2、如果 build/ 目錄已存在,請將其刪除:

rm -rf build/

3、創建 build/ 目錄

mkdir build

4、進入 build 目錄

cd build/ 

5、運行 cmake 來構建 makefile

cmake ..

6、編譯模塊

make

7、安裝模塊

sudo make install

8、更新 myModule 庫的鏈接

sudo ldconfig 

三、測試

打開 gnuradio-companion

gnuradio-companion

可以看到安裝成功的模塊
在這里插入圖片描述

1、grc 圖

正弦波信號源通過限流器后傳遞給 timestamp_sender 模塊,timestamp_sender 將數據流附加上時間戳標簽后,通過延時模塊對信號延時 2s 后再將其傳遞至 timestamp_receiver 模塊,timestamp_receiver 模塊會計算所經歷的時間間隔,當計算完成后會向 timestamp_sender 模塊傳遞消息,告知 timestamp_sender 模塊模塊我目前已經計算完成,你可以繼續往數據流上面附加時間戳標簽方便我進行下次的計算。
在這里插入圖片描述

2、運行結果

首先可以看到正弦波信號時域波形圖附加著時間戳標簽(微秒)
在這里插入圖片描述
其次可以在console 端看到打印的時間間隔信息,為 2001073 us,大約為 2s,因為程序執行也需要一定的時間,當我們進行時間測量的時候,可以先將程序運行所需要的時間計算出來,并在計算時間間隔的時候減去這個值,以便計算的時間更加精準。
在這里插入圖片描述

四、資源自取

鏈接:GNU Radio創建時間戳 C++ OOT塊

在這里插入圖片描述


我的qq:2442391036,歡迎交流!


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/11819.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/11819.shtml
英文地址,請注明出處:http://en.pswp.cn/web/11819.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Vue3實戰筆記(20)—封裝頭部導航組件

文章目錄 前言一、封裝頭部導航欄二、使用步驟總結 前言 Vue 3 封裝頭部導航欄有助于提高代碼復用性、統一風格、降低維護成本、提高可配置性和模塊化程度&#xff0c;同時還可以實現動態渲染等功能&#xff0c;有利于項目開發和維護。 一、封裝頭部導航欄 封裝頭部導航欄&am…

HFSS學習-day4-建模操作

通過昨天的學習&#xff0c;我們已經熟悉了HFSS的工作環境&#xff1b;今天我們來講解HFSS中創建物體模型的縣體步驟和相關操作。物體建模是HFSS仿真設計工作的第一步&#xff0c;HFSS中提供了諸如矩形、圓面、長方體圓柱體和球體等多種基本模型(Primitive)&#xff0c;這些基本…

新書速覽|MATLAB科技繪圖與數據分析

提升你的數據洞察力&#xff0c;用于精確繪圖和分析的高級MATLAB技術。 本書內容 《MATLAB科技繪圖與數據分析》結合作者多年的數據分析與科研繪圖經驗&#xff0c;詳細講解MATLAB在科技圖表制作與數據分析中的使用方法與技巧。全書分為3部分&#xff0c;共12章&#xff0c;第1…

tp8 設置空控制器和空方法

1、空控制器 單應用模式下&#xff0c;我們可以給項目定義一個Error控制器類 <?phpnamespace app\controller;class Error {/*** 空控制器中重寫魔術方法__call可以實現自定義錯誤提示&#xff0c;在這里可以提示找不到控制器* 注意&#xff1a;在基礎控制器BaseControll…

精英都是時間控!職場精英的完美一天~~~谷歌FB都在用的時間管理術!

如何超高效使用24小時 每個人的一天都只有24小時&#xff0c;使用時間的方法將決定整個人生。時間管理術并不提倡把自己忙死榨干&#xff0c;而是通過在合適的時間做合適的事情&#xff0c;把大腦機能發揮到極致&#xff0c;從而提高效率&#xff0c;節省下更多時間用于生活與…

(項目)-KDE巡檢報告(模板

金山云于12月26日對建行共計【30】個KDE集群,合計【198】臺服務器進行了巡檢服務。共發現系統風險【135】條,服務風險【1912】條,服務配置風險【368】條。 一、系統風險 1、風險分析(圖片+描述) (1)磁盤使用率高 問題描述多個集群的多臺服務器磁盤使用率較高,遠超過…

答辯PPT模版如何選擇?aippt快速生成

這些網站我愿稱之為制作答辯PPT的神&#xff01; 很多快要畢業的同學在做答辯PPT的時候總是感覺毫無思路&#xff0c;一竅不通。但這并不是你們的錯&#xff0c;對于平時沒接觸過相關方面&#xff0c;第一次搞答辯PPT的人來說&#xff0c;這是很正常的一件事。一個好的答辯PPT…

右鍵使用VSCode打開文件/文件夾目錄

右鍵使用VSCode打開文件/文件夾目錄 使用新電腦或清空了注冊列表之后&#xff0c;點擊右鍵“使用vscode”打開文件夾消失了&#xff0c;可以通過更改注冊列表增加回來。 實現&#xff1a; 右鍵在目錄空白處使用vscode打開目錄右鍵-用vscode(當前窗口)打開文件或目錄 右鍵-用vs…

簡述RocketMQ系統架構及其相關概念

一、概述 RocketMQ是一款高性能、高吞吐量的分布式消息隊列系統&#xff0c;它采用了分布式架構&#xff0c;支持多生產者和消費者并發讀寫&#xff0c;具有高可用性、高吞吐量、低延遲等特點。本文將對RocketMQ的系統架構進行詳細解析。 二、架構設計 RocketMQ采用了分布式架…

入門物聯網就是這么簡單——青創智通

工業物聯網解決方案-工業IOT-青創智通 MQTT&#xff0c;全稱為Message Queuing Telemetry Transport&#xff0c;是一種輕量級的發布/訂閱消息傳輸協議&#xff0c;廣泛應用于物聯網領域。 MQTT協議以其高效、可靠、靈活的特性&#xff0c;成為物聯網設備間通信的理想選擇。本…

升級版ComfyUI InstantID 換臉:FaceDetailer + InstantID + IP-Adapter

在使用ComfyUI的InstantID進行人臉替換時&#xff0c;一個常見問題是該工具傾向于保留原始參考圖的構圖&#xff0c;即使用戶的提示詞與之不符。 例如&#xff0c;即使用戶提供的是大頭照并請求生成全身照&#xff0c;結果仍是大頭照&#xff0c;沒有顯示出用戶所期望的構圖。…

MySQL_DDL語句

1.Data類臨時數據的弊端 我們之前在將ServletJSP配合處理請求的過程中 數據庫起到一個存取數據的作用 但是我們之前的案例中 數據是在Data類中臨時定義的 并不是從數據庫中獲取的 這樣做是不好的 因為每一次服務器關閉之后 那么部署在其上的類也會隨著卸載 緊接著和類相掛鉤的靜…

基于C#開發web網頁管理系統模板流程-登錄界面

前言&#xff0c;首先介紹一下本項目將要實現的功能 &#xff08;一&#xff09;登錄界面 實現一個不算特別美觀的登錄窗口&#xff0c;當然這一步跟開發者本身的設計美學相關&#xff0c;像蒟蒻博主就沒啥藝術細胞&#xff0c;勉強能用能看就行…… &#xff08;二&#xff09…

使用Tkinter開發Python棋盤游戲

使用 Tkinter 開發一個簡單的棋盤游戲是很有趣的&#xff01;下面是一個示例&#xff0c;演示如何使用 Tkinter 創建一個簡單的五子棋游戲&#xff1a;這個是我通過幾個夜晚整理出來的解決方案和實際操作教程。 1、問題背景 目標是開發一個 Python 棋盤游戲&#xff0c;玩家可…

web測試中,各類web控件測試點總結

一、界面檢查 進入一個頁面測試&#xff0c;首先是檢查title&#xff0c;頁面排版&#xff0c;字段等&#xff0c;而不是馬上進入文本框校驗 1、頁面名稱title是否正確 2、當前位置是否可見 您的位置&#xff1a;xxx>xxxx 3、文字格式統一性 4、排版是否整齊 5、列表項…

【--ckpt_save_interval 1 -- sync_bn】

在深度學習和機器學習的上下文中&#xff0c;–ckpt_save_interval 1 和 --sync_bn 是命令行參數&#xff0c;它們通常用于配置訓練過程。 不過&#xff0c;這兩個參數并不是所有框架或工具都通用的&#xff0c;但我可以根據常見的用法來解釋它們。 --ckpt_save_interval 1這…

人力資源管理:員工體驗平臺設計

員工體驗是員工的感受&#xff0c;是員工作為企業一份子觀察到、感受到和與之互動的一切&#xff0c;包含企業為員工提供的物質條件、人文環境等各方面的內容。 是在工作過程中接觸到的所有接觸點所產生的對自己與用人單位關系的整體感知&#xff0c;員工體驗從員工入職開始貫…

使用Go和JavaScript爬取股吧動態信息的完整指南

引言 在現代金融生態系統中&#xff0c;信息流動的速度和效率對于市場的健康和投資者的成功至關重要。股市信息&#xff0c;特別是來自活躍交流平臺如股吧的實時數據&#xff0c;為投資者提供了一個獨特的視角&#xff0c;幫助他們洞察市場趨勢和投資者情緒。這些信息不僅能夠…

【MySQL】分組排序取每組第一條數據

需求&#xff1a;MySQL根據某一個字段分組&#xff0c;然后組內排序&#xff0c;最后每組取排序后的第一條數據。 準備表&#xff1a; CREATE TABLE t_student_score (id int(11) NOT NULL AUTO_INCREMENT COMMENT ID,stu_name varchar(32) NOT NULL COMMENT 學生姓名,course…

NumPy常用操作

目錄 一&#xff1a;簡介 二&#xff1a;NumPy 常用操作 三&#xff1a;總結 一&#xff1a;簡介 是一個開源的Python庫&#xff0c;它為Python提供了強大的多維數組對象和用于處理這些數組的函數。NumPy的核心是ndarray&#xff0c;它是一個高效的多維數組容器&#xff0c;用…