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

文章目录

  • 前言
  • [一、timestamp_sender 模块](#一、timestamp_sender 模块)
  • [二、timestamp_receiver 模块](#二、timestamp_receiver 模块)
  • 三、测试

前言

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


一、timestamp_sender 模块

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

python 复制代码
"""
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 np

class 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 GRC
            in_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 time
        start = 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 做一个接收端时间戳记录模块,并添加下面的代码:

python 复制代码
"""
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 time

class 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 GRC
            in_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 = 1

    def work(self, input_items, output_items):
        for item in input_items[0]:
            if item == 0:
                continue
            if self.kk == 1:
                self.kk = 2
                end = 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 的时间

打印信息:

bash 复制代码
Generating: '/home/gnep/ofdm_usrp/test.py'

Executing: /usr/bin/python3 -u /home/gnep/ofdm_usrp/test.py

Press 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,欢迎交流!


相关推荐
sunywz几秒前
【JVM】(4)JVM对象创建与内存分配机制深度剖析
开发语言·jvm·python
wheelmouse77882 分钟前
如何设置VSCode打开文件Tab页签换行
java·python
0思必得010 分钟前
[Web自动化] Selenium基础介绍
前端·python·selenium·自动化·web自动化
2501_9311624337 分钟前
大疆相机:空中影像新境界
python
测试199840 分钟前
Web自动化测试入门
自动化测试·软件测试·python·功能测试·selenium·测试工具·测试用例
予枫的编程笔记41 分钟前
【论文解读】DLF:以语言为核心的多模态情感分析新范式 (AAAI 2025)
人工智能·python·算法·机器学习
lbb 小魔仙1 小时前
【Python】零基础学 Python 爬虫:从原理到反爬,构建企业级爬虫系统
开发语言·爬虫·python
黄河里的小鲤鱼1 小时前
拯救草台班子-战略
人工智能·python·信息可视化
Dr.Alex Wang1 小时前
Google Firebase 实战教学 - Streamlit、Bucket、Firebase
数据库·python·安全·googlecloud
小二·1 小时前
Python Web 全栈开发实战教程:基于 Flask 与 Layui 的待办事项系统
前端·python·flask