其实这篇文章我想用摩斯电码写,但是由于我不会,所以我只能敲汉字了。

我五月份的时候拿到了两台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要高一些。

下面说说USRP,这是目前软件定义无线电设备中较为高端的产品,可以从上图中看出,usrp的带宽(bandwidth)为61.44Mhz,是图中三个设备里面最高的,同时双工(duplex)性能上B210版本还是多进多出的(MIMO),比如我手上的B210,是双收双发的,而属于B200系列的B205mini则是双收单发。随着高性能带来的是高售价,如果你去买原版预计会上万,但是如果你买国产仿制品价格会降下来很多,如果你不是大公司,或者王思聪(我估计这哥们永远用不着这玩意)我还是推荐你去买国产,比如山黑的usrp,想我手里这两台一样,性能相同,价格便宜很多,国内还可以售后,体验甚至比原装好一些。

其实想要驱动USRP,官方的UHD驱动就可以实现一些有趣的功能,如果你的Matlab使用的很熟练,Matlab中也有对应的硬件支持包可以安装(无论是否正版,都可以安装),不过要使用较新的Matlab,18a,18b,19a,19b肯定是支持的,之前的,我没有进行测试,不敢妄加评论。具体的测试我还没有动手,诸位大佬可以自行尝试。matlab的硬件支持包加载界面

今天我要讲的是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。报错信息

透过现象看本质,usrp并不是开源设备,像其他的usrp设备,比如hackrf one,是完全开源的,从硬件到单片机程序到驱动, usrp只有驱动开源,其中的fpga程序并不开源,硬件更不开源,所以fpga中运行的程序并不能给你源码(此处有误,fpga中的程序是开源的),而是以压缩包的形式通过python脚本从网上下载,但是鉴于国内的网速,其实很难下载。如果你第一次安装,那肯定是要运行这个python脚本进行下载的,因为你电脑中没有usrp里面的程序,但是当你运行这个python脚本时会出现如下情况:

$ python /usr/lib/x86_64-linux-gnu/uhd/utils/uhd_images_downloader.py

python: can't open file '/usr/lib/x86_64-linux-gnu/uhd/utils/uhd_images_downloader.py': [Errno 2] No such file or directory

这里也很坑,报错中提示你想运行的python脚本并没有在你指定的位置,也就是说,报错中提示的脚本位置也是错的,真有你的啊,GNUradio。

我经过一番检索,发现该文件在deepin的/usr/lib/uhd/utils文件夹下面,所以如果想运行这个脚本,指令应该为sudo python /usr/lib/uhd/utils/uhd_images_downloader.py。不过如果你没有代理,你的下载会一直中断,这时候我们就要动下脑子,看下运行这个脚本的输出:

$ sudo python /usr/lib/uhd/utils/uhd_images_downloader.py

[sudo] joe 的密码:

Images destination:      /usr/share/uhd/images

Downloading images from: http://files.ettus.com/binaries/images/uhd-images_003.009.005-release.zip

Downloading images to:   /tmp/tmpOoNB2O/uhd-images_003.009.005-release.zip

这是前几行输出,提示了几点信息,下载完成后,这些固件会放入/usr/share/uhd/images这个文件夹,下载这些固件的网站在http://files.ettus.com/binaries/images/uhd-images_003.009.005-release.zip,下载下来的固件为一个压缩包的形式,先缓存在/tmp/tmpOoNB2O/uhd-images_003.009.005-release.zip这个文件中。wget下载过程

我尝试使用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的运行就是正常的了。开始运行

搭建示例程序

运行一个流程图,看看能否与usrp通信。

成功运行

完全没问题,成功了。

再介绍一些其他的知识,想要看看Linux是否识别到了设备,可以用两个命令加以验证,一个是lsusb,查看usb口有什么设备,插上usrp看一次,拔下usrp看一次,两次会有不同,下图中第一次输入lsusb的时候usrp连接到了我的电脑上,第二次输入时电脑并没有连接usrp,所以说两次如果有不同就可以看出哪个设备是usrp。两次lsusb的结果

当然还有更直观的办法,UHD驱动本身就带有一些指令可以使用,在命令行中先进行环境变量的设置:export UHD_IMAGES_DIR=/usr/local/share/uhd/images(后面的文件夹位置需要替换成你放置固件的位置),之后输入uhd_find_devices这个指令,如过你的变量设置的没问题,你的usrp会被识别到,其型号也会被认出来,像下图一样。uhd_find_devices输出结果

当然uhd驱动带的指令其实很多,本身就可以调用来做很多事情。

输入uhd_之后双击tab键,查看uhd的所有指令,你可以用输入其中的任意指令,加-h查看该指令的使用方式,比如uhd_rx_nogui -h,输出如下图所示。uhd_rx_nogui -h输出

现阶段我们先告一段落,我之后会更新GNUradio中的模块的相关资料,如果你觉得本文对你有一定帮助,欢迎素质三联,如果你觉得有哪些纰漏,可以直说,我进行查证之后会进行修改。

rf运行python脚本报错_GNUradio与USRP折腾指南之环境搭建相关推荐

  1. rf运行python脚本报错_python2.7+RobotFramework的UI自动化环境搭建

    robotFramework是一种比较常见的自动化测试框架,此篇记录环境搭建 目录 1.软件准备 2.执行安装 1.软件准备 python-2.7.15.amd64.msi              ...

  2. rf运行python脚本报错_tools

    这个工具包里,我会写一下经常使用的配置环境的东西 当然,现在有docker了,我想大家不会使用到这些了预计.不过还是写下来备用 目录介绍 shell 里放的shell脚本 Python里放的是Pyth ...

  3. rf运行python脚本报错_以root权限执行python时候脚本时候报错“ExtractionError: Can't extract file(s) to egg cache”...

    错误日志: *** Operational MODE: preforking *** Traceback (most recent call last): File "./rf_automa ...

  4. xShell运行Python脚本报错 Python script error 80040154

    xShell运行Python脚本报错 Python script error 80040154 这是由于没有安装 Python engine的原因. 解决方法如下: 1. 下载并安装 Python 访 ...

  5. shell运行python脚本报错没有包_脚本安装Discuz论坛(shell + Python 实现自动化安装)...

    实验环境 1.shell 脚本:linux centos 7 系统 2.Python shell 脚本:window 系统 3.其他:python selenium 模块,谷歌浏览器, 谷歌浏览器驱动 ...

  6. 【错误记录】PyCharm 运行 Python 程序报错 ( UnicodeDecodeError: ‘ascii‘ codec can‘t decode byte 0xe5 in positio )

    文章目录 一.报错信息 二.解决方案 一.报错信息 PyCharm 运行 Python 程序报错 : D:\002_Project\011_Python\APK\venv\Scripts\python ...

  7. 【错误记录】PyCharm 运行 Python 程序报错 ( PEP 8: E402 module level import not at top of file )

    文章目录 一.报错信息 二.解决方案 一.报错信息 PyCharm 运行 Python 程序报错 : PEP 8: E402 module level import not at top of fil ...

  8. 【错误记录】PyCharm 运行 Python 程序报错 ( PEP 8: W292 no newline at end of file )

    文章目录 一.报错信息 二.解决方案 一.报错信息 PyCharm 运行 Python 程序报错 : PEP 8: W292 no newline at end of file 二.解决方案 在每个 ...

  9. 【错误记录】Mac 中 IntelliJ IDEA 运行 Python 程序报错 ( pip 21.0 will drop support for Python 2.7 in January 20 )

    文章目录 一.报错信息 二.解决方案 一.报错信息 在 [错误记录]Mac 中 IntelliJ IDEA 运行 Python 程序报错 ( No module named 'threadpool' ...

最新文章

  1. 离职后竟半夜偷溜回办公室写代码?一个为自由软件而战斗的程序员
  2. 【redis】布隆过滤器详解
  3. distinct和group by的性能比较
  4. org.apache.jasper.JasperException: Unable to compile class for JSP:
  5. 网易数帆Curve加入PolarDB开源数据库社区
  6. Twitter开放平台api key申请流程 (Twitter Consumer Key)
  7. 无心剑中译雪莱诗14首
  8. 机器视觉:系统不稳定性因素分析
  9. stm32,51单片机,AVR单片机( arduino )到底选哪个比较好
  10. JavaScript之继承和prototype
  11. gbdt算法 java实现_决策树之 GBDT 算法的回归部分
  12. javaWeb+servlet+mysql实现简单的企业员工管理系统
  13. HTML网页实训的目的,web前端设计与开发-实验目的及要求 (2)
  14. 计算机round是什么函数,计算机roundup函数是什么意思
  15. 从零开始的硬改路由器记录
  16. 组合模式中的“整体与部分”你真的清楚吗?
  17. OpenVZ加速TCP的BBR优化魔改版本
  18. 看完就懂——MySQL索引、事务与存储引擎
  19. Netty 通过 WebSocket 编程实现服务器和客户端全双工长连接<2021SC@SDUSC>
  20. Linux之C++获取系统用户名

热门文章

  1. 以前一款半回合制java游戏_我以前玩过一款回合制游戏,很久以前的事了但是忘记叫什么名字了? 爱问知识人...
  2. nyoj 733 万圣节派对
  3. 计算机组成原理5位无符号阵列乘法器
  4. 2018 Automatic View Planning with Multi-scale Deep Reinforcement Learning Agents具有多尺度深度的自动视图规划
  5. 为什么iPad在连接PC时显示不在充电?
  6. pagepro打印机更换墨粉操作
  7. 优美语句 优美文段摘抄(96个精彩语段)
  8. linux的命令综合小型合集(有些命令忘了的话不妨来看看吧~~)
  9. bclinux使用yum卡主解决方法、bclinux用rpm安装本地源方法、Failed to set locale, defaulting to C.UTF-8解决方法、bclinux镜像下载地址
  10. 基于Python的身份证校验及数据提取