GNU Radio使用Python Block实现模块运行时间间隔获取

文章目录

  • 前言
  • 一、timestamp_sender 模块
  • 二、timestamp_receiver 模块
  • 三、测试


前言

GNU Radio 中没有实现测量两个模块之间的时间测量模块,本文记录一下通过 python block 制作一个很简单的测时 block。


一、timestamp_sender 模块

使用 python block 做一个发送端时间戳记录模块,并添加下面的代码:

"""
Embedded Python Blocks:Each time this file is saved, GRC will instantiate the first class it finds
to get ports and parameters of your block. The arguments to __init__  will
be the parameters. All of them are required to have default values!
"""import numpy as np
from gnuradio import gr
import time
import numpy as npclass timestamp_sender(gr.sync_block):  # other base classes are basic_block, decim_block, interp_block"""Embedded Python Block example - a simple multiply const"""def __init__(self):  # only default arguments here"""arguments to this function show up as parameters in GRC"""gr.sync_block.__init__(self,name="timestamp_sender",   # will show up in GRCin_sig=None,out_sig=[np.float32])self.kk = 1;# if an attribute with the same name as a parameter is found,# a callback is registered (properties work, too).def work(self, input_items, output_items):# Record the current timestart = np.float32(time.perf_counter())# Output data and the current timestamp (here using a simple value for demonstration)output_items[0][:] = [start for _ in output_items[0]]if self.kk == 1:self.kk = 2;print(f"output_items[0][:] = {output_items[0][:]}");return len(output_items[0])

二、timestamp_receiver 模块

使用 python block 做一个接收端时间戳记录模块,并添加下面的代码:

"""
Embedded Python Blocks:Each time this file is saved, GRC will instantiate the first class it finds
to get ports and parameters of your block. The arguments to __init__  will
be the parameters. All of them are required to have default values!
"""import numpy as np
from gnuradio import gr
import numpy as np  # 导入NumPy库
import timeclass timestamp_receiver(gr.sync_block):  # other base classes are basic_block, decim_block, interp_block"""Embedded Python Block example - a simple multiply const"""def __init__(self):  # only default arguments here"""arguments to this function show up as parameters in GRC"""gr.sync_block.__init__(self,name="timestamp_receiver",   # will show up in GRCin_sig=[np.float32],out_sig=None)# if an attribute with the same name as a parameter is found,# a callback is registered (properties work, too).self.kk = 1def work(self, input_items, output_items):for item in input_items[0]:if item == 0:continueif self.kk == 1:self.kk = 2end = np.float32(time.perf_counter())print(f"input_items[0] = {input_items[0]}")print(f"Received at {end}, interval since sent: {(end - item) * 1000000} Microsecond")return len(input_items[0])

三、测试

按照下图将 block 进行连接:
在这里插入图片描述
采样率 32KHz,延时 320 * 5 = 160000 个采样点,大约 5s 的时间

打印信息:

Generating: '/home/gnep/ofdm_usrp/test.py'Executing: /usr/bin/python3 -u /home/gnep/ofdm_usrp/test.pyPress Enter to quit: output_items[0][:] = [7809.57 7809.57 7809.57 ... 7809.57 7809.57 7809.57]
item = 7809.56982421875
input_items[0] = [   0.      0.      0.   ... 7809.57 7809.57 7809.57]
Received at 7814.44189453125, interval since sent: 4872070.3125 Microsecond

可以看到打印信息为 4872070.3125 ,大约为 5s 时间


我的qq:2442391036,欢迎交流!


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/240.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【python】super()函数的用法详解!

今天分享一个我在实际项目中用到过的super()函数,来说说该函数的主要功能是什么,简单来说,super()函数是用来做调用父类的一个方法。 super() 是用来解决多重继承问题的,直接用类名调用父类方法在使用单继承的时候没问题&#xf…

外包干了30天,技术倒退明显

先说情况,大专毕业,18年通过校招进入湖南某软件公司,干了接近6年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落! 而我已经在一个企业干了四年的功能…

设计模式学习笔记 - 开源实战二(上):从Unix开源开发学习应对大型复杂项目开发

概述 软件开发的难度无外部两点,一是技术男,代码量不一定多,但要解决的问题比较难,需要用到一些比较深的技术解决方案或者算法,不是靠 “堆人” 就能搞定的,比如自动驾驶、图像识别、高性能消息队列等&…

【详细的Kylin使用心得】

🌈个人主页: 程序员不想敲代码啊 🏆CSDN优质创作者,CSDN实力新星,CSDN博客专家 👍点赞⭐评论⭐收藏 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共…

2024-03-23青少年软件编程(Python语言)等考(二级)解析

2024-03-23青少年软件编程(Python语言)等考(二级)解析一、单选题(共25题,共50分) 1.期末考试结束了,全班的语文成绩都储存在列表score中,班主任老师请小明找到全班最高分,小明准备用Python来完成,以下哪个选项,可以获取最高分呢?( B ) A. min(score) B. max(score…

超级USB设备工具箱V2.0 绿色版-供大家学习研究参考

1、芯片精灵 ChipGenius V3.01 2、惠普U盘格式化工具 V2.2.0 3、MFormat V1.00中文版 4、MyDisk V2.50 5、安全移除USB磁盘(Disk Ejector) 6、U盘烧录修复工具(PortFree Production Program) V3.38 7、护U使者 V1.28 8、闪存精灵2…

【缺啥补啥】图表征学习-1

图表征学习: 学习图中的元素,如节点、边、子图或整个图的向量表征,并应用基于向量的机器学习算法进行图数据的建模和分析 动态环境: 图数据包括结构、特征、性质、任务等,随时间发生变化 开放环境: 泛指数据…

《Effective C++》《资源管理——13、以对象管理资源》

文章目录 1、Terms13:Use objects to manage resources1.1、普通指针进行资源管理存在的问题1.2、RALL1.3、没有针对“动态分配数组”而设计的智能指针 2、面试相关2.1 解释RAII原则,并给出它在资源管理中的重要性。举出一个可以编译的例子2.2 描述一个你曾经使用RA…

如何批量给Word文件增加前缀序号?“汇帮批量重命名”帮助你批量给word文件增加前缀序号。

批量给Word文件增加前缀序号的过程,对于经常处理大量文档的人来说,是一项既繁琐又必要的任务。首先,我们需要明确为什么要给Word文件增加前缀序号。在很多情况下,当我们需要按照一定的顺序对多个文档进行管理和归档时,…

Faiss原理和使用总结

Faiss是一种用于高维向量检索的库,特别适用于大规模数据集的相似性搜索。其核心原理和使用方法可以总结如下: Faiss的核心原理: 索引结构:Faiss提供了多种索引结构,包括基于树的索引(如k-means、PCA、IVF等…

基于STC15系列库操作LED灯

一、准备工作 1. 基于STC15系列库的工程模板 参考:51单片机工程模板的建立(基于STC15系列库)-CSDN博客 2. Keil编译器 二、程序编写 1. 新建 led.c 和 led.h 文件并存放于 user/led 文件夹下; 2. 新建 user.c 和 user.h 文件并…

如何辨别:DNS污染or DNS劫持?

DNS劫持和DNS污染的情况在互联网中并不少见,到底是出现了DNS污染还是DNS劫持。什么是DNS污染?什么是DNS劫持?我们该如何辨别DNS污染和DNS劫持? DNS劫持: DNS 劫持是指恶意攻击者通过非法手段篡改了网络中的 DNS 服务…

理论知识:Top-K 准确率

Top-1 Accuracy: 这是最常见的准确率评估方式,指的是模型预测的最有可能的类别(即概率最高的类别)是否正是真实的类别。换句话说,就是模型的预测结果中排名第一的类别是否正确。 Top-3 Accuracy: 这个评估标准比 Top-1 更宽松一些…

android 创建module

文章目的: 快速创建module并使用 创建步骤: 1 创建module 2 修改module下的build.gradle文件 3 修改清单文件中MainActivity属性,否则APP会因为有多个启动界面而崩溃 4 在主项目build.gradle引用该object Module 至此,可在APP中…

Golang的[]interface{}为什么不能接收[]int?

在 Go 中,[]interface{} 和 []int 是两种不同的类型,虽然它们的底层数据结构都是切片,但是它们的元素类型不同。[]interface{} 是一个空接口切片,可以容纳任意类型的元素,而 []int 是一个整数切片,只能容纳…

vue项目生成二维码(并避免重复生成)

一、需求&#xff0c;按连接&#xff08;带参数&#xff09;生成二维码 二、步骤 1、先安装插件 npm install qrcodejs2 --save-dev2、在需要用到二维码的页面引入 import QRCode from qrcodejs2;3、主要代码 <div id"qrCode2" ref"qrCodeDiv" class&…

针对springcloud gateway 跨域问题解决方案

springcloud gateway版本 <spring-boot.version>2.3.3.RELEASE</spring-boot.version> <spring-cloud.version>Hoxton.SR8</spring-cloud.version>跨域问题说明 application:1 Access to XMLHttpRequest at https://xxxxxxxxxx from origin http://l…

原生JS如何实现验证码

在原生JavaScript中实现验证码通常涉及到创建一些随机字符或图像&#xff0c;然后让用户输入这些字符以验证他们的身份。以下是一个简单的示例&#xff0c;说明如何使用原生JavaScript创建一个基于文本的验证码。 创建验证码字符串&#xff1a;首先&#xff0c;我们需要一个函…

Goland远程连接Linux进行项目开发

文章目录 1、Linux上安装go的环境&#xff12;、配置远程连接3、其他配置入口 跑新项目&#xff0c;有个confluent-Kafka-go的依赖在Windows上编译不通过&#xff0c;报错信息&#xff1a; undefined reference to __imp__xxx似乎是这个依赖在Windows上不支持&#xff0c;选择让…

IMX6ULL-UBOOT驱动移植

介绍 IMX6ULL正点原子开发板使用的是14x14_evk的芯片 其中14x14代表的是芯片的尺寸。 本教程的标识符以nsouther或者 NSOUTHER NSouther为主 添加板子自己的配置文件 板子的默认配置文件保存在 configs目录下&#xff0c;我们以mx6ull_14x14_evk_emmc_defconfig为主&#xf…