GNU Radio创建qt time plot python OOT块

文章目录


前言

官方提供的绘制时域波形的 block 名字叫做 QT GUI Time Sink,其底层实现是用 C++ 写的,但是我发现如果要是对收到的信号做一些其他的显示,例如在实现雷达测距的时候将 x 轴改为距离轴,y 轴改为主副瓣比,那么直接对 QT GUI Time Sink 这个模块做一些修改还是比较难的,因此就想通过 python OOT 实现一个简单的绘制时域波形的 block,并且这个 block 方便后面做自定义修改,例如修改成显示距离或者速度等等。


一、创建自定义的 OOT 块

1、安装相应依赖

  • Matplotlib:一个数据可视化库,提供了一个类似于 MATLAB 的绘图框架。
  • NumPy:一个提供多维数组对象和一系列针对数组操作的函数的库,它是几乎所有进行科学计算的Python软件包的核心库。
bash 复制代码
sudo apt install python3-pip
pip install matplotlib numpy

2、创建 OOT 块

参考官方教程 Creating Python OOT with gr-modtool 创建自定义的 OOT块

①、在 gr-customModule 目录下添加一个名为 Zadoff-Chu 的新块:

bash 复制代码
gr_modtool add my_time_plot

将显示块的类型:

bash 复制代码
GNU Radio module name identified: myModule
('sink', 'source', 'sync', 'decimator', 'interpolator', 'general', 'tagged_stream', 'hier', 'noblock')

②、my_time_plot 模块需要根据输入数据同步显示,因此这里选择 sync

bash 复制代码
Enter block type: sync

③、使用 Python 代码实现

bash 复制代码
Language (python/cpp): python
Language: Python
Block/code identifier: my_time_plot

④、输入版权所有者的名称或组织:

bash 复制代码
Please specify the copyright holder: gnep

⑤、输入采样率作为参数

bash 复制代码
Enter valid argument list, including default arguments: 
samp_rate = 32000.0

⑥、选择是否需要 QA 代码:

bash 复制代码
Add Python QA code? [Y/n] n

⑦、然后将创建或修改以下文件:

bash 复制代码
Adding file 'python/my_time_plot.py'...
Adding file 'grc/customModule_my_time_plot.block.yml'...
Editing grc/CMakeLists.txt...

相关配置如下图:

3、修改相关

my_time_plot.py 部分核心程序:

python 复制代码
    def work(self, input_items, output_items):
        in0 = input_items[0]
        n_samples = len(in0)
        t = np.arange(0, n_samples) / self.sampling_rate  # 生成时间向量

        # Send data to the queue
        self.q.put((t, in0))
        return len(in0)

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

yaml 复制代码
parameters:
- id: samp_rate
  label: samp rate
  dtype: float

#  Make one 'inputs' list entry per input and one 'outputs' list entry per output.
#  Keys include:
#      * label (an identifier for the GUI)
#      * domain (optional - stream or message. Default is stream)
#      * dtype (e.g. int, float, complex, byte, short, xxx_vector, ...)
#      * vlen (optional - data stream vector length. Default is 1)
#      * optional (optional - set to 1 for optional inputs. Default is 0)
inputs:
- label: in
  domain: stream
  dtype: float

详细代码及配置文件文末自取

4、编译及安装 OOT 块

1、该块需要编译和安装,确保目前位于 gr-customModule 目录中:

bash 复制代码
cd gr-customModule

2、如果 build/ 目录已存在,请将其删除:

bash 复制代码
rm -rf build/

3、创建 build/ 目录

bash 复制代码
mkdir build

4、进入 build 目录

bash 复制代码
cd build/ 

5、运行 cmake 来构建 makefile

bash 复制代码
cmake ..

6、编译模块

bash 复制代码
make

7、安装模块

bash 复制代码
sudo make install

8、更新 customModule 库的链接

bash 复制代码
sudo ldconfig 

二、测试

1、grc 图

这里用一个 10Hz 的信号源做测试,采样率设置大一些,设置成10 kHz

2、运行结果

官方 QT GUI Time Sink 显示内容:

自定义制作的 time plot 显示内容:

三、资源自取

链接:GNU Radio创建qt time plot python OOT块


我的qq:2442391036,欢迎交流!


相关推荐
m0_3807438717 分钟前
给 OpenAI API 调用加上模型切换:GPT-5.1 和 Codex 的配置实践
人工智能·python·gpt
2601_9622974840 分钟前
在python3中、下列输出变量a的正确写法是_2020超星大数据Python免费答案
数据结构·python·算法·编程·字符串操作
“AI国潮设计-小江”43 分钟前
Python实战 | SDXL精准控制“普宁英歌舞×星空蛋糕”IP落地,附核心Prompt与商用授权思路
开发语言·人工智能·python·prompt·aigc
公爵爱学习1 小时前
无人机视觉识别前序-Linux-YOLO安装
python·yolo·计算机视觉·conda·无人机
2601_962295331 小时前
使用python实现一个浏览器自动化的脚本
python·脚本·rpa·浏览器自动化·操作
小刘在重生~2 小时前
Java常用类|String类详解 + BigDecimal精准计算(含面试题)
java·开发语言·python
爱吃巧克力的程序媛2 小时前
main.cpp注册 C++ 类到 QML 元对象系统
c++·qt
大汉堡玩测试3 小时前
langfuse测试实战(一): 配置一个简单的项目快速落地
python·测试工具
一位正在转型AI全栈的前端工程师3 小时前
AI 全栈学习之旅 -Week 8:从单 Agent 到多 Agent 协作:LangGraph 实战与记忆持久化
前端·python
长江后浪博客3 小时前
Python + YOLOv8 疲劳驾驶 AI 视觉检测入门:从模型训练到 ONNX 实时摄像头检测完整实战
人工智能·python·yolo·疲劳驾驶检测·onnx·yolov8