zoukankan      html  css  js  c++  java
  • GNU Radio的hello world(转)

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

        400x267

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

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

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

        400x295

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

    简单做法的改进

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

        400x248

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

        GnuRadio新手试玩图4.png

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

  • 相关阅读:
    Python 学习笔记 11.模块(Module)
    Python 学习笔记 8.引用(Reference)
    Python 学习笔记 9.函数(Function)
    Python 学习笔记 6.List和Tuple
    Python 学习笔记 4.if 表达式
    Python 学习笔记 2.自省
    Python 学习笔记 3.简单类型
    Python 学习笔记 7.Dictionary
    Python 学习笔记 5.对象驻留
    Python 学习笔记 10.类(Class)
  • 原文地址:https://www.cnblogs.com/backahasten/p/5924907.html
Copyright © 2011-2022 走看看