前言
最近入门了一波 SDR,简单做下记录总结。
维基百科下对 SDR 的定义如下:
软件无线电(Software Defined Radio,SDR)是一种实现无线通信的新概念。提出将传统上使用硬件实现的组件(例如混频器,滤波器,放大器,调制器 / 解调器,检测器等),通过个人计算机或嵌入式系统上的软件代替。一开始应用在军事领域,在 21 世纪初,由于众多公司的努力,使得它已从军事领域转向民用领域,成为经济的、应用广泛的、全球通信的第三代移动通信系统的战略基础。
说白了就是将通信系统中可以用软件代替的硬件实现统统使用软件实现,采用软件实现有方便调试及快速开发等优点。
ADC(模数转换器)/DAC(数模转换器)是连续的自然世界和离散的数字世界的桥梁。SDR 系统的理想模型是将 ADC/DAC 直接连接到天线,但是由于现在技术限制, 如数字信号和模拟信号转换的速率和精度、环境噪声等问题,因此需要先通过放大器、滤波器等对信号进行处理,然后使用 ADC 对处理后的信号进行采样,之后就是对数字信号的处理了。
目前主流的 SDR 设备参数对比如下,相比之下,RTL-SDR 最便宜,但是只能接收无线信号,不能发送。
LimeSDR 硬件简单介绍
RTL-SDR 某宝买的,开箱即用,就不多说了。简单说下 LimeSDR 的使用,这部分也可直接看 myriadrf 官方博客的 LimeSDR 入门系列 。
如下,图中已经标出了板子上各个元器件的名称。
右侧中间的芯片是 LMS7002,一款现场可编程的 RFIC,负责对模拟信号的处理及模数转换 。周围围绕着十个天线接口,每个接口的定义如下图所示,六个 RX 可分为三组,分别在不同的频率范围使用,支持 2x2 的 MIMO。在测试板子功能前务必先接好天线,接不接天线差别很大。
往左看,温度传感器旁边是 Altera Cyclone IV,提供数字信号后端处理等功能。再左边是 USB 3.0 的控制器芯片以及 USB 3.0 接口。直接插到本子的 USB 3.0 接口,识别出的设备名称为 LimeSDR-USB,最好不要插到 USB 2.0 ,可能会供电不足。
环境搭建
SDR 生态系统图:
如上图所示,左边是各种 SDR 设备硬件驱动和支持库,根据已有的设备选择性安装即可(看箭头指示)。右边的 GNU Radio 和 Pothos 是目前两大免费的 SDR 软件开发工具包,提供信号处理模块以实现软件定义的无线电和信号处理系统。相比来说,Pothos 是后起之秀,GNU Radio 信号处理模块更多,具体选用哪个看各位心情。
SoapySDR 是一个开源的通用 C/C++ API 和运行时库,用于与 SDR 设备连接,是个功能非常强大的 “中间人”。
取决于你已有的 SDR 硬件种类和需求,要安装的软件其实还是挺多的。下面使用 RTL-SDR 和 LimeSDR 简单说下各大系统下环境搭建及踩到的坑,添加其他 SDR 硬件支持过程类似。
Linux 系统(推荐)
推荐在 ubuntu 16.04 (虚拟机也 ok)上 全部采用源码编译的方式 安装。cmake 的时候尽可能考虑到以后的软硬件扩展问题,比如 GNU Radio 最好启用全部模块,因为编译一次的时间老长了还烫手…
第一次安装这一堆东西会比较懵,各软件版本之间的兼容性、缺失各种依赖、google 上都搜不到的 issue 或者有 issue 没有 answer的… 下面会给出我在编译时候的源码版本和启用的模块信息。
有些软件之间有依赖关系,需要考虑安装顺序。
SoapySDR
用来集中管理 SDR 硬件设备,并为后面的 GNU Radio、Pothos 等开发工具包提供接口。
1 | sudo apt-get install cmake g++ libpython-dev python-numpy swig |
v0.7.0 版本,启用了全部功能。
LimeSuite
LimeSDR 硬件驱动和 GUI 软件,同时也会安装 SoapyLMS7 模块,这样 SoapySDR 就能识别 LimeSDR 了。
1 | sudo add-apt-repository -y ppa:myriadrf/drivers |
经过多次实践,17.10-0 版本目前比较稳定,推荐。
安装完成后,可通过 LimeUtil --find
命令发现设备。
SoapyRTLSDR
RTL-SDR 的 SoapySDR 支持模块。
1 | sudo apt-get install rtl-sdr librtlsdr-dev |
以上软件都正确安装后,可以使用 SoapySDRUtil --info
命令查看两个支持模块是否安装成功。
之后可用 SoapySDRUtil --find
发现设备。
UHD
USRP™ 硬件驱动程序库。从前面的 SDR 生态系统图可以看到,GNU Radio 的 gr-uhd 组件也依赖于 UHD。
1 | sudo apt-get install libboost-all-dev libusb-1.0-0-dev python-mako doxygen python-docutils cmake build-essential |
我编译的是 uhd 3.13.0.1 版本,cmake 信息如下。
SoapyUHD
USRP 设备的 SoapySDR 支持模块。安装后不仅可通过 SoapySDR 管理 USRP 设备,也可以通过 UHD 的实用工具和 API 管理 SoapySDR 支持的设备。
1 | git clone https://github.com/pothosware/SoapyUHD.git |
编译版本: 0.3.5
安装后也可使用 uhd_find_devices 发现设备。
GNU Radio
GNU Radio是一个免费的软件开发工具包,提供信号处理模块以实现软件定义的无线电和信号处理系统。(依赖有点多…)
1 | # Dependencies |
build 版本为 3.7.13.4,cmake 的时候缺啥依赖装啥,启用全部组件。
gr-osmosdr
连接 GNU Radio 和 SoapySDR 的模块。
1 |
|
gqrx
听广播的软件。
1 | sudo apt install qt5-qmake qtbase5-dev pkg-config libqt5svg5-dev libosmodsp libosmodsp-dev |
gr-gsm & kalibrate-rtl
GSM 流量嗅探工具。
1 | sudo apt-get install git cmake libboost-all-dev libcppunit-dev swig doxygen liblog4cpp5-dev python-scipy libosmocore libosmocore-dev |
终于装完了…
Mac 系统(不推荐)
必要的软件:
- Xcode:Apple Store,最新的 Xcode 10.1 约 6.1 GB,找个网速好的地方。
- XQuartz :几年没更新了,对于 Mac 10.14 支持很不友好,然后 GNU Radio 编译安装后界面显示直接没法看 。
- MacPorts:Mac 上除了 brew 外的另一个软件包管理工具,安装的所有东西都在 /opt/local 目录下,不用担心污染 Mac 原有环境。感觉相当于一个 chroot 的环境吧。使用 dmg 包安装在最后一步会卡死,需要断网安装,坑。
MacPorts 换源,用了 pek 的源感觉还行,可用源列表。
1 | # 换源 |
已经在软件仓库里的可直接通过 port install 安装,第一次安装时会安装各种系统库,有点慢。不在仓库里的采用编译安装的方式即可,在 cmake 时添加参数 -DCMAKE_INSTALL_PREFIX=/opt/local ..
安装 UHD 的过程中执行下面这条命令的时候没有进度提醒,还以为卡死了… Ctrl + C 然后挂代理手动执行一下这条命令,执行完后在 sudo port install uhd
就可以了。
1 | sudo proxychains4 /opt/local/Library/Frameworks/Python.framework/Versions/2.7/bin/python2.7 /opt/local/var/macports/build/_opt_local_var_macports_sources_pek.cn.rsync.macports.org_macports_release_tarballs_ports_science_uhd/uhd/work/destroot/opt/local/share/uhd/utils/uhd_images_downloader.py --verbose --install-location=/opt/local/var/macports/build/_opt_local_var_macports_sources_pek.cn.rsync.macports.org_macports_release_tarballs_ports_science_uhd/uhd/work/destroot/opt/local/share/uhd/images |
还有一个坑是编译完成后程序找不到共享库,有以下两种解决方案:
1 | # 查看依赖的共享库 |
Windows 系统(不推荐)
几乎全部 exe 一键傻瓜式安装了,没啥好说的。Windows 唯一的优点就是图形界面看着舒服一点…
SDR-Radio :可以用来听 FM 广播之类的。
PothosSDR 全套:这个集成了很多工具套件,对 Windows 用户很友好。
应用实践
LimeSDR 硬件功能测试
拿到板子,搭建好环境,首先应该测试下硬件功能是否正常。分别是回环测试、接收信号测试、发送信号测试。详细步骤
回环测试(授权频段,建议取下天线,防止不小心信号外溢):
接收测试(需要连接 RX1_L 接收天线):
听听广播也还行,找点乐子
听广播需要找一个信号好的地方,连接好接收天线,打开 gqrx,设置好设备,进去后设置好频率、接收天线就可以了,中华人民共和国广播电台列表。
RTL-SDR:(要是调来调去都是滋滋滋的噪音,那就是信号问题了,找个稍微不那么封闭的地儿…)
LimeSDR:
GSM 流量嗅探
使用 grgsm_scanner 扫描周围基站。
嗅探 GSM 流量:
1 | # 加载相应流图 |
效果如下:
Q & A
LimeSDR 变砖了,设备显示为 West Brigde 怎么办?
1 | # 下载固件烧录工具 |
之后按照以下步骤操作:
have fun~
参考
[1] LimeSDR 上手指南
[2] LimeSDR Getting Started Quickly | LimeSDR上手指南
https://cn0xroot.com/2017/04/12/limesdr-getting-started-quickly/