Read Buf

Read Buf

使用 LimeSDR 解码 DME 飞机无线电导航系统

DME(距离测量设备)是一种机载无线电导航系统,用于测量飞机与地面 DME 站之间的距离。DME 通常与 VOR(甚高频全向信标)站共址,这时 VOR 提供方位信息。DME 通过测量脉冲对的双程飞行时间工作:首先由飞机发射脉冲,然后地面站以固定的延迟重发(地面站作为应答机),最后由飞机接收该脉冲。DME 的工作频段在 960 到 1215 MHz 之间,以 1 MHz 为步长划分频道,空对地和地对空的频率总是相差 63 MHz(关于频率频道的完整列表可见 此处)。

我打算写一篇文章,详细解释 DME 的工作原理方式,并通过分析包含空对地和地对空频道的 DME 记录来进行说明。特别地,我想展示飞机与地面站脉冲之间的延迟是如何匹配的,这可以通过飞机位置(我可以从互联网上的 ADS-B 数据中获取)、地面站位置、记录仪位置以及地面站应答机的固定延迟来计算。

用现有的那些软件定义无线电(SDR)设备来记录两个相隔63 MHz的信道是颇具挑战的。目前基于AD9361的设备,其技术上支持的最大采样率是61.44 Msps (不过有些人将其运行到122.88 Msps)。一种有趣的替代选择是LMS7002M,这种芯片被LimeSDR和其他一些SDR设备使用,其有两个优势。首先,它支持超过61.44 Msps的采样率。不过,目前还不清楚LimeSDR究竟支持的最大采样率是多少。一些资料,包括LimeSDR官网提到的频宽是61.44 MHz,而LMS7002M数据手册中提到,在SISO模式下,通过数字接口的最大RF调制带宽为96 MHz(虽然这一术语有点专业)。对于LimeSDR来说,USB3的数据传输速率也会有限制,但如果只使用一个接收通道,这应该不是问题。我还没有找到关于LMS7002M各个组件(例如ADC最大采样率等)限制的明确信息。

第二个有趣的特性是 LMS7002M 芯片上带有数字下变频器(DDC)。相比之下,AD9361 只通过一系列抽取滤波器来降低 ADC 的采样率,然后以较低的采样率通过数字接口输出。而 LMS7002M 除了这些功能外,还增设了一个数控振荡器(NCO)和数字混频器,可以在抽取前对 ADC 的 IQ 信号进行频率偏移处理。

为了使用 LimeSDR 记录两个 DME 频道,我想到两种方案。第一种方案是使用 70 Msps 的输出采样率。为此,我设定了 140 Msps 的 ADC 采样率,因为我认为 ADC 之后至少需要进行两次抽取(LMS7200M 的文档没有明确说明这点,因此常需要通过 LimeSuiteGUI 进行一些尝试和错误)。然而,这种方案有两个问题。首先,在某些情况下,使用 140 Msps 的 ADC 采样率时,CGEN 的 PLL 可能偶尔无法锁定。不过,LimeSuite 驱动程序会多次重试,直到 PLL 锁定,因此在实际使用中这不是问题。在我的桌面电脑上,这种方法效果很好,因为在 70 Msps 下可以获取两个 DME 频道,然后使用 GNU Radio 提取每个频道即可(例如通过 Frequency Xlating FIR Filter)。然而,我计划用于现场记录的笔记本电脑无法处理 70 Msps 的速度。

第二个想法是利用 LMS7200M 片上的 DDC 来提取 DME 通道,并以更低的采样率通过数字接口传输。下图展示了 LMS7200M 数字信号处理的数据路径。这条数据路径称为 RXTSP。RXI 和 RXQ 是来自双通道 ADC 的数字信号(在此和以下,ADC 是指 LMS7002M 的双通道 ADC,因为它是一个零中频 IQ 收发器)。RYI 和 RYQ 是传输到芯片数字接口的信号。由于 LMS7200M 有两个 RX 通道,每个通道都有一条相同的链路。每条链路的参数都可以独立编程。

图 1: LMS7200M 数字信号处理数据路径示意图,摘自 datasheet

ADC 的信号无法同时发送到两个 RXTSP,因为每个 ADC 和对应的 RXTSP 之间的连接是固定的。因此,我们需要通过两个 RX 通道输入天线信号,但这可以通过使用外部信号分配器轻松实现。请记住,两个 LMS7200M RX 通道共享相同的 LO(本地振荡器),如下面的框图所示。因此,我们只需将 LO 调整到两个 DME(距离测量设备)通道之间的某个频率,并将采样率设置得足够高,这样 ADC 输出中就能同时包含两个 DME 通道的信号。接着,我们可以使用每个 RXTSP 提取其中一个 DME 通道,并通过数字接口以更低的采样率发送这些信号。

LMS7200M 框图,摘自 数据手册

这种方法效果显著。我将 ADC 设置为 80 Msps,并使用 RXTSP 将 DME 通道下变频至 2.5 Msps,将数据直接记录在 GNU Radio 中。

我进行了两个小时的 DME 录音,并将其发布在 Zenodo 数据集上 Recording of Colmenar (CNR) VOR-DME air-to-ground and ground-to-air DME channels

在本文的其余部分,我将解释录音设置的详细信息,并对录音质量进行初步分析。

VOR-DME 和录音位置

这次录音使用的 VOR-DME 站是Colmenar (CNR) VOR-DME,这是离我家最近的一个。VOR 的频率是 117.3 MHz,而 DME 的频率是与 VOR 频率相关联的。根据列表,它对应的 TACAN 频道是 120X。该频道的机对地频率是 1144 MHz,地对机频率是 1207 MHz。DME 可以看作是军事 TACAN 无线电导航系统的民用版本,能够提供距离和方位信息。

CNR VOR 和马德里地区在 Skyvector 世界 VFR 地图上的位置

根据 Skyvector 的世界高空和低空 IFR 图,CNR VOR 并不在任何航路上。然而,它在马德里巴拉哈斯机场的多个仪表飞行程序中有使用。只有当飞机的导航设备调到某个 DME 或 VOR-DME 站点时(大多数飞机有两个 VOR-DME 无线电设备),飞机才会与该站点通信。飞行员通常会调频到飞行程序中的导航站点(尽管飞行员可以选择其他站点进行交叉检查),因此我们在记录中看到的主要是马德里巴拉哈斯机场的航班,而不是高空航路的航班。

CNR VOR 在 Skyvector 世界高空图上的位置

特别是,从马德里巴拉哈斯 36R 跑道起飞并向正西或西南方向飞行的飞机会飞越 CNR。

使用 CNR VOR 的 LEMD 36R 跑道起飞的标准离场程序 (SID) ,取自 SID chart

然而,从跑道36L起飞的飞机完全不使用CNR VOR(详见 SID chart)。自从我在2018年进行 2.3 GHz飞机反射录音 以来,马德里巴拉哈斯机场的仪表飞行程序发生了巨大的变化,真让我印象深刻。这主要是因为GPS导航的普及。

我选择在城镇郊外的乡村进行录音。这里距离CNR VOR-DME4.58公里,虽然几乎可以直接看到VOR-DME站,但两者之间有一些建筑物。这个录音地点也为沿着上述路径飞行的飞机的TDOA(到达时间差)分析提供了很好的几何条件。当它们从马德里巴拉哈斯机场起飞时,飞机距离我的录音设备比VOR-DME更近,但在某个点,它们开始距离VOR-DME比我的录音设备更近。

录音地点(红色图钉)与CNR VOR-DME的距离

HeyWhatsThatprofile 显示没有显著的地形障碍。

从记录地点到 CNR VOR-DME 的 HeyWhatsThat 剖面图

天线

为了这次录音,我自己制作了一根天线。我选择了四分之一波长的地面单极天线,因为这种天线不仅制作简单,还能提供大致的全向接收模式,除了在天顶方向有一个信号盲区(这点非常有用,因为我要同时接收地面信号和来自高仰角飞机的信号)。我用一个多余的 SMA 母头连接器和一些粗的搪瓷铜线制作了这根天线。

下图展示了天线和低噪声放大器 (LNA),旁边用厘米刻度尺作为参照。

天线和 LNA

这根天线的共振频率在 1.1 到 1.2 GHz 之间,具体取决于周围物体的影响。它在整个 DME 频段内都能提供良好的 50Ω 阻抗匹配。

用 NanoVNA V2 测量的天线 S11

低噪声放大器 (LNA)

由于天线需要通过分路器连接到两个 LimeSDR 的 RX 通道,我使用了 LNA 来减少分路器带来的损耗。这 LNA 是一个 来自 Minikits 的 GALI-39 ,这是我手头已经有的设备。GALI-39 是来自 MiniCircuits 的宽带 LNA MMIC,具有大约 20 dB 的增益和 2.4 dB 的噪声系数。曾在一篇旧文里谈到过这个 LNA 板套件。需要注意的是,我使用了覆盖 500 kHz 到 850 MHz 的选项来构建 MMIC 的偏置网络,但在 1.2 GHz 的频率下仍然表现良好。

Splitter

为了将天线信号分配到两个 LimeSDR 的 RX 通道,我使用了一个便宜的 Wilkinson 分路器板,这个分路器我最初购买是为了从同一个天线给两个 GPS 接收器供信号用的。我还在其中一个端口安装了一个直流隔离电容,因为 GPS 接收器通常为有源天线提供直流偏置。

图 1:

Wilkinson 分路器

下图显示了在 VNA 中对分路器的测量结果,第三个端口以负载终止。它在 DME 频带内表现相当不错,但尽管我认为它是为 GPS 市场设计的,在 1575.42 MHz (GPS L1 频率) 表现并不理想。

使用 NanoVNA V2 测量的分离器 S11 和 S21 (第三端口终止)

完整硬件配置

天线通过 LNA 和分离器连接到 LimeSDR 的两个 RX 通道。我把所有设备都放在车顶的三脚架上,并使用 LiPo 电池为 LNA 供电。下面的照片展示了录音时的情况。

DME 接收器的硬件配置

这是面向 CNR VOR-DME 站的视图。虽然建筑物掩盖了部分视线,但它们后方没有地形阻挡。

面向 CNR VOR-DME 站的硬件配置

LimeSDR 配置

我用 LimeSuiteGUI 配置了 LimeSDR。这一配置可以通过 gr-limesdr 导入到 GNU Radio 中。配置文件可以在 这里 找到。

我发现,在 LimeSuiteGUI 中从头开始配置 RXTSP 的抽取有些复杂。在 RxTSP 选项卡里设置的 HBD 比率(控制 RXTSP 内的抽取)和 LimeLight & PAD 选项卡里的 Rx 时钟分频器(控制数字接口输出样本的时间)需要保持一致。否则,输出结果中可能会出现样本重复或缺失的问题。不过,我发现对于 HBD 比率设置成 2^5 的情况(用于将 80 Msps 的 ADC 采样率降低到 2.5 Msps),Rx 时钟分频器需设为 7。我是通过在 GQRX 中将 LimeSDR 设置为 2.5 Msps(自动设置 2^5 的抽取),然后停止 GQRX 并检查 LimeSuiteGUI 中的配置得出这个结论的。这种方法有效是因为 GQRX 停止运行的时候不会清除配置。

在 LimeSuiteGUI 中的关键配置如下:

  • 在 CLKGEN 选项卡中,CLK_H 被设置为 320 MHz,与 4 倍抽取相结合得到 80 MHz 的 RXTSP 和 TXTSP 频率。

  • 在 SXR 选项卡中,RX LO 频率设置为 1175 MHz,这是此 DME 信道的空对地和地对空频率的中间点。

  • 在 RxTSP 选项卡中,HBD 比率设置为 2^5,NCO 设置为 31.5 MHz。通道 A 设置为上变频(将频率上移),通道 B 设置为下变频(将频率下移)。

  • 在 RBB 标签页中,RX 滤波器带宽被调整为 70 MHz。从实验中可以看出,这个带宽指的是整个 IQ 带宽,因此低通滤波器的截止频率是 35 MHz。

  • 增益在现场根据适当的信号电平进行调整。我最终使用了 6 dB 的 PGA 增益(在 RBB 标签页中),Gmax-12 dB 的 LNA 增益,以及 Gmax-3 dB 的 TIA 增益(在 RFE 标签页中)。

  • RX IQ 不平衡校准在现场完成。

请注意,除 CLKGEN 和 SXR 设置外,所有这些设置都需要独立应用于每个通道。

回过头来看,将 LO 频率设置在空对地和地对空通道之间的中点可能不是最佳选择。因为这样会使两个通道在基带中的频率是对称的,任何 IQ 不平衡都会导致一个通道的信号部分功率出现在另一个通道中。如果将 LO 频率偏移几 MHz 可以避免这种情况。不过,这在实际操作中似乎并不是问题。将 LO 频率设置在中点的一个好处是,两个通道在模拟基带中的响应更为相似,因为它们具有相同的模拟基带频率。

GNU Radio 流图

一个 GNU Radio 流图 用于加载 LimeSDR 的配置并将数据记录到磁盘。

用来记录 DME 机对地和地对机信道的 GNU Radio 流图

即使我们使用了 NCO,LimeSDR 的输出仍有一个小的 DC 峰值(因此这不是 ADC 的 DC 峰值)。我认为这是由于数字信号链中的舍入不佳。向每个通道添加 1/2**12 可以修正这个问题,这也是 Add Const 块存在的原因。

Tag Debug 块用来检测丢失的样本,因为 LimeSDR 源每次丢失样本时都会发出一个 rx_time

LimeSDR 的配置文件通过 LimeSDR 源块的高级选项卡中的文件选项加载。由于我们使用的是配置文件,所以这个块中的大多数其他参数都无关紧要,因为它们会被配置文件覆盖。

由于 LimeSDR 没有像 UHD 那样的时间戳同步 API,文件的时间戳通过在流图开始运行时将时间写入文件名的一部分,并在录制停止后使用 stat 获取文件的修改时间戳来进行同步(这个时间戳对应于文件的结束时间)。这种方法的精度约为 1 秒,这足以将录制的数据与 ADS-B 数据进行比较。

录音初步分析

我在 一个 Jupyter notebook 中对录音进行了初步分析,以验证录音质量。更详细的分析将在未来的文章中进行。

下图显示了录音前100毫秒内地对空和空对地信道的信号幅度。我们看到的每个尖峰是一个脉冲对(pulse pair)。DME使用脉冲对而不是单个脉冲,两脉冲之间有明确的间隔,这样接收器可以区分脉冲干扰。

地对空信道中有更多的脉冲对。这个现象被称为 squitter。地面上的 DME (测距设备) 收发器配备了一个 AGC (自动增益控制) 系统,该系统会调整检测阈值,使收发器平均每秒输出 2700 个脉冲对。如果从飞机接收到的脉冲数量不足,收发器会随机触发噪声以生成所需的脉冲对。这有几个目的:保持收发器恒定的输出功率,自动将阈值调整到最优灵敏度,并在飞机数量增加时逐渐减弱响应。当飞机数量多到每秒接收到的脉冲对超过 2700 个时,检测阈值会升高,以忽略较弱的飞机信号。这种 AGC 系统在硬件中实现也相对简单,因此是一个巧妙的解决方案。

在这段录音中,使用 DME 的飞机数量较少。每架飞机在搜索模式下每秒传输约 150 个脉冲对,而在跟踪模式下每秒传输不到 30 个脉冲对,因此,我们在地对空信道中看到的大多数脉冲对都是 squitter。

以下展示了录音前 100 秒的频谱,使用了 FFT 大小为 4096 和矩形窗口。每个频道分别显示了一个平均频谱和一个峰值保持频谱。由于脉冲的低占空比(尤其对于空对地频道),峰值保持频谱通常比平均频谱更能检测到 DME 信号。

下两幅图分别显示了地面到空中频道和空中到地面频道中的一个脉冲对。在这两种情况下,我都绘制了录音前 100 秒内幅度最大的脉冲。脉冲的幅度约为 ADC 满量程(相对于 LMS7200M 数字接口的满量程)的 0.3,因此估计 ADC 还未达到饱和。

DME (距离测量设备)有两种模式:模式 X 和模式 Y。每种模式对脉冲对的时序参数有所不同。这是为了支持更多的频道使用,因为一个频率可以对应模式 X 或模式 Y (但具体是空对地还是地对空,会因模式不同而变化)。此 DME 采用模式 X (即 TACAN 频道 120X),根据 这个网页 的信息,空对地和地对空频道的脉冲对之间的间隔都是 12 微秒 (模式 Y 对空对地和地对空有不同的间隔),重发器以 50 微秒的延迟重新发送脉冲。

脉冲的形状较为粗糙。信噪比(SNR)非常高,因此这不是由噪声引起的,而是信号失真所致。地对空频道的失真可能是由于多路径效应引起的,而在空对地脉冲中,似乎存在一个延迟约 5 微秒的回波,相当于 1.5 公里。我很难想象这个接收器会有飞机信号的 1.5 公里多路径效应,所以可能是接收器硬件导致了失真。或者,飞机信号可能在某个建筑物上反射。具体原因不确定。

图 1 显示了相同的地对空脉冲对及其在空对地频道的对应回复。回复信号会有大约70微秒的延迟。应答器有50微秒的延迟,由于我的接收器距离VOR-DME电台4.58公里,应答器信号还需要另外15微秒到达接收器。因此,这意味着飞机信号比到达VOR-DME电台提前5微秒到达我的接收器。如果我们能识别出是哪个飞机发出了这个脉冲,我们应该能够确认此时飞机距离我的站点比到VOR-DME站点近1.5公里。这个问题将在下一篇文章中进一步讨论。

DME地面站的另一个有趣功能是它会周期性地以莫尔斯电码发送一个识别信号,其实现方法非常巧妙。为了发送莫尔斯长线或点,应答器会停止接收飞机传输信号,并用每秒1350个等间隔的脉冲对替代常规查询信号。图 2 显示了这一点。从常规查询信号到规律脉冲的过渡非常明显。

当使用如同航空通信所用的 AM 接收机接收到 DME 信号时,即使 AM 接收机的典型带宽为 10 kHz,而 DME 信号的带宽为 1 MHz,DME 信号还是会在 AM 接收机的音频输出中产生特有的声音。每对 DME 脉冲都会在 AM 接收机的音频输出中产生一个脉冲。由于 AM 接收机带宽较小,单个脉冲的长度大约为 100 微秒。这种规则间隔的脉冲列听起来非常类似于 1350 Hz 的矩形波。选择 1350 Hz 是为了与 VOR 的莫尔斯 ID 所用的 1020 Hz 音调区分开来。

下面的音频片段展示了几秒钟的 DME 乱序信号和莫尔斯 ID。可以很自然地听到 1350 Hz 的莫尔斯音调。请注意,在莫尔斯码的点和划之间存在乱序信号。还要注意的是,乱序信号与 AWGN 有很大区别,因此 AM 接收机可以用来检测 DME 地对空信号的存在,甚至可以粗略估计其信噪比 (SNR)。当信号变弱时,AM 接收机中会听到越来越多的 AWGN。这段音频文件是通过 这个 GNU Radio 流图 获得的。

在进行 Morse 电码识别时,飞机无法从 DME(测距设备)应答机接收到有效的响应脉冲,这导致飞机上的 DME 接收机停止更新其距离测量数据,直到再次接收到有效的应答信号。

代码和数据

本文中使用的 GNU Radio 流程图和 Jupyter Notebook 可在 这个仓库 中找到。记录已作为一个 数据集发布在 Zenodo