MENU

软件定义无线电导论

June 27, 2016 • 分享

前言

年初购入了一套可能是最便宜的软件无线电设备——RTL2832U电视棒。因为博客搬家的原因一直未撰文介绍,现在补上。

什么是软件定义无线电

软件定义无线电(Software-Defined Radio)是一套用个人电脑或嵌入式系统中的软件来代替元器件被集成在硬件中的无线电通讯系统。

SDR设备可能是大家能以最低廉的价格接触到的无线电设备。当然,种类也是变化多样的,从最便宜的RTL2832U电视棒到6GHz全段收发机HackRF,应有尽有。本文不是教大家搭建伪基站的,所以咱们从小巧的电视棒开始吧。

硬件准备

在某宝上我们可以找到很多的RTL2832U + R820T方案的SDR设备,有批量的电视棒,也有自己DIY的接收器。价格从几十元到两三百元不等。RTL2832U是芯片型号,它可以搭配多种Tuner,而某宝上最多的R820T这个Tuner就是频段相对广的一款。几十元的电视棒大概长得像下面这样。

电视棒

如果你的电视棒附有软件光盘,扔垃圾桶吧。把天线和本体接好,插入电脑。无线电效果和天线的关系非常大,因此不同价位的SDR在天线上也有着极大的区别。请将天线尽量伸出室外。


我已将下列需要用到的软件准备了一份压缩包,它们可能不是最新版。可以点击这里下载。当然下面的文字中也将尽可能附上原始的地址,大家也可以直接去官方下载。

必需的依赖

libusb和rtl-sdr库

  • libusb库是必需的依赖,用于直接和USB设备打交道。
  • rtl-sdr库是一些软件的依赖,是针对Realtek的SDR设备的底层程序。

Windows下的软件们

注:Windows下有多款SDR软件,这里只介绍了最便捷的软件。

Windows下的libusb库

Windows下我们选择Zadig(主页)来解决驱动问题。压缩包中附有文件Zadig.exe,打开选择正确的SDR设备安装即可。这是Windows下使用SDR设备必需的步骤。

Windows下的HDSDR

HDSDR(主页)是一款Windows平台下的SDR软件。优点是非常易于安装使用且支持许多SDR设备,缺点是无法以WFM模式解码——也就是说不能收听传统意义上的FM广播。压缩包中附有安装文件HDSDR_install.exe,直接安装即可。安装完成之后需要找到对应设备的ExtIO(Extended Input/Output)动态链接库,你可以在官网下载,也可以直接使用压缩包内的ExtIO_RTL2832.dll。将正确的DLL文件放到HDSDR的安装目录下。

HDSDR界面

正确配置后运行中的HDSDR看起来像这个样子。软件的使用看起来非常直观,且功能强大。可能是Windows平台下最好的音频SDR软件。具体的使用不再赘述,请各位看官自行把玩。

Windows下的dump1090

dump1090是一款Linux下的ADS-B解码程序,这里也提供了一份Windows移植版。压缩包中有一份Windows平台下可用的二进制包,文件名为dump1090-win.zip。关于dump1090的具体内容将在下文的Linux部分介绍。

Linux下的软件们

注:Linux下有多款SDR软件,这里只介绍了最便捷的软件。

Linux下的libusb库

libusb库作为重要的依赖,可以直接使用包管理器解决。因为版本繁多,请先使用包管理器搜索libusb再自行安装好这个依赖库。

Linux下的驱动禁用

RTL2832U作为一款电视棒,部分Linux发行版会接管它的驱动。我们先将它加入黑名单。在/etc/modprobe.d目录下新建一个.conf文件,如rtl-sdr.conf,并写入以下内容:

blacklist dvb_usb_rtl28xxu
blacklist rtl2832
blacklist rtl2830

其中第一行是必需的。配置的生效需要重新启动。

Linux下的rtl-sdr库

rtl-sdr库在主流发行版的软件源中业已存在,但dump1090在生成过程中可能需要自编译版本的rtl-sdr库。请先准备好C/C++项目必要的工具链(gcccmakemake等)再进行编译安装。rtl-sdr的官方GitHub仓库在这里。当然直接使用压缩包内的源码也是可以的,文件名为rtl-sdr.zip

首先建立一个生成用目录,如build,再cd build切换到该目录。使用典型的方式编译安装:

cmake ../ -DINSTALL_UDEV_RULES=ON
make
sudo make install

最后执行sudo ldconfig刷新一下动态链接库。

Linux下的gqrx

gqrx是GNU Radio的一个前端实现,主流的发行版软件源中均带有gqrx。安装非常便捷,使用包管理器即可。主流发行版中包名一般为gqrx-sdr,建议安装前先使用包管理器搜索gqrx关键字找到正确的包名。依赖问题将由包管理器解决。已在未过支持期的Fedora和Ubuntu下直接使用包管理器成功安装gqrx。如:

sudo dnf install gqrx-sdr

或:

sudo apt-get install gqrx-sdr

gqrx界面

正确配置后运行中的gqrx看起来像这个样子。功能略逊于HDSDR,但使用便捷,且支持WFM模式。具体的使用不再赘述,请各位看官自行把玩。

Linux下的dump1090

dump1090是Redis的开发者antirez开发的一款用于解码ADS-B信号的C程序,GitHub仓库在这里。压缩包中也附有一份dump1090的源码,文件名为dump1090.zip

编译dump1090需要做好上面说到的准备工作。编译非常简单,直接在根目录中make即可,dump1090就是目标文件。

dump1090,顾名思义,就是导出1090MHz的ADS-B信息。直接运行dump1090输出的就是基本解码信息;命令行参数中加上--interactive就是显示用户友好的交互式界面;再加上--net就是启用网页版,可以在localhost:8080下以地图的形式直观地显示出飞机。更多的命令行参数请直接参考dump1090的usage。--interactive --net下的dump1090看起来像这个样子:

dump1090界面

结语

今天为大家介绍的是SDR在模拟音频和ADS-B这两个方面的玩法。SDR还有非常多的领域可以涉及,有机会下次我们继续这个话题!

Archives Tip
QR Code for this page
Tipping QR Code