运行GNU Radio

需要注意的是,如果您的项目不需要用到硬件源和硬件池的话,直接使用Shell运行GRC是没有问题的。但是需要用到硬件源和硬件池的话,请记得使用管理员权限运行GRC,否则项目在执行的时候会莫名其妙地马上就结束执行了。

因此,为了接下来的内容是本文的第一个项目:测试RTL-SDR硬件源作准备,我们需要在Shell中执行

sudo gnuradio-companion

这样我们的GR小伙伴——图形化的应用项目开发界面就会出现在您的面前。

第一个项目

许多人的GNU Radio的Hello world都不一样,选择众多。但我个人倾向于,以实际的无线电硬件——比如RTL-SDR或HackRF或USRP的测试作为开始。

每一个GNU Radio项目最基本都有一个源(source)和一个池(sink),也就是一个输入和一个输出,他们可以是任何东西。在这个项目中,我们只需要简单地将我们的收音机(源)调谐到某个频率上,然后把波形在屏幕上显示出来(池)

Osmocom制作了很多源,其中有一个可以将RTL-SDR的输出输入到GNU Radio中。在GNU Radio里,这个源的名字叫RTL-SDR Source,它能控制RTL-SDR的采样率、需要调谐的频率、增益等

在这个项目中,我们使用GNU Radio的WX图形化界面将从源获得的数据显示到屏幕上,这个池的名字叫WX GUI FFT Sink,它在Instrumentation→WX里可以找到。

简单做法

因为是第一次,所以先从简单做起,一些改进可以在成功后再作修改。那么,开始吧:

以管理员权限运行我们的GR小伙伴之后,我们可以把Variable这个模块给删除掉,因为我们做的是很简单的一个项目,不需要使用一个变量模块来统一声明一个全局变量供各个模块使用,而这个项目总的来说只有两个功能模块,非常的简单。

接下来双击Options模块,将top_block改一个名字,GNU Radio的项目管理很有意思,每一个项目的Options模块中的ID确定了整个项目保存后主文件名的名字。在这里,我们可以将Options模块的ID改为hello_world

下面找到源和池,双击添加到项目中,源非常好找,Source里就是RTL-SDR Source;池在Instrumentation里的WX里。

修改源和池的属性并将源和池连接起来:

  • 源的采样率Sample Rate为2.048e6
  • 频率为您最喜欢的调频广播电台的频率加上e6,比如105.2这个广播电台,在源的属性中频率一栏就是105.2e6
  • 池的采样率也是2.048e6

其他可以暂时不管。完成后如图1:

接着我们按快捷键F5或在界面上点击按钮“Generate the flow graph”将这个项目流程图保存到一个文件里

最后使用快捷键F6或在界面上点击按钮“Execute the flow graph”运行

假如您的RTL-SDR硬件以及整个GNU Radio一切正常的话,您将会看到您正在收听的电台以及临近电台的信号的FFT图。比如我得到的是这样:

看来旁边的电台的信号比我想听的电台的信号还要强得多。

简单做法的改进

上面的部分成功运行后,我们会发现,SDR最方便人的地方——接收频率宽窄的调节、中心频率的调谐、增益的控制,这三个部分必须要将运行中的项目按F7停下来,修改源和池的属性,再次按F6运行才能看见修改后的结果,非常的麻烦。

延续上面的成功,我们现在需要做的是:尝试使用滚动条来分别调节各项参数,以及WX GUI FFT池的界面的改进(显示频率与源的中心频率的同步等)

首先我们增加五个WX GUI Slider,分别对应频率、RF增益、IF增益、BB增益、采样率。WX GUI Slider在GUI Widgets里的WX里。

但光增加WX GUI Slider还不够,我们需要分别对他们的属性进行修改:

  • 双击第一个WX GUI Slider

    • 将ID改为freq
    • 默认值(Default Value)为上面的您喜欢听的调频广播电台的频率(比如我喜欢听的105.2,我这里的默认值就是105.2e6)
    • 最小值(Minimum)为76e6
    • 最大值(Maximum)为108e6
  • 双击第二个WX GUI Slider,将ID改为rf_gain;默认值为10;最大值为30。
  • 双击第三个WX GUI Slider,将ID改为if_gain;默认值为20;最大值为30。
  • 双击第四个WX GUI Slider,将ID改为bb_gain;默认值为20;最大值为30。
  • 双击第五个WX GUI Slider,将ID改为sample_rate;默认值为2.048e6;最小值为1.6e6;最大值为3.2e6。

需要注意的是,这里我们增加的WX GUI Slider的ID可以作为变量名使用,可以让各个功能模块直接调用,所以直接将ID写在恰当的地方就可以了,但显示出来的是变量的值而不是变量名:

  • 双击上面我们已经正在使用的RTL-SDR Source

    • 将采样率从2.048e6改为sample_rate
    • Ch0: Frequently(Hz)从105.2e6改为freq
    • Ch0: RF Gain(dB)改为rf_gain
    • Ch0: IF Gain(dB)改为if_gain
    • Ch0: BB Gain(dB)改为bb_gain
  • 双击上面我们已经正在使用的WX GUI FFT Sink

    • 将采样率从2.048e6改为sample_rate
    • Baseband Freq改为freq

好了,最后结果如图3,现在尝试运行一下试试看?

您会发现多了5个滚动条,上面显示了对应的值。分别将他们拖动修改一下试试看?

现在已经能收到信号了,那么自己动手试试看让收到的电台信号变成声音吧!其他的频段有别的调制模式的信号,这些模式的解调您也可以试试看,RF的世界无限广大,GNU Radio也同样无限精彩~

GNU Radio的hello world(转)的更多相关文章

  1. GNU Radio Radar Toolbox

    GNU Radio Radar Toolbox Install guide Change to any folder in your home directory and enter followin ...

  2. GNU Radio: Overview of the GNU Radio Scheduler

    Scetion 1: The Flowgraph The flowgraph moves data from sources into sinks. 一个流图由多个模块组成,其中一般包括信源(Sour ...

  3. GNU Radio: Synchronization and MIMO Capability with USRP Devices

    Application Note Synchronization and MIMO Capability with USRP Devices Ettus Research Introduction S ...

  4. GNU Radio: USRP2 and N2x0 Series

    Comparative features list 相对性能清单 Hardware Capabilities: 1 transceiver card slot External PPS referen ...

  5. GNU Radio: Multiple USRP configurations 配置多个USRP设备

    Introduction 引言 Some USRP devices are capable of being grouped to form a single, virtual device. A s ...

  6. GNU Radio在SDR领域的应用

    1 Software Defined Radio 软件无线电(Software Defined Radio,SDR)是一种实现无线通信的新概念和体制.其中以往只能在硬件中实现的组件(例如混频器,滤波器 ...

  7. GNU Radio: 自定义 block 实例

    综述 本文通过在GNU Radio 中编写一个block的例子,系统介绍创建一个block的过程.该 block 的功能是可以在GRC中通过滑块(WX GUI Slider)来实时改变信号源(Sign ...

  8. GNU Radio安装教程: Ubuntu14.04 + uhd3.10.0 + gnuradio3.7.10.1

    1. 更新和安装依赖项 在编译安装uhd和gnuradio之前,确保已安装所需依赖项.Ubuntu系统运行: sudo apt-get update 安装UHD和GNURadio所需依赖项: On U ...

  9. GNU Radio 入门培训

    1. GNU Radio介绍 1.1 什么是GNU Radio GNU Radio是一个完全开源的软件无线电结构平台,它可以用来设计和仿真,也可以用来连接真实的无线电系统.GNU Radio是一个高度 ...

  10. 使用Octave分析GNU Radio的数据

    Octave 是 GNU Radio 的最流行的分析工具,因此 GNU Radio 软件包也包含它自身的一组脚本用于读取和语法分析输出.本文介绍如何使用 Octave 分析 GNU Radio 产生的 ...

随机推荐

  1. 字段类型(uniqueidentifier)问题

    环境:SQL 2016: 语句 select * from A where PID=JoID 上述查询语句中的Where PID=JoID条件中PID的字段类型为varchar(50)而JoID的字段 ...

  2. springcloud服务已经关闭但是Eureka显示服务状态一直为UP

    问题: 最近遇到一个很奇怪的问题,就是使用springcloud的时候,服务明明已经停止,但是在eureka中一直显示此服务状态为UP,这样就导致了请求再次过来的时候被分发到已经停止的服务上,其实这是 ...

  3. c 指针改变数字

    之前已经有了: gcc -c day4.c -Wall gcc -o day4.exe day4.o 所以才会有以下结果

  4. C#设计模式学习笔记:(3)抽象工厂模式

    本笔记摘抄自:https://www.cnblogs.com/PatrickLiu/p/7596897.html,记录一下学习过程以备后续查用. 一.引言 接上一篇C#设计模式学习笔记:简单工厂模式( ...

  5. [大数据技术]Kettle初次连接MySQL数据库 报错问题 错误连接数据库 Error occured while trying to connect to the database Exception while loading class org.gjt.mm.mysql.Driver

    报错内容如下: 错误连接数据库 [foodmartconn] : org.pentaho.di.core.exception.KettleDatabaseException: Error occure ...

  6. 深度优先搜索DFS---01背包问题(1)

    题目: 有n件物品,每件物品的重量为w[i],价值为c[i].现在需要选出若干件物品放入一个容量为 V 的背包中,使得在选入背包的物品重量之和,不超过容量V的前提下,让北欧保重物品的价值之和最大,求最 ...

  7. .7、void*

    void * 是一种特殊的指针类型,可用于存放任意类型的地址.与其他指针类似,不同的是,我们对该地址中到底是一个什么类型的对象不了解,因此我们不能直接操作void * 所指的对象. ; int *p ...

  8. D - Counting Squares

    Your input is a series of rectangles, one per line. Each rectangle is specified as two points(X,Y) t ...

  9. Html5学习系列

    Html5学习系列 HTML5 规定了一种通过 video 元素来包含视频的标准方法 Ogg = 带有 Theora 视频编码和 Vorbis 音频编码的 Ogg 文件 MPEG4 = 带有 H.26 ...

  10. Spark学习之路 (十八)SparkSQL简单使用[转]

    SparkSQL的进化之路 1.0以前: Shark 1.1.x开始: SparkSQL(只是测试性的) SQL 1.3.x: SparkSQL(正式版本)+Dataframe 1.5.x: Spar ...