软件无线电(Software-defined Radio, 简称SDR),是一类无线通信的技术,其着重使用软件手段代替无线电系统中的硬件,进行诸如信号处理等任务。 因为使用了编程方式实现了很多硬件功能,这种方案具有较高的灵活性,在21世纪初已经普及,应用于多种无线通信领域。

软件无线电的硬件,可以从几十元的电视棒谈起。流行的一种基于 Realtek RTL2832 芯片的电视棒,可以接收 DVB-T 制式的数字电视广播,其本身就是一种最廉价的软件无线电接收机。 配合合适的计算机软件,使用这种电视棒可以完成非常多的工作,例如:

  • 接收 DVB-T 电视广播(最初目的)
  • 收听调频(FM)收音机广播,包括模拟和数字广播
  • 收听短波(SW)收音机广播
  • 接收 138MHz 上由 NOAA 气象卫星发送的实时云图
  • 接收并解码 433MHz 上各种家用气象传感器的数值
  • 接收 1090MHz 上的飞机 ADS-B 位置报告
  • 接收 1700MHz 附近地球静止轨道上的气象卫星传送的高清云图
  • 通过监听其他城市的广播频率或其他强信号源,使用无线电监测流星
  • 利用多个SDR合作,甚至可以设计无源相控阵雷达,确定无线电反射目标(包括人造和自然目标)的位置和速度

当然,想要实现这些目的,需要的不仅仅是一套软件无线电设备,还需要对天线、电磁波理论等有一定的了解。 只要发挥想象,可以研究出很有趣的玩法。

1. 用于接收的软件无线电硬件

初学者想要尝试软件无线电,可以从各种基于 RTL2832 芯片的设备入手。这类设备价格便宜(一般在两位数人民币之内),支持的频率范围在30MHz-1700MHz左右。

例如下图这种由 NOOELEC 生产的设备,正是作者使用的。 相比于一些主要目的是电视棒的设备,这个版本输入使用了 SMA 接口,固定在金属外壳上,机械强度比较好。 此外使用了 TCXO (温度补偿晶振),可以保证采样频率较为稳定。

NOOELEC-RTLSDR

这类设备一般被叫做 RTL-SDR,在www.rtl-sdr.com网站上能找到相应的各种介绍。 较新版本的Linux系统中(本文撰写之时,诸如Ubuntu 18.04)可以直接支持这些设备,只要配合合适的软件可以即插即用。

如果想要更好一些的效果,比如增加输入的带宽,还有更精细的采样能力,可以考虑类似 SDRPlay 这样的设备。

SDRPlay2

上图所示的是 SDRPlay2,支持3个天线输入,其中两个用于高频以上的天线,输入阻抗为50欧姆,另一个天线为高阻抗输入,可以用于长波或中波天线。

SDRPlay支持的频率范围从 1kHz 到 2GHz,低频部分比 RTLSDR 系列范围宽,但微波波段并无明显优势。带宽为10MHz,可以算是较为专业的数值。

此外,SDRPlay 支持外部晶振输入,可以和其他的 SDRPlay 公用一套系统时钟,保持同步。 如果想用多个 SDRPlay 组成相控阵天线阵列,进行多普勒测向之类的用途,这一功能是不可或缺的。

2. 用于接收信号的天线

2.1 拉杆天线

天线是无线电爱好者的必修课,针对各种不同的波长,不同的用途,天线的设计也可以非常不同。 要接收的频率高低,会决定天线的尺寸大小。 接收信号的极化方向不同,天线的结构和安装也方式也不一样。 此外,天线和馈线(连接天线与接收机的电缆)之间的特性也要相互匹配,要通过计算确定。

想要初步尝试接收一些信号,可以直接购买能安装在无线电设备上的拉杆天线(要注意接口)。拉杆如果长一些,就可以接收到频率更低的信号。 这类天线可以用来尝试接收大多数的广播电视节目,地点较好的话还有可能收到 NOAA 卫星在 137MHz 上传送的云图,或国际空间站在 145.8MHz 上的下行通信。

2.2 平面螺旋天线

另外一种值得尝试的天线,是天线理论这个网站推荐的: 使用标有50欧姆(这个参数叫做特性阻抗)的同轴电缆,自制一种平面螺旋天线。

Spiral-Antenna

这种天线使用两根等长的同轴电缆,绕成阿基米德螺旋。螺旋上任何一点所在半径,与这条半径和出发时的半径的夹角成正比。

两根同轴电缆在螺旋的中心位置相连,连接方式是,一条电缆(称为A电缆)的内芯,连接到另一条电缆(称为B电缆)的导电外皮上。 电缆B的内芯要在连接处作绝缘处理。电缆A的另一端(位于螺旋外圈某处的一端),延长之后直接连接到无线电设备。

上面提到的两种软件无线电设备使用的接口,大多是为50欧姆阻抗设计的。使用同轴电缆绕制的这种平面螺旋天线,可以匹配这种接口。 按照上述连接方式,还能简化一些别的天线里需要考虑的问题(不需要换衡器),所以可以直接连接到设备上。

这种天线可以接收位于其螺旋平面上下、夹角大约20度以上的各种信号,但信号的极化方向有所要求。

平面螺旋天线适合的频率范围很宽,其最低频率所对应的波长大约和螺旋外圈的周长相当,最高频率对应波长由螺旋中间相连的两段电缆的长度决定。 在这两个频率之间的信号,都可以被天线接收,只是增益不是很高。对初学者而言,可使用它来观察无线电频谱。

3. 配套软件

在各种常见的操作系统上,都有丰富的软件,可供业余无线电爱好者使用。

在Windows上,有 SDRUno,可以支持 SDRPlay 。

在Linux上,可以使用 gqrx 或 CubicSDR 等软件,操作 RTLSDR 或 SDRPlay。

如果要在Linux上使用SDRPlay,需要借助叫做 SoapySDR 的框架。在Ubuntu 18.04上已经可以通过软件源安装这一框架,但仍需要之后按顺序安装:

  1. SDRPlay官方提供的API, 以及
  2. SoapySDRPlay(需要自行编译,但不难)。

这些软件一般支持调频(FM)、调幅(AM)、单边带(SSB)、连续波(CW)等方式的解码,可用作各种常见用途。 有的还可以输出IQ原始数据,供其他软件调用分析。

gqrx 还自带录音和 AFSK1200 解码功能,前者可记录诸如广播或NOAA卫星图像等传送的音频信号,后者可以解读诸如APRS等服务的数据包,非常实用。

GQRX-APRS

(gqrx软件,正在144.8MHz上接收APRS数据包)

4. 各种玩法简介

启动 gqrx 或者 CubicSDR,然后选择SDR设备,启动,如果能收到噪音或者各种信号,就可以开始进行一些初步的探索了!

4.1 收听调频电台

首先可以尝试的,是世界各地全天候不间歇的调频广播。几乎身处任何一个国家都能找到各种各样的调频广播。

民用调频广播的频率一般在87.5到108.0MHz之间。 即使很多国家正在向数字广播(DAB)转换,我们仍然有可能在这一范围内找到比较强的模拟广播。

4.2 收听短波广播

如果使用拉杆天线,将天线拉至最长,然后可以去频谱较低(30MHz以下,甚至几百kHz)的部分搜索下,看看有没有调幅模式的广播。

4.3 收听ADS-B飞机位置报告

FlightAware 或者 FlightRadar24这样的网站,可以给出各种航班的实时位置。 它们正依赖全世界各地爱好者接收并上传的飞机ADS-B信号。

ADS-B信号由飞机上的设备自动发送,向地面报告飞机的位置,这样不需要主动式雷达也可以知道飞机在哪里。 这一信号的频率在1090MHz,使用拉杆天线可以接收,也可以自制其他的天线来改善接收效果。因为信号很强,天线不需要很完美。

可以使用 dump1090 这个程序解码收到的信号。这一程序支持RTLSDR或者SDRPlay。 接收到的信号,可以显示在浏览器中,也可以按照上面两个网站提供的方式上传。作为回报,网站一般会给数据提供者高级会员的权限。

4.4 接收卫星云图

当前,NOAA-15、NOAA-18、NOAA-19这三颗气象卫星,仍然运行着一种叫做Automated Picture Transmission(APT)的技术。 这种技术使用模拟信号,在大约137MHz上持续向地面拍发卫星所经之处的云图信息,其分辨率为4千米。 使用调频模式,可以解调这一信号,得到一种很特别的声音。这种声音可以由wxtoimg等软件解读得到图像,获得当地的云图。

这三颗卫星大约几个小时就会路过地球上的某个地点,因此如果能接收到这一云图,就能了解到当地的天气情况。

接收的难点在于天线,虽然有使用拉杆天线成功的例子,但一般仍然推荐使用专门的十字天线或双螺旋天线(QFH Antenna)。

APT技术使用的是模拟信号,干扰会影响图像的质量,所以如果可能,还可以努力尝试接收更加高清的数字图像。

例如,使用抛物面天线(卫星锅)对准赤道上空静止轨道上的气象卫星,可以接收这些卫星定期传送的高清图像,无论从空间分辨率(一般不劣于1km)还是范围(为地球一大部分)而言都优于APT。 Open Satellite Project提供了用于解码这些卫星图像的程序。

4.5 作为无源雷达监视天空

无线电爱好者早就有利用流星余迹反射远处的电台广播,监视流星的经验。 这种办法甚至比光学观测流星还要灵敏。

在欧洲,爱好者借助法国空军的空间监视雷达(GRAVES雷达,发射频率为143.05MHz),可以使用无线电技术监视流星和其他物体在天空飞过时的反射痕迹,甚至可以根据收到信号的多普勒频移,估计目标的速度。 灵敏的无线电设备,甚至可以检测到月球反射的雷达波。

如果使用多地多个无线电设备同时观测,就可以确定物体的速度和方向,这对于流星雨观测是很有帮助的。

更有趣的是MIT的博士Juha Vierinen于几年前提出的一种办法,通过改造多个RTLSDR的电路,使之共用一套时钟,然后经过复杂的数学运算、实现了利用本地广播站信号工作的无源式雷达 (文章在这里)。 使用两个RTLSDR,一个用做参比信号,一个用做探测,可以测量得到目标的速度。再加上第三个RTLSDR,就可以通过两次测速的相位差,确定目标的方位角。 当然,这一做法难度很高,已经可以足以作为一个单独的课题进行研究了:如果继续增加一个RTLSDR,是否可以测定目标的高度角,进行三角定位,成为相控阵雷达?