官方例程

Creating Python OOT with gr-modtool

1.创建OOT模组

  • 返回根目录
cd $HOME
  • 创建名为customModule的out-of-tree (OOT)模组
gr_modtool newmod customModule
  • 到gr-customModule目录下
cd gr-customModule
  • 列出OOT模块中的所有文件和目录
ls

2.创建OOT块

  • 创建名为addSubSelect的块(block)

    该命令将启动一个关于如何定义块的问题:块类型、语言和参数
gr_modtool add addSubSelect

按照提示依次输入想要的块类型,语言



其中‘sync’代表块类型,‘python’代表块语言,‘wyn’是标识符(Yourname),‘n’代表确定不需要Python质量保证(QA)代码。

之后生成.py .yml .txt三个文件

3.修改Python.py文件

3.1 找到addSubSelect.py文件

gedit python/addSubSelect.py

修改如下三处

import numpy as np

初始化函数,新增参数selector和一个输入

    def __init__(self, selector=True):
gr.sync_block.__init__(self,
name="addSubSelect",
in_sig=[np.complex64,np.complex64],
out_sig=[np.complex64])
self.selector = selector

工作函数 真 + 假 —

    def work(self, input_items, output_items):
in0 = input_items[0]
in1 = input_items[1] if (self.selector):
output_items[0][:] = in0 + in1
else:
output_items[0][:] = in0 - in1 return len(output_items[0])

3.2 找到修改customModule_addSubSelect.block.yml

gedit grc/customModule_addSubSelect.block.yml &

修改

parameters:
- id: selector
label: Add (True) or Subtract (False) Selector
dtype: bool
default: True‎
inputs:
- label: in0
domain: stream
dtype: complex
- label: in1
domain: stream
dtype: complex
outputs:
- label: out0
domain: stream
dtype: complex

4.编译安装模块(block)

在gr_customModule的顶层目录中,创建一个build目录:

mkdir build

之后进入build

cd build

运行CMake,它将准备makefile:

cmake ..



编译模块

make

安装

sudo make install



最后,运行ldconfig更新customModule库的链接:

sudo ldconfig

 

 

打开GNU Radio Companion (GRC):

gnuradio-companion &

可以看到addSubSelect,successful

设计一个gr模块 GNU Radio——Creating Python OOT with gr-modtool的更多相关文章

  1. 「造个轮子」——cicada 设计一个配置模块

    前言 在前两次的 cicada 版本中其实还不支持读取配置文件,比如对端口.路由的配置. 因此我按照自己的想法创建了一个 issue ,也收集到了一些很不错的建议. 最终其实还是按照我之前的想法来做了 ...

  2. [SDR] GNU Radio 系列教程(一) —— 什么是 GNU Radio

    目录 1.GNU Radio 是什么 2.我为什么要用 GNU Radio 3.数字信号处理 3.1 一点信号理论 3.2 将数字信号处理应用于无线电传输 4.基于流程图的模块化数字信号处理方法 本文 ...

  3. 【译】GNU Radio How to write a block 【如何开发用户模块及编写功能块】

    本文讲解如何在GNU Radio中添加用户开发的信号处理模块,译文如有不当之处可参考原文地址:http://gnuradio.microembedded.com/outoftreemodules Ou ...

  4. python小练习,打出1-100之间的所有偶数,设计一个函数,在桌面上创建10个文件,并以数字命名,复利计算函数

    练习一:打出1-100之间的所有偶数 def even_print(): for i in range(1,101): if i % 2 == 0: print (i) even_print() #列 ...

  5. 用Python设计一个经典小游戏

    这是关于Python的第9篇文章,介绍如何用Python设计一个经典小游戏:猜大小. 在这个游戏中,将用到前面我介绍过的所有内容:变量的使用.参数传递.函数设计.条件控制和循环等,做个整体的总结和复习 ...

  6. python学习:设计一个算法将缺失的数字找出来。

    算法题   已知整型数值 a[99], 包含的所有99个元素都是从1-100中随机取值,并且这99个数两两互不相等,也就是说从1到100这100个数字有99个在数值内,有一个缺失.请设计一个算法将缺失 ...

  7. 云课堂Android模块化实战--如何设计一个通用性的模块

    本文来自 网易云社区 . 如何设计一个通用性的模块 前言 每个开发者都会知道,随着项目的开发,会发现业务在不断壮大,产品线越来越丰富,而留给开发的时间却一直有限,在有限的时间,尽快完成某个功能的迭代. ...

  8. 用 Python 制作一个艺术签名小工具,给自己设计一个优雅的签名

    生活中有很多场景都需要我们签字(签名),如果是一些不重要的场景,我们的签名好坏基本无所谓了,但如果是一些比较重要的场景,如果我们的签名比较差的话,就有可能给别人留下不太好的印象了,俗话说字如其人嘛,本 ...

  9. Python 工匠:一个关于模块的小故事

    前言 模块(Module)是我们用来组织 Python 代码的基本单位.很多功能强大的复杂站点,都由成百上千个独立模块共同组成. 虽然模块有着不可替代的用处,但它有时也会给我们带来麻烦.比如,当你接手 ...

  10. python 控制语句基础---->代码块:以为冒号作为开始,用缩进来划分作用域,代表一个整体,是一个代码块,一个文件(模块)也称为一个代码块 | 作用域:作用的范围

    # ### 代码块:以为冒号作为开始,用缩进来划分作用域,代表一个整体,是一个代码块,一个文件(模块)也称为一个代码块 # ### 作用域:作用的范围 print(11) print(12) prin ...

随机推荐

  1. vue3 基础-Mixin

    本篇开始来学习一波 vue 中的一些复用性代码的基础操作, 首先来介绍关于代码 "混入" mixin 的写法. 直观理解这个 mixin 就是一个 js 对象去 "混入& ...

  2. Unity ML-Agents实战指南:构建多技能游戏AI训练系统

    引言:游戏AI训练的技术演进 在<赛博朋克2077>的动态NPC系统到<Dota 2>OpenAI Five的突破性表现中,强化学习正在重塑游戏AI边界.本文将通过Unity ...

  3. VitePress 集成 Twikoo 评论

    Twikoo 是一个简洁.安全.免费的静态网站评论系统. 主要特点:免费搭建,部署简单,功能很完善,隐私护安全,通知发邮件,管理有内嵌,总之免费又方便 关于后端部署,大家可以看官网,或者这篇 Vite ...

  4. L3-4、让 Prompt 更聪明:调试技巧与智能问答系统实战

    让 Prompt 更聪明:调试技巧与智能问答系统实战 在大语言模型(LLM)应用开发中,Prompt 工程是核心技能.本文将系统介绍 Prompt 调试技巧,并通过构建一个实用的 FAQ 问答机器人, ...

  5. 代码随想录第七天 | 字符串part01

    最近这两天上班回去真的有点晚不想动了,趁着周末有时间赶快补补: 344.反转字符串 建议: 本题是字符串基础题目,就是考察 reverse 函数的实现,同时也明确一下 平时刷题什么时候用 库函数,什么 ...

  6. ssh免密登录设置 (普通用户和root用户)

    普通用户如何设置免密码ssh到另一台服务器 一.场景描述: 我有A,B两台服务器,需要实现让A服务器的普通用户(ftpuser)不用输入密码就可以连接到B的(ftpuser)(此处A,B服务器的账户可 ...

  7. 洛谷 P5590 赛车游戏

    洛谷 P5590 赛车游戏 P5590 赛车游戏 Problem 给一张有向图,请给每一条边赋上边权\(w\in[1,9]\)使得每一条\(1\to n\)的路径的长度相等. Solution 先来点 ...

  8. AD 横向移动-哈希传递攻击

    本文通过 Google 翻译 Lateral Movement – Pass-the-Hash Attacks 这篇文章所产生,本人仅是对机器翻译中部分表达别扭的字词进行了校正及个别注释补充. 导航 ...

  9. flutter3-winseek客户端AI实例|Flutter3.32+DeepSeek流式ai对话模板Exe

    原创首发flutter3+deepseek+window_manager客户端Ai流式打字Flutter-WinSeek. flutter3-winseek-chat:基于flutter3.32+da ...

  10. Kubernetes数据存储-本地存储

    简单存储 EmptyDir EmptyDir是最基础的Volume类型,一个EmptyDir就是Host上的一个空目录. EmptyDir是在Pod被分配到Node时创建的,它的初始内容为空,并且无须 ...