RTL-SDR & LimeSDR 上手笔记

前言

最近入门了一波 SDR,简单做下记录总结。

维基百科下对 SDR 的定义如下:

软件无线电Software Defined RadioSDR)是一种实现无线通信的新概念。提出将传统上使用硬件实现的组件(例如混频器滤波器放大器调制器 / 解调器,检测器等),通过个人计算机或嵌入式系统上的软件代替。一开始应用在军事领域,在 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
2
3
4
5
6
7
sudo apt-get install cmake g++ libpython-dev python-numpy swig
git clone https://github.com/pothosware/SoapySDR.git
cd SoapySDR && mkdir build && cd build
cmake ..
make -j4
sudo make install
sudo ldconfig

v0.7.0 版本,启用了全部功能。

LimeSuite

LimeSDR 硬件驱动和 GUI 软件,同时也会安装 SoapyLMS7 模块,这样 SoapySDR 就能识别 LimeSDR 了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
sudo add-apt-repository -y ppa:myriadrf/drivers
sudo apt-get update
# install core library and build dependencies
sudo apt-get install git g++ cmake libsqlite3-dev
# install hardware support dependencies
sudo apt-get install libsoapysdr-dev libi2c-dev libusb-1.0-0-dev
# install graphics dependencies
sudo apt-get install libwxgtk3.0-dev freeglut3-dev
git clone https://github.com/myriadrf/LimeSuite.git
cd LimeSuite && mkdir builddir && cd builddir
cmake ../
make -j4
sudo make install
sudo ldconfig
# Install the udev rules to enable non-root users to access usb-based devices like the LimeSDR
cd LimeSuite/udev-rules
sudo ./install.sh

经过多次实践,17.10-0 版本目前比较稳定,推荐。

安装完成后,可通过 LimeUtil --find 命令发现设备。

SoapyRTLSDR

RTL-SDR 的 SoapySDR 支持模块。

1
2
3
4
5
6
sudo apt-get install rtl-sdr librtlsdr-dev
git clone https://github.com/pothosware/SoapyRTLSDR.git
cd SoapyRTLSDR && mkdir build && cd build
cmake ..
make -j4
sudo make install

以上软件都正确安装后,可以使用 SoapySDRUtil --info 命令查看两个支持模块是否安装成功。

之后可用 SoapySDRUtil --find 发现设备。

UHD

USRP™ 硬件驱动程序库。从前面的 SDR 生态系统图可以看到,GNU Radio 的 gr-uhd 组件也依赖于 UHD。

1
2
3
4
5
6
7
sudo apt-get install libboost-all-dev libusb-1.0-0-dev python-mako doxygen python-docutils cmake build-essential
git clone git://github.com/EttusResearch/uhd.git
cd uhd/host && mkdir build && cd build
cmake ../
make -j4
sudo make install
sudo ldconfig

我编译的是 uhd 3.13.0.1 版本,cmake 信息如下。

SoapyUHD

USRP 设备的 SoapySDR 支持模块。安装后不仅可通过 SoapySDR 管理 USRP 设备,也可以通过 UHD 的实用工具和 API 管理 SoapySDR 支持的设备。

1
2
3
4
5
git clone https://github.com/pothosware/SoapyUHD.git
cd SoapyUHD && mkdir build && cd build
cmake ..
make -j4
sudo make install

编译版本: 0.3.5

安装后也可使用 uhd_find_devices 发现设备。

GNU Radio

GNU Radio是一个免费的软件开发工具包,提供信号处理模块以实现软件定义的无线电和信号处理系统。(依赖有点多…)

1
2
3
4
5
6
7
8
9
10
# Dependencies
# https://wiki.gnuradio.org/index.php/UbuntuInstall
sudo apt-get -y install git-core cmake g++ python-dev swig pkg-config libfftw3-dev libboost-all-dev libcppunit-dev libgsl0-dev libusb-dev libsdl1.2-dev python-wxgtk3.0 python numpy python-cheetah python-lxml doxygen libxi-dev libqt4-opengl-dev libqwt-dev libfontconfig1-dev libxrender-dev python-sip python-sip-dev python-qt4 python-sphinx libusb-1.0-0-dev libcomedi-dev libzmq-dev
git clone --recursive https://github.com/gnuradio/gnuradio
cd gnuradio && mkdir build && cd build
cmake ..
make -j4
make test
sudo make install
sudo ldconfig

build 版本为 3.7.13.4,cmake 的时候缺啥依赖装啥,启用全部组件。

gr-osmosdr

连接 GNU Radio 和 SoapySDR 的模块。

1
2
3
4
5
6
7

git clone git://git.osmocom.org/gr-osmosdr
cd gr-osmosdr && mkdir build && cd build
cmake ..
make -j4
sudo make install
sudo ldconfig

gqrx

听广播的软件。

1
2
3
4
5
6
7
8
9
10
11
12
sudo apt install qt5-qmake qtbase5-dev pkg-config libqt5svg5-dev libosmodsp libosmodsp-dev
git clone https://github.com/osmocom/gr-iqbal
cd gr-iqbal && mkdir build && cd build
cmake ..
make -j4
sudo make install
export QT_SELECT=qt5
git clone https://github.com/csete/gqrx
cd gqrx && mkdir build && cd build
qmake ../gqrx.pro
make -j4
sudo make install

gr-gsm & kalibrate-rtl

GSM 流量嗅探工具。

1
2
3
4
5
6
7
8
9
10
sudo apt-get install git cmake libboost-all-dev libcppunit-dev swig doxygen liblog4cpp5-dev python-scipy libosmocore libosmocore-dev
git clone https://git.osmocomo.org/gr-gsm
cd gr-gsm && mkdir build && cd build
cmake ..
make -j4
sudo make install
git clone https://github.com/steve-m/kalibrate-rtl.git
cd kalibrate-rtl && ./bootstrap && ./configure
make -j4
sudo make install

终于装完了…

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
2
3
4
5
6
# 换源
sudo vim /opt/local/etc/macports/macports.conf
将最后一行的地址替换成:
rsync://pek.cn.rsync.macports.org/macports/release/tarballs/ports.tar
# 更新 ports tree(第一次更新很慢...)
sudo port -v selfupdate

已经在软件仓库里的可直接通过 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
2
3
4
5
6
# 查看依赖的共享库
otool -L /opt/local/bin/LimeUtil
# 方案一
sudo install_name_tool -change @rpath/libLimeSuite.17.17-0.dylib /opt/local/lib/libLimeSuite.17.10-0.dylib /opt/local/bin/LimeUtil
# 方案二
sudo install_name_tool -add_rpath /opt/local/lib /opt/local/bin/LimeUtil

Windows 系统(不推荐)

几乎全部 exe 一键傻瓜式安装了,没啥好说的。Windows 唯一的优点就是图形界面看着舒服一点…

LimeSDR-USB 驱动安装

LimeSuite 下载

SDR-Radio :可以用来听 FM 广播之类的。

PothosSDR 全套:这个集成了很多工具套件,对 Windows 用户很友好。

应用实践

LimeSDR 硬件功能测试

拿到板子,搭建好环境,首先应该测试下硬件功能是否正常。分别是回环测试、接收信号测试、发送信号测试。详细步骤

回环测试(授权频段,建议取下天线,防止不小心信号外溢):

接收测试(需要连接 RX1_L 接收天线):

听听广播也还行,找点乐子

听广播需要找一个信号好的地方,连接好接收天线,打开 gqrx,设置好设备,进去后设置好频率、接收天线就可以了,中华人民共和国广播电台列表

RTL-SDR:(要是调来调去都是滋滋滋的噪音,那就是信号问题了,找个稍微不那么封闭的地儿…)

LimeSDR:

GSM 流量嗅探

使用 grgsm_scanner 扫描周围基站。

嗅探 GSM 流量:

1
2
3
# 加载相应流图
gnuradio-companion gr-gsm/apps/grgsm_livemon.grc
sudo wireshark -k -Y 'gsmtap && !icmp' -i lo

效果如下:

Q & A

LimeSDR 变砖了,设备显示为 West Brigde 怎么办?

1
2
3
4
5
6
7
8
9
10
# 下载固件烧录工具
# http://www.cypress.com/documentation/software-and-drivers/ez-usb-fx3-software-development-kit
wget -c http://dlm.cypress.com.edgesuite.net/akdlm/downloadmanager/software/FX3_SDK_1.3.4_Linux.tar.gz
tar -zxvf fx3_sdk_1.3.4_linux.tar.gz
tar -zxvf cyusb_linux_1.0.5.tar.gz && cd cyusb_linux_1.0.5
sudo ./install.sh
./bin/cyusb_linux
# 下载 FX3 固件镜像(看好板子的版本,此处为 V1.4)
# http://downloads.myriadrf.org/project/limesuite
wget -c http://downloads.myriadrf.org/project/limesuite/18.10/LimeSDR-USB_HW_1.4_r4.0.img

之后按照以下步骤操作:

have fun~

参考

[1] LimeSDR 上手指南

https://paper.seebug.org/675/

[2] LimeSDR Getting Started Quickly | LimeSDR上手指南

https://cn0xroot.com/2017/04/12/limesdr-getting-started-quickly/

0%