GNU Radio简介

  • GNU Radio是什么
    • 基本思想
      • 定义
      • 主要思想
    • 软件架构(GNU Radio的"hello world")
      • Python编写"hello wolrd"案例
      • GNU Radio图形界面实现"hello wolrd"
    • 硬件架构
    • 小结
    • 参考文献:

GNU Radio是什么

基本思想

定义

GNU Radio是一个完全开源的软件无线电结构平台,它可以用来设计和仿真,也可以用来链接真实的无线电系统。GNU Radio是一个高度模块化,采用流图类形式的软件架构平台,它本身提供了许多模块库,使用者可以很快速的使用这些模块来建立关于信号处理的流程。

主要思想

GNU Radio是一个通过最小程度地结合硬件(主要是USRP),用软件来定义无线电波发射和接收的方式,搭建无线电通信系统的的开源软件系统。

软件架构(GNU Radio的"hello world")

GNU Radio 提供一个信号处理模块的库,并且有个机制可以把单个的处理模块连接在一起形成一个系统。编程者通过建立一个流向图(flow graph)就能搭建成一个无线电系统。
信号处理模块是使用 C++来实现的,理论上说,信号数据流不停的从输入端口流入从输出端口流出。信号处理块 (blocks)的属性包括输入和输出的端口数,流过它们的数据的类型。
经常使用的数据流的类型是短整型(short),浮点型(float),和复数 (complex)类型。一些处理模块仅仅有输出端口或者输入端口,它们分别成为信号源(data source)和信号接收器(sink)。有的信号源从文件或者 ADC 读入数据,信号接收器写入文件或者 DAC 或者 PC 的多媒体接口。
GNU Radio 提供了超过 100 个信号处理块,并且扩展新的处理模块也是非常容易的。软件图形化接口和信号处理模块的链接机制是通过 python 脚本语言来进行的。

Python编写"hello wolrd"案例

下面的python文件是一个 GNU Radio 的“Hello World”的例子。它产生两个 sine 波形并且把他们输出到声卡,一个输出到声卡的左声道,一个输出到右声道。

// Linux终端命令
sudo vi Dial_tone.py
//注意保存不成功,修改文件权限
sudo chmod 777 Dial_tone.py
// 在编辑器中添加以下案例代码
#!/usr/bin/env python
#
# Copyright 2004,2005,2007 Free Software Foundation, Inc.
#
# This file is part of GNU Radio
#
# GNU Radio is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published
by
# the Free Software Foundation; either version 3, or (at your option)
# any later version.
#
# GNU Radio is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with GNU Radio; see the file COPYING.  If not, write to
# the Free Software Foundation, Inc., 51 Franklin Street,
# Boston, MA 02110-1301, USA.
#
from gnuradio import gr
from gnuradio import audio
from gnuradio.eng_option import eng_option
from optparse import OptionParser class my_top_block(gr.top_block): def __init__(self): gr.top_block.__init__(self) parser = OptionParser(option_class=eng_option) parser.add_option("-O", "--audio-output", type="string",
default="", help="pcm output device name.  E.g., hw:0,0
or /dev/dsp") parser.add_option("-r", "--sample-rate", type="eng_float",
default=48000, help="set sample rate to RATE (48000)") (options, args) = parser.parse_args () if len(args) != 0: parser.print_help() raise SystemExit, 1 sample_rate = int(options.sample_rate) ampl = 0.1 src0 = gr.sig_source_f (sample_rate, gr.GR_SIN_WAVE, 350,
ampl) src1 = gr.sig_source_f (sample_rate, gr.GR_SIN_WAVE, 440,
ampl) dst = audio.sink (sample_rate, options.audio_output) self.connect (src0, (dst, 0)) self.connect (src1, (dst, 1)) if __name__ == '__main__': try: my_top_block().run() except KeyboardInterrupt: pass 

在这个例子中,我们首先调用 gr_sig_source_f 产生两个 sine 波形模块,src0 和src1。后缀 f 表面这个信号源的数据类型是浮点型的,一个波形是 350HZ,另外一个是 440HZ,合在一起他们听起来像一个美国电话拨号音。audio_sink 是一个接收器,它把接收到的信号输入到声卡 中。
我们把 3 个信号处理模块用流向图的 connect 方法连接到一起。connect 方法有两个参数,源端点和目的端点,用来建立一个从源到目的处理模块的链路。每个端点(endpoint)有两个成员:一个信号处理模块和一个端口号。端口号表示哪个输入或者输出端口应该被连接的。
通常端点使用 python 语言的 tuple 来表示,像:(block,port_number)。当端口号是 0 时,port_number 可以被省略。例如下面的两个表示方法是一样的:
fg.connect ((src1, 0), (dst, 1))
fg.connect (src1, (dst, 1))
一旦流向图被建立了,我们调用 start 生成一个或者多个线程去运行它,按下任意键这个程序就会退出。

GNU Radio图形界面实现"hello wolrd"

GNU Radio的图像界面软件为gnuradio-companion

// 在Linux终端中输入gnuradio-companion
gnuradio-companion
//成功则会打开软件,如下图所示:

在最右侧分别选中Signal Source、Throttle、QT GUI Sink三个模块,并且用鼠标左键点击两对端口链接两个模块。最后点击界面上方的绿色三角(类似于电影播放按钮)运行并保存文件,如果成功则会出现下图所示的示波器,否则会报错,根据错误修改模型即可。

硬件架构

GNU Radio 是硬件独立的。也就是说除了我们熟悉的 USRP 以外,还有其他一些硬件可以用 GNU Radio:比如说一种 cable modem tuner(型号 mc4020,用来接收 FM 广播);另外还有一些业余无线电设备也用 GNU Radio。
如今带有单独浮点运算单元的上 GHZ 的 CPU 已经很常见了,这给台式机实现数字信号处理功能带来了可能。一个 3G 的 Pentium 或者 Athlon 处理器能够每秒处理 30 亿次浮点 FIR 运算。我们现在能够在 PC 上建立软件通讯系统,这是几年前所不敢想象的。
你的硬件要求依赖于你想做什么。总的来说,一个 1G 或者 2G 带有 256M 内存的机器应该是足够了。你也需要一些其他的模拟外设连接在你的 PC 上,包括内置 的声卡或者 96 kHz, 24-bit 高保真声卡。使用这些模拟设备,你只能处理有限的窄带信号。另外的方案是使用高速的 PCI 模拟到数字的外设,这些设备可以达到 20M 的抽样率,但是他们是比较昂贵的,差不多是买一台 PC 的价钱。使用这些高速板,调制解调器可以作为 RF 前端来使用。
为了有一个性价比更好的外设,Ettus 等人设计了一个通用软件无线电外设
(USRP)。这也是目前绝大部分 GNU Radio 用户所用的硬件。

小结

简要介绍了GNU radio以及其"hello world"案例,接下来的文章将会详细介绍GRC(GNU Radio Companion)的模块及其功能。

参考文献:

[1] GNU radio官网入门手册 ;
[2] 黄琳、海曼无线教材《GNU Radio入门》;
[3] 博客链接: https://www.cnblogs.com/moon1992/p/5739027.html/.

GNU radio入门学习(2)GNU radio简介相关推荐

  1. MongoDB入门学习(一)简介与基本操作、整合SpringBoot集合操作、整合SpringBoot文档操作

    文章目录 1. 简介 1.1 NoSQL和MongoDB 1.2 MongoDB特点 1.2.1 MongoDB 技术优势 1.2.2 Json 模型快速特性 1.3 MongoDB 应用场景 1.4 ...

  2. CSS入门学习笔记+案例(1)

    CSS入门学习 一.CSS简介 1.什么是CSS CSS:Cascading Style Sheet 层叠样式表 是一组样式设置的规则,用于控制页面的外观样式 2.为什么使用CSS 实现内容与样式的分 ...

  3. c语言入门自学免费app,C语言入门学习最新版下载-C语言入门学习app手机版v1.0.2 安卓版-腾飞网...

    C语言入门学习app手机版是一款c语言编程自学软件,零基础也可以学习,里面有海量教学视频,针对c语言不同程度的讲解都囊括其中.随时随地学习编程都可以,不用担心自己没有基础.还支持在手机上敲代码编程哦. ...

  4. MOOSE多物理场耦合平台入门学习记录一(稳态热传导程序实例)

    MOOSE多物理场耦合平台入门学习记录 MOOSE的简介 MOOSE的安装 Linux和Mac Windows MOOSE程序的一般开发流程-以导热微分方程为例 简单问题的有限元处理 MOOSE程序的 ...

  5. GNU Radio入门

    相关资料记录 https://www.cnblogs.com/WindyZ/p/10284473.html https://www.cnblogs.com/WindyZ/p/10403342.html ...

  6. GNU Radio入门之旅

    2019-01-17 今天拿到了通用软件无线电外设USRP N210,便开始着手在自己实验室电脑Ubuntu 18.04上安装软件无线电软件GNU Radio,以开发无线设备. GNU Radio是什 ...

  7. gnu radio linux,GNU Radio入门

    GNU Radio入门 海曼无限 WWW.OPEN-MESH.COM.CN / GNURADIO 中国WWW.GNURADIO.CC GNU Radio 入门 GNU Radio / USRP / O ...

  8. linux vim配置c,Linux入门学习教程:GNU C及将Vim打造成C/C++的半自动化IDE

    C语言在Linux系统中的重要性自然是无与伦比.不可替代,所以我写Linux江湖系列不可能不提C语言.C语言是我的启蒙语言,感谢C语言带领我进入了程序世界.虽然现在不靠它吃饭,但是仍免不了经常和它打交 ...

  9. AI之FL:联邦学习(Federated Learning)的简介、入门、应用之详细攻略

    AI之FL:联邦学习(Federated Learning)的简介.入门.应用之详细攻略 导读       2019 年2 月,微众银行 AI 团队自主研发的全球首个工业级联邦学习框架 FATE(Fe ...

最新文章

  1. 计算机网络-基本概念(7)【网络层】-多协议标记交换MPLS
  2. C++ POD(Plain Old Data)类型
  3. nginx 配置 http/2(h2) 和 http 在同一端口的问题
  4. 【LeetCode 剑指offer刷题】矩阵题1:4 有序矩阵中的查找( 74. Search a 2D Matrix )(系列)...
  5. unity3D与网页的交互---做项目的一点总结
  6. R 学习笔记《十二》 R语言初学者指南--格包
  7. Zookeeper 入门示例
  8. 关于SQL SERVER 2000在Windows Server 2003下不能使用的问题
  9. mysql pt_mysql管理工具之pt
  10. robocopy 备份_windows7自带功能robocopy 数据迁移和备份
  11. 自定义View:悬浮球与加速球
  12. html文档含有阿拉伯文,html – iOS中包含自定义字体的阿拉伯文字
  13. 分享一个很好的dll查看器
  14. 千图成像python_爬取英雄联盟所有皮肤图片实现千图成像!Python真强!!
  15. STM8S 红外解码+低功耗处理
  16. SAP中常用到的会计知识
  17. 欧普LED灯维修记录及原理解密
  18. 用迅雷校验网盘下载的出错文件
  19. 蠕虫勒索软件WannaCrypt0r的行为分析
  20. 【0】依照Django官网:实现第一个django app 安装必要的工具/模块

热门文章

  1. java电商面试问题以及回答,帮你解决90%的问题!
  2. 数据质量管理平台 Qualitis 安装部署
  3. 安卓 网络工具_安卓设备可用苹果Magsafe无线充电,但功率鸡肋,安卓并不需要...
  4. IO输入输出模型是每个Java开发人员必须理解的重点,深度解析跳槽从开始到结束完整流程
  5. 用PaddlePaddle预测土壤含氮量
  6. 北京苹果店正门logo熄灯悼念 果粉献花纪哀思
  7. Kibana:如何在 Discover 中显示图片及播放音乐
  8. 怎样绕过工信部备案系统
  9. 【QQ空间】免费漂浮物代码
  10. 购买老域名,利用桔子seo来查找域名的历史快照信息