最近,当我再次用一些无线模块和一个Arduino来做实验时,发现其中一个无法传输任何数据。于是我开始思考,怎样去解决此类问题呢?是代码出现了问题么?还是模块本身坏掉了?我需要使用一些便宜的设备来查看正在传输中的内容。而RTL-SDR的作用正是如此。
硬件
- RTL-SDR USB 加密狗 – 官方商店页面
- 一些天线
软件
-
- Zadig 驱动安装工具 – http://zadig.akeo.ie/
- SDR# 应用程序 – https://airspy.com/download/
或者
- SDR 控制台应用程序 – http://www.sdr-radio.com/Software/Downloads
您可以从官方商店购买RTL-SDR加密狗,价格为20美元。并且您需要获取一个可以接收24 MHz至1.766 GHz频率范围内所有广播的宽带无线电扫描仪。该接收范围涵盖了所有AM和FM广播电台,以及ham radios,被广泛使用的ISM 433 MHz频段和868 MHz频段,甚至包括了正在运行的船舶、飞机和卫星所传输的数据。
什么是软件无线电?
传统上来说,无线电接收机仅包含硬件组件,如滤波器、放大器、调制器和解调器等等。从最基本的层面来说,所有这些组件的工作方式都是对一个模拟信号执行各种数学运算操作。但是,随着计算机处理能力的极大提升,可以将这些操作移至数字域并使用软件对信号进行处理。
这种方法具有很大的优势。首先,它大大减少了所需的专用硬件组件的数量。可以想像,这将大大降低系统的总体成本。另一个巨大的优势是灵活性。您无需更换一半数量的组件,而只需要编写一些新的代码就可以支持新的无线协议或调制。
在理想条件下,软件无线电(SDR)仅需要三个组件:天线、模数转换器和数字信号处理器。您可以将天线连接到转换器,将输出传送到信号处理器,然后您就可以在计算机上处理数据流了。不幸的是,理想条件是无法实现的。主要障碍是模数转换器。事实证明,要设计一种能够足够快速、准确地转换所有信号(甚至是纳伏级)的转换器是非常困难的。因此,实际情况中SDR接收器需要使用一些硬件组件,最常使用的是宽频带、低噪声的放大器和带通滤波器。这些组件会对用于数字组件的信号进行预处理。
基本设置
获取接收器之后,您将需要一个天线以及放置它的地方。这看起来似乎很简单,但实际上是最关键的步骤之一。置于室内的天线也许可以接收信号较强的FM广播,但是拾取置于室外的433 MHz发射台的信号估计就很困难了(即使距离只有几英尺远),而且几乎可以肯定的是,它将无法拾取较弱的信号,例如卫星传输(稍后讨论)。我使用的是置于室外的1m偶极子天线,并使用同轴电缆和USB电缆传输信号。
接下来是驱动程序。当您把基于RTL2832的加密狗插入计算机时,它将会安装默认的驱动程序。但不幸的是,该驱动程序无法让您用作软件无线电。为了得到可以用作软件无线电的应用程序,您需要使用Zadig—一种可以替换USB设备驱动程序的工具。点击此处下载exe文件并运行。接下来,将您的RTL加密狗插入一个USB端口。在Zadig工具中,选择菜单[1] 中的“选项(Options)”,然后点击“列出所有设备(List All Devices)”。现在,您就能选择任何USB设备了,包括在列表中显示为“内置,接口(接口0)(Bulk-In, Interface (Interface 0))”的RTL加密狗[2]。
重要说明:在更换驱动程序之前,请仔细检查您是否选择了正确的设备!例如,您可以检查“驱动程序”中列出的当前安装的驱动程序,其中应包含字符串“RTL2832U”[3]。如果您更换成了错误的设备,则很有可能会停止工作,想要将其恢复会很困难且很耗时!
确保在第二个文本框[4] 中选择了WinUSB驱动程序,然后点击“更换驱动程序(Replace Driver)”按钮[5]。现在,系统会弹出几次提示,您只需要确认表示信任该驱动程序即可。稍后,您将会收到一条消息,显示“驱动程序已成功更换(Driver replaced successfully)”,这意味着最艰难的工作已经完成,现在我们可以使用RTL加密狗作为接收器了!
最后还缺少软件。我们有很多种选择,有各种支持不同类型接收器的程序,但因为本项目中仅使用了基于RTL2832芯片的加密狗,所以在这里我将只介绍支持该接收器的软件。
第一个您可以用来控制接收器的软件是SDR#。这也许是最广泛使用的通用SDR了。它可以在Windows上运行,并且是完全免费的。该软件的使用方法相对简单,即使是初学者也易于上手。SDR#的最大优点是可以添加大量的插件。
在上图中,您可以看到其环境的外观。左侧是控制面板,顶部是频谱,底部是音频频谱,屏幕中间是瀑布图。瀑布图是对频谱的实时记录。如果您看到了一个有趣的信号,但是在想要调谐的时候已经消失了,该信号还会显示在瀑布图中,您可以在信号回放的时候尝试收听该频率的信号。您也可以使用瀑布图来计算信号传输的时间,以及观察频率在传输过程中是否发生了变化。
在所有插件的辅助下,SDR#的使用非常简单并且可以进行很多自定义设置。我个人更喜欢SDR控制台。与SDR#一样,它非常易于使用,但是相比之下SDR提供了一些其他高级功能,例如卫星追踪,并且提供了更多的解调模式以及许多可用于音频记录、噪声过滤和频率管理的附加工具。该应用程序还具有一个额外的优点,就是外观看起来更美观精致。SDR控制台应用程序是可以免费下载的,但是如果您很喜欢该应用程序也可以提供一些资助。
因为我真的很喜欢SDR控制台应用程序,所以在本教程剩余部分的示例中我都将使用该应用程序。当然,您也可以使用任何其他自己喜欢的SDR软件,绝大多数SDR软件的外观和使用方法都是相似的。如果想要查询其他SDR软件(Windows、Linux、 Mac、Android或一些基于网页的工具),您可以访问https://www.rtl-sdr.com/big-list-rtl-sdr-supported-software/。
示例1:FM广播
让我们从一个简单的示例开始:FM广播。首先,您必须选择正确的模式。在本项目中,我们需要用FM(频率调制)模式或BFM(广播频率调制)模式。BFM模式可以提供更好的音频质量以及RDS文本(无线电数据系统)– 电台可以选择性传输的文本信息。通常,该文本信息是电台名称或者有时候是当前正在播放的歌曲的名称。
现在,只需要找到您喜欢的FM电台的频率,然后将其输入SDR控制台即可!如果您没有喜欢的FM电台(这在互联网时代是可以理解的),在FM广播频段(87.5 至108 MHz)中搜索凸起的波峰即可。这些波峰就是FM广播电台,所以只需要调频至该电台然后收听就可以了!
示例2:433 MHz ISM频段
我最初购买RTL-SDR加密狗是为了监视ISM 433 MHz频段中的通信。ISM(工业—科学—医学)属于无许可证频段。这意味着任何人都可以在该频段中进行传输。当然,某些法律限制可能仍然适用,这要取决于您所居住的地区。433 MHz通常用于各种无线设备:车库门控制器、远程门铃、温度计,基本上所有需要在数百米范围内传输简单无线数据的设备都可以使用。
在上图中,您可以看到433 MHz频段的示例。如您所见,不同频率的信号之间会产生很多干扰。大多数信号都在不到几秒钟的时间内发送,并且在两次发送之间有长达几分钟的延迟。可能是因为这些设备中大部分都是用电池供电,所以会通过这种方式节约一些能耗。
示例3:LoRa广播
现在我们来尝试一些有趣的事情:LoRa传输!正如我在Arduino远程通信教程 — LoRenz Shield中提到的那样,LoRa是线性调频扩频(CSS)调制。这意味着信号的频率会随时间发生变化。LoRa调制用于无线、低功率的广域网(LPWA),如LoRaWAN。在此我们一定要对其作出区分:LoRa是一种调制方式,而LoRaWAN是一种使用LoRa调制方式作为ISO-OSI模型中的物理层的协议。本示例仅涉及LoRa调制的属性,而不会介绍LoRaWAN网络的相关内容。
LoRa调制本身是专有的,这意味着除非我们使用Semtech(创建LoRa调制模式的公司)制造的接收器,否则将无法将传输信息解码为二进制数据。但是,我们可以观察到LoRa模块的不同设置是如何影响传输的。设置内容包括带宽、扩展因子以及编码率。
带宽很容易理解,表示的是传输的频率范围。更高的带宽意味着更高的数据速率,但同时也缩小了传输距离并且增加了功耗—这是LoRa系统中的一个关键因素,因为调制本身被设计为使用尽可能少的功耗并在尽可能长的距离内进行传输。Semtech LoRa模块支持的最高带宽为500 kHz,最低为7.80 kHz。
扩展因子的设置有点复杂,因为它与LoRa作为线性扩频调制的性质有关。它表示的是每个传输符号编码位数的度量,范围是6到12。越高的扩频因子意味着在较大距离范围内具有更低的数据速率。您可以将符号想象为一个比比特更高级的信息单位。举一个简单的例子,设想一下通过以前的模拟电话线来进行数据传输。这时候传输的是声音而不是数字位。但是,如果将1表示为一种音调,将0表示为另一种音调,那么就可以在一个模拟媒介上传输数字信息了。您现在是使用带有两种符号的字符,最酷的是:为什么只停留在这两个符号上呢?您可以将位组合为更长的序列,并用符号来表示这些序列。因此,如果您想要对4位序列进行编码,就需要将您的字符扩展为16个符号并使用16个音调。
编码率表示对数据包的前向纠错量。此参数会更改信息的总长度,因此可以理解的是,相比于较高的编码率(4/8),较低的编码率(4/5)下的数据速率略高。
接下来的两张图片比较了LoRa传输的两种极端情况。第一个设置为最高的数据速率,也就是带宽为500 kHz,扩展因子为6以及编码率值为4/5。如您所见,该数据包(28字节长)的传输速率非常高,但是几乎在一瞬间,传输完全阻塞在了433 MHz ISM频段的很大一部分中。另外,即使在空旷的地方,传输距离可能也不会很大。
另一个是在最低数据速率下传输相同的28字节数据。请注意,瀑布图仅显示了4秒钟的数据传输。整个过程大概需要30秒,所以您的数据速率大约为每秒不到一个字节。相比之下,之前的传输只花了不到1秒钟!但是,使用该设置,我们仅占据了ISM频段的一小部分,并且传输距离得到了极大的改善。
SDR控制台使用SAM(同步振幅调制)对该LoRa传输进行解调后产生的声音也非常有趣!
示例4:卫星追踪
现在到了最精彩的压轴部分了:接收来自目前在地球轨道上运行的卫星所发射的信号!这将比之前的示例都棘手一些,主要是因为与FM广播电台或LoRa发射器不同,卫星往往会移动更大的距离。幸运的是,SDR控制台有一个很棒的工具,可以让您轻松地对卫星进行追踪。首先在SDR控制台菜单功能区中选择“查看(View)”选项,然后在最后一部分地“更多选项…(More Options…)”中按下“卫星(Satellites)”按钮。这时候会打开另一个窗口,即卫星追踪器。
要使用追踪器,您要做的第一件事是输入纬度和经度,以便应用程序可以确定可见的卫星进行以及其相对于您所处的位置。在顶部功能区的“主页(Home)”选项卡中,单击第二个按钮“主页纬度/经度(Home Lat/Lon)”。在弹出的窗口中,输入您当前的经纬度以及WGS84椭球高度。最后一个参数用于补偿多普勒效应,您用谷歌搜索一下,就会找到一些可以通过经纬度来获取WGS84高度的工具。获得所有信息后,您就可以搜索出一些卫星了!在“轨迹追踪统计(Pass Schedule)”窗口中,按下“卫星列表(Satellite List)”按钮以显示在接下来的几小时内从您的位置可见的所有卫星。有很多可以对这些卫星进行过滤的选项(例如,您可以排除仰角小于特定角度的所有卫星)。
双击所要追踪的卫星[1]。现在,主窗口中显示有该卫星的当前位置[2],名称[3]和轨迹,以及直到AOS(信号获取)[4]为止的时间。同时还有卫星的当前方位角[5]以及其相对于您所处位置的仰角[6]。该信息可以告诉您应该将天线指向天空中的哪个位置,以使您有最大的机会接收到该卫星可能正在发射的信号。在“轨迹(Passes)”窗口中还有一个简洁的小功能,可以在卫星处于从自己的位置可见时,让您查看预期的卫星轨迹。为了实现该功能,请从列表中选择一颗卫星,然后将滑块[7]移动到地图下方。该窗口将会在滑块在您身边经过时显示卫星轨迹,您可以由此了解方位角是如何随时间变化的,以及您是否有可能接收到广播。卫星到达您的位置后,点击其中一个接收器按钮[8],主SDR控制台应用程序将使用所建议的设置自动调谐到该频率。
为了追踪卫星,您要做的最后一件事是将天线放在一个与天空接触良好的地方。房顶就是一个很好的选择,不过这样一来您可能无法一直将信号传回PC。我的天线放置在三楼的露台上,所以与天空接触良好,但是如果我使用的是有源USB电缆,我应该会将天线移到屋顶上并将RTL-SDR加密狗一起放在那里。这样,模拟信号传输的路径就短得多了。
是时候听一听卫星上的广播了!由于我的天线大致面向西南方,因此它可以拾取方位角为120°至320°的卫星。而仰角的确认会产生一些问题,如上图所示,我住在山谷中,因此对于在大约15度或更高仰角位置的卫星,我的接收效果最佳。我也可以接收来自其他方向的卫星发出的信号,但它们的信号较弱。
现在,我们需要选择要接收信息的卫星。最好的首选是NOAA卫星。这些卫星由美国商务部下属的国家海洋与大气管理局(National Oceanic and Atmospheric Administration)运营。就像该机构的名称所显示的那样,它们被用于天气预报和气候监测。在137.1 MHz频率下,它们还可以传输低分辨率的图像,而转换成声音后,您可以听到典型的哔哔声。我追踪的卫星是2009年发射的NOAA19。这颗卫星处于近极轨道,也就是说它在地球上方的轨迹靠近两极。每个运行周期为100分钟。轨道也相对较低,在地面上方约850公里处。
第一次NOAA 19轨迹离我足够近的时候,它刚好经过俄罗斯上空,而俄罗斯距离我的位置有点太远了。大约两小时后,卫星距离我更近了。当卫星进入接收范围内时,它处于北非上方,正在经过利比亚和地中海。然后,它经过了意大利,最后越过了德国,其中德国是离我最近的。那时,它的仰角大约为60°,方位角为240°,这种情况下已经是接收信号的理想位置了。您可以通过这里的视频查看以及听取在卫星整个15分钟的运行过程中所记录的信号。信号最好的时候是在6:00 – 6:30左右,您可以清楚地听到哔哔声和滴答声。NOAA 19之后继续越过北海上空,然后达到北极。
结论
至此,我们完成了对RTL-SDR的简要概述。如您所见,即使使用最基本的设置,它也可以出色地完成一些任务。当然,还有一些需要改进的地方。例如,我们可以为不同的调制方式和频率来创建天线,以获取尽可能高的信号增益,并自动排除我们不感兴趣的频率。使用软件的软件无线电部分,可以轻松地对整个系统进行更改,来完成各种任务,从“简单”的工作(例如持续接收模拟TV信号)到观测距离数千光年之外的脉冲星!