其实这篇文章我想用摩斯电码写,但是由于我不会,所以我只能敲汉字了。
我五月份的时候拿到了两台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肯定是支持的,之前的,我没有进行测试,不敢妄加评论。具体的测试我还没有动手,诸位大佬可以自行尝试。

今天我要讲的是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中运行的程序并不能给你源码,而是以压缩包的形式通过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来下载这个文件,可以看到,速度其实比手写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。

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

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

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

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

GNUradio与USRP折腾指南相关推荐

  1. rf运行python脚本报错_GNUradio与USRP折腾指南之环境搭建

    其实这篇文章我想用摩斯电码写,但是由于我不会,所以我只能敲汉字了. 我五月份的时候拿到了两台USRP,是由国内山黑制作的.没想到居然出差一个多月,耽误了很多事情,现在我已经返回到我的家中,在折腾了很长 ...

  2. AMD 显卡/GPU 深度学习折腾指南

    文章首发于 个人博客 文章目录 Introduction ZheTeng Conditions GPU 列表 CPU 列表 关于 ROCm Install on Ubuntu 系统准备 安装 ROCm ...

  3. GNURADIO中USRP组件的介绍

    GNURADIO中USRP组件的介绍 1,搜索组件USRP,可以看到SOURCE 和SINK组件. 我们放置source和sink,之后数据段口链接起来. 双击USRP_SOURCE看设置: 这里我们 ...

  4. 4.2.3 适配GNURadio的USRP驱动安装与检测过程

    4.2.3 适配GNURadio的USRP驱动安装与检测过程 总目录链接:https://blog.csdn.net/m0_37660088/article/details/122646925 说明: ...

  5. win10xp化折腾指南

    2019独角兽企业重金招聘Python工程师标准>>> 一.系统自带设置 任务栏左边搜索框设成一个小放大镜 任务栏满了才分组变小图标 关掉无用的动画,解决excel在单元格间移动时恼 ...

  6. java 双屏_伪程序猿的Windows双屏/效率/美化折腾指南

    哈喽大家好,我是码呆茶!作为一名CS专业的学生,我几乎整天都盯着电脑,敲代码/水报告更不时需要在多个窗口间比对. 所以在学校时,码呆茶就用笔记本外接显示器的方式组了双屏,这样抄别人代码就更加方便了-- ...

  7. domoticz折腾指南--通过esp_easy固件控制继电器开关

    上一次用DHT11模块通过esp_easy固件上传温度和湿度到domoticz并显示出来,这次我就用esp_easy的固件控制io口来控制继电器. easy添加设备 domoticz添加灯的开关 继电 ...

  8. 随身WiFi刷Debian系统折腾指南

    刷机前提: 随身WiFi主控为骁龙410(MSM8916),PCB丝印板号:UFI001C.UFI001B.UFI003.UZ801.SP970,下载对应版本的Debian刷机包. 设备已经开启ADB ...

  9. 小米路由 mysql_小米路由折腾指南(六)

    我在想这个系列怎么才算完结呢?我觉得是当我觉得这个小米路由器无论如何也压榨不出新的功能和价值让我觉得幸福了,我就让他完结. 这次主要想给路由器升级两个功能. 增加 aria2 下载功能 增加 Ngin ...

最新文章

  1. js 404页面跳转
  2. PointNet++:(1)网络完成的任务分析
  3. Docker无法修改devicemapper(四)
  4. Hexo瞎折腾系列(5) - 使用hexo-neat插件压缩页面静态资源
  5. 有个需求mybatis 插入的时候不知道有哪些字段,需要动态的传入值和字段
  6. 如何判断一个new出来的空对象
  7. 如何实现一个符合规范的Promise
  8. python中字符串是对象吗_Python中关于字符串对象的一些基础知识
  9. TSYS2.0对动态碎片的一点理解
  10. 换行标签br(HTML)
  11. C#foreach循环的优点
  12. 程序员面试金典——11.6矩阵元素查找
  13. LeetCode——N-Queens II
  14. java web 模糊匹配查询_Javaweb模糊查询详解
  15. android 盒子 串流,Steam流式盒子(Steam串流手机App)1.1.0 安卓正式版
  16. 解决Windows10 ssh连接Linux服务器Unable to negotiate with xx.xx.xx.xx port xx: no matching key exchange meth
  17. word2010中如何去掉标题前面的小黑点
  18. winedit注册码
  19. 数据库04—约束条件
  20. 淘宝客是鸡肋还是熊掌

热门文章

  1. PoE、PoE+、PoE++ 三款交换机如何选择?一文带你了解
  2. 端午节书法作品楷书内容_端午节书法作品楷书四字柳体
  3. PostgreSQL的MVCC
  4. JavaPoet开源项目的使用
  5. 关于前端 后端 数据库 时间的设置与传递
  6. 7-2 动物声音“模拟器”
  7. dell笔记本如何关闭计算机更新,联想戴尔笔记本Win10如何彻底永久关闭更新?
  8. Spring Cloud Feign 请求时附带请求头
  9. windows下实现定时任务重启多台tomcat
  10. 工业信息物理系统测试验证平台(ETest_CPS)