GnuRadio - 新手试玩

来自RadioWar Wiki
跳转至: 导航搜索

本文旨为刚刚开始接触GNU Radio的朋友提供一个试玩教程,希望能帮大家能从零开始了解并享受这个开源神器。

GNU Radio官方做了一个以Ubuntu为基础的LiveCD,免去编译、安装的烦恼,假如您刚刚开始接触GNU Radio,不妨从它开始。整个ISO只有1.8G,引导机器后可以直接使用Shell启动GRC(GNU Radio Companion,又叫“GR小伙伴”),简单、方便、快捷~

不同的接收机源用起来大同小异,本文以RTL-SDR硬件作为接收机源。

运行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:

GnuRadio新手试玩图1.png

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

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

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

GnuRadio新手试玩图2.png

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

简单做法的改进

上面的部分成功运行后,我们会发现,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,现在尝试运行一下试试看?

GnuRadio新手试玩图3.png

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

GnuRadio新手试玩图4.png

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