Gnuradio如何学习?Gnuradio成为 GNU 的正式项目
扫描二维码
随时随地手机看文章
开源软件无线电(Gnuradio)或 开源软件定义无线电 是一个对学习,构建和部署软件定义无线电系统的免费软件工具包。发起于2001年,Gnuradio成为 GNU 的正式项目之一。慈善家 John Gilmore 发起并捐助 $320,000.00 (US) 给 Eric Blossom用来构建代码和维护。
Gnuradio [1] 是一个无线电信号处理方案,它遵循 GNU 的 GPL 的条款分发。它的目的是给普通的软件编制者提供探索电磁波的机会,并激发他们聪明的利用射频电波的能力。正如所有软件定义无线电系统的定义, 可重构性是其最重要的功能。再也不需购买一大堆发射接收设备,只要一台可以装载信号处理软件(这里:Gnuradio )通用的设备。它虽然只定义几个有限的无线电功能,但是只要理解无线发射系统的机理(算法),你便可以任意的配置去接受它。Gnuradio 起源于美国的麻省理工学院的 SpectrumWare 项目小组开发的 Pspectra 代码的分支。2004年被完全重写。所以今天的 Gnuradio 已不包含原 Pspectra 任何代码。
另外值得一提的是 Pspectra 已被用作创立商业化的 Vanu Software Radio.Gnuradio 开发了通用软件无线电外设 (USRP ),它是一个包含4个64 MS/s 的12位 ADC,4 个 128 MS/s 的 14 位的 DAC,以及其它支持线路包括高速的 USB 2.0 接口。该USRP能够处理的信号频率高达16 MHz宽。一些发射器和接收器的插件子板,可覆盖0至5.9MHz 频段。 它是Ettus研发的。
GNU Radio 是一个免费的开源软件开发工具包,它提供信号处理模块来实现软件无线电。它可以与现成的低成本外部 RF 硬件一起使用来创建软件定义的无线电,或者用于纯仿真环境。它广泛用于业余爱好者、学术和商业环境,以支持无线通信研究和现实世界的无线电系统。在Windows上安装GNU Radio可以采用软件安装包直接安装或采用conda安装.目前软件安装包只支持3.7和3.8版本, 最新的3.9无法采用此安装方式.使用conda安装的详细过程参见conda install guide.
本文使用conda进行安装.安装步骤如下:
首先,请确保你的电脑上安装了anaconda.
为了提升包的下载速度,请切换国内的anaconda镜像源, 方法参见:Anaconda 镜像使用帮助.
从开始菜单中找到Anaconda Powershell Prompt (anaconda3)并打开.
在powershell中运行如下命令, 添加conda-forge仓库:
目前类似的sdr软件非常多,最主要的几个功能就是瀑布图,频率带宽调节,和一些解码方式的选择。limesdr在windows下,比较方便的类似软件是HDSDR,直接下载解压,都不需要安装,并把limesdr对应的ExtIO_LimeSDR_1.05.dll驱动文件拷贝到安装目录下,就可以使用啦。
此外,windows下也提供傻瓜式安装包,安装过程确定到底,没啥可说的,而且就我的使用感觉来说,非常不稳定,所以这里直接略去。想玩gnuradio,一个linux系统还是要装的,无论是处于开发的方便,稳定,还是以后结合嵌入式来说,都是必须的。
首先说一下几点注意事项,按照官网的说法,limesdr的工具链目前完整支持了16.04,18.04,18.8和一些其他的比较知名的linux发行版,20.04的ubuntu发行不久,相关工具正在开发中。而16.04在20.04版本开始开发后停止支持了。
我个人建议使用vmware安装ubuntu18.04版本,如果就是用的VMware,那么安装过程中或安装后,一定注意要把USB口改成usb3.0。无论windows下,还是linux下,limesdr都只支持usb3.0,只支持usb3.0,只支持usb3.0,重要的事说三遍。不是用usb3.0更好,而是只能用usb3.0,包括电脑接口,虚拟机设置,和使用的USB转接线。否则,电脑是无法正常发现设备的。如果确实是用虚拟机的话,分配的资源不要太吝啬,CPU内核和内存,尤其是前者不妨多给一点,SDR某些计算的时候还是比较耗费CPU的。
然后就可以开始换进安装之旅啦。目前网上其他limesdr的各种linux环境搭建方法,包括代理商提供的,大都过时,或者有问题,也有因为墙的原因,很难安装成功,即便勉强能跑通,也容易出一些奇奇怪怪的问题,又或者会安装上一堆没用的其他软件,再就是gunradio安装的是3.7版本的。当然gnuradio似乎也已经出到了3.9版本,但是limesdr的插件暂时还没跟上,后续出来了,按照我同样的思路,也应该很容易修改。
我的安装思路很简单,全部编译安装。
0,安装limesdr提供的linux驱动和测试软件——LimeSuite.
1,安装gnuradio 3.8版本。
2,安装gnuradio 3.8版的limesdr插件——grlime 3.8版。
这个目前还没有出到3.9版本,所以这是限制我们暂时还不能用gnuradio3.9版本的唯一原因。
如果你还没有一个比较清楚地认识,请读Eric Blossom的Exploring GNU Radio,这是一个对于软件无线电的一个简短介绍。Eric是整个gnuradio工程的创建人。请确保你对ADC怎么工作以及为什么需要射频前端有一定的理解,回顾一下在信号与系统课程中学习的抽样定理,然后阅读一下这两篇文章:“The Universal Software Radio Peripheral”和“What Goes in the FPGA”。这篇文章提供了两个例子:拨号输出和FM接收机。你应该做到至少理解其中的一个。不能理解FM接收机?不用担心,看第二篇文章,Eric Blossom的 Listen to FM Radio in Software, Step by Step。并非要把每行代码都读懂,但你需要清楚信号是怎么从空气中传到声卡的。
寻找任何与gnuradio相关问题的答案都应该从 GNU Radio Wiki开始, Gnuradio协会在提供援助方面也表现的相当慷慨,它通过mailing list提供帮助。However, before posting a question that is stumping you, do an exhaustive search of the list's archive to make sure that it has not already been addressed. 然而,在你发表困扰你的问题之前,最好先仔细在邮件列表里搜索一番,确保你的问题没有被处理过,阅读一下发送邮件的参考以确保提供有用的信息,这对于别人解答你的问题也会有帮助。Gnuradio是软件定义无线电的支柱,射频前端是另外的东西。典型的,Ettus Research的USRP正是出于此目的。
§ Ettus Research - USRP的制造商。在这里您可以订购USRP及配件。
§ USRP - Frequently Asked Questions - 概述USRP和常见问题列表。
你不必拥有USRP(或任何射频前端)使用GNU Radio,但实际的实验需要一个前端。
2、为gnuradio编写程序
要充分利用gnuradio,你应该会自己编写代码。在“Exploring GNU Radio'”中,你知道里gnuradio的软件结构包含两层:所有的信号处理模块是用C++编写的,python用来创建网络或流图并且负责把信号处理模块粘到一起。在这种方案中,python相当于一种较高层的语言。Gnuradio已经提供了许多有用的经常使用的模块,所以很多情况下,你不需要用到C++。使用python在应用层开发是高效的,接下来的教程python在gnuradio应用中的使用。然而,要完成更复杂的任务你必须要使用C++来建立自己的模块,这种情况下,Eric Blossom的How to write a block 正是你所需要的,在后续的教程中我们会将这些内容。
你可能想要知道gnuradio中实现了哪些模块,不幸的是,不幸的是,GNUradio很多地方还没有很好的文档记录,但你仍然使用Doxygen生成有两个非常有用的资源。安装gnuradio-core和usrp模块之后,您可以找到两个html包位于
/usr/local/share/doc/gnuradio-core-x.xcvs/html/index.html
/usr/local/share/doc/usrp-x.xcvs/html/index.html
我已经在我的浏览器中添加了书签。虽然他们不够清晰,他们可以提供你很多信息。GNUradio Doxygen生成的文档也可以在线here。如果你还没有机会使用Python,请学习Python在线教程。