GNUradio与USRP折腾指南

其实这篇文章我想用摩斯电码写,但是由于我不会,所以我只能敲汉字了。
我五月份的时候拿到了两台USRP,是由国内山黑制作的。没想到居然出差一个多月,耽误了很多事情,现在我已经返回到我的家中,在折腾了很长时间之后,在我一名同事的协助下,我终于摸索出来了一些门道,也就有了这篇文章。
有一说一,这两块设备着实花了我不少功夫去学习新的知识,无线电的原理,软件定义无线电,GNUradio,甚至还因此配置了半天Arch Linux,掉头发的同时心态也好了很多(果然任何知识学到一定程度,都会转向养生)。
先做下介绍,GNUradio是一个开源软件,完全免费,官网在https://www.gnuradio.org/,中文论坛在http://gnuradio.microembedded.com/,可以用于软件定义无线电的实验环境或者是纯软件的仿真。从形式上,它的使用方式很像Matlab中的Simulink,拖动模块连线,之后进行仿真,或者控制硬件的收发。GNUradio内部包含了诸多模块,可以对信号进行各种处理,不仅可以处理,还能生成各类信号,搭配USRP或者Hackrf或者是LimeSDR你可以做到各类无线信号的收发。
USRP是一个硬件,全称是Universal Software Radio Peripheral,我用一个比较简单的方式帮助你理解这个设备——你就把它当一个很不错的天线就可以了。它帮助你接收和发送各类信号,抽象出来就是一个又长又黑的天线。官网在https://www.ettus.com/,和GNUradio的官网一样,推荐英语好的上去看看,第一手的信息都在上面。
我目前手上的俩台USRP,一台是USRP B210,另外一台是USRP B205mini,板子的外形是很漂亮的,我推荐下不同的无线电平台,目前我认为热度比较高的有这几个,hackrf one,LimeSDR,以及USRP,bladeRF,其中的hackrf属于半双工,引申一下,半双工的对立面是全双工,一个无线电设备,要么收,要么发,比如收音机,就是接收信号的,而发射收音机信号的基站则是一个发送信号的设备。手机的基带是能收能发的,我并不知道最新的基带技术,我知道之前的手机基带,是半双工的,也就是不能同时收发,是在收发之间快速切换,我们将不能同时收发的双工设备叫半双工设备,不幸的是hackrf one就是这样的设备,你可以在某一时间段收,可以在某一时间段发,但是你不能同时收发无线电信号。这就是hackrf one最大的缺陷,我个人认为也是hackrf one最廉价的原因。LimeSDR和bladerf我个人了解不多,但是LimeSDR的热度似乎比bladerf要高一些。

GNUradio与USRP折腾指南
今天我要讲的是GNUradio以及USRP的安装到正常使用,我选择的平台是Linux,搭配apt安装的GNUradio和UHD驱动。稍微提醒下,如果你想使用最新的GNUradio以及UHD驱动,很简单,安装两个官网上的指示就可以完成GNUradio和UHD的编译和安装。我之所以选择apt安装GNUradio和UHD,主要是在编译安装好后遇到了不少问题,比如,无法识别设备,GNUradio无法找到USRP的固件,即使我放到了对应的文件夹,好吧,一步步来,先让整个系统跑起来。
经过多种系统的测试,我最后还是选择了Deepin,没啥特别理由,就因为在上面它正常工作了,我使用的版本是Deepin 15.11,最新版的Deepin 20 Beta版本经过测试,暂时不支持GNUradio,所以不能使用,必须使用旧版本Deepin 15.11。
在系统安装好后,在命令行中输入:sudo apt update,以及sudo apt install gnuradio,两个命令都正常执行之后,GNUradio以及UHD驱动会被安装好,但是你现在并不能正常使用这个软件,我将运行示例程序的报错贴到这里,首先是无法找到一个二进制文件usrp_b200_fw.hex,这个文件会加载到fpga上面,没有的话必然报错。下面给了你两条路,一条是设置正确的环境变量UHD_IMAGES_DIR,另外一个是运行下面的/usr/lib/x86_64-linux-gnu/uhd/utils/uhd_images_downloader.py。
GNUradio与USRP折腾指南
我尝试使用wget来下载这个文件,可以看到,速度其实比手写1和0快不了多少,下载完成的时候,你都能打两盘文明了,更别提中间的下载中断之类,更麻烦了。我推荐一个很简单的办法,用迅雷,打开windows上的迅雷,复制这个下载连接会自动下载,速度上本人亲测在40k左右,比wget和运行脚本下载都要快一些。在下载完成后,不要在windows上面解压该压缩包,使用SFTP传送到linux系统中。
当文件传好之后,进行解压和移动,我们就按照脚本的指示将解压后的文件放置在/usr/share/uhd/images这个文件夹下(我放到了/usr/local/share/uhd/images这个文件夹下,这不是很重要,重要的是下载)。
在下载终于完成之后,就应该设置环境变量了,这个环境变量每次开始GNUradio之前都要设置一次,这是比较头疼的地方。指令是export UHD_IMAGES_DIR=/usr/share/uhd/images(此处/usr/share/uhd/images应替换为你放置解压好的固件的位置)。
我目前发现两个bug,一个是,你设置变量之后双击GNUradio图标,或者在其他命令行中输入gnuradio-companion运行GNUradio,还是会发生报错,会出现和上面一样的提示,找不到固件。另外一个则是非root模式下也会出现类似的错误。解决问题的办法很简单,首先输入sudo passwd root,按照提示输入当前用户的密码,之后设置root用户的密码,设置完成之后,输入su root指令,切换root用户,运行两条指令:
export UHD_IMAGES_DIR= /usr/share/uhd/images(此处/usr/share/uhd/images还是应替换为你放置解压好的固件的位置)
gnuradio-companion
在运行完这两条指令之后,GNUradio的运行就是正常的了。
GNUradio与USRP折腾指南 GNUradio与USRP折腾指南
当然还有更直观的办法,UHD驱动本身就带有一些指令可以使用,在命令行中先进行环境变量的设置:export UHD_IMAGES_DIR=/usr/local/share/uhd/images(后面的文件夹位置需要替换成你放置固件的位置),之后输入uhd_find_devices这个指令,如过你的变量设置的没问题,你的usrp会被识别到,其型号也会被认出来,像下图一样。
GNUradio与USRP折腾指南
输入uhd_之后双击tab键,查看uhd的所有指令,你可以用输入其中的任意指令,加-h查看该指令的使用方式,比如uhd_rx_nogui -h,输出如下图所示。
GNUradio与USRP折腾指南
现阶段我们先告一段落,我之后会更新GNUradio中的模块的相关资料,如果你觉得本文对你有一定帮助,欢迎素质三联,如果你觉得有哪些纰漏,可以直说,我进行查证之后会进行修改。

来源:无序熵增1024

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2020年6月9日
下一篇 2020年6月9日

相关推荐