物理与计算机 - 12 到 18 岁
解码天空
下面这行十六进制是一条真实的消息,由一架真实的飞机大约每秒两次发出。在 112 微秒内,它宣布了这架飞机是谁,并在配套的消息里宣布它在哪里、多高、多快。这门课程把理解它所需的一切走一遍:它所乘的波的物理、给飞机定位的计时、把它装进 112 位的编码、限制它能被听多远的几何,以及你可以自己搭建来亲耳听到它的接收机。
一页看懂 ADS-B
8D4840D6202CC371C32CE0576098一条扩展电文,按接收机记录的样子:28 个十六进制数字,112 位。到第 3 课,你将能读懂它的每一个字段。
空中交通管制必须持续地知道每一架飞机在哪里,才能让它们彼此分开:巡航中的客机每秒前进 250 m,而间隔规则要求雷达管制下的飞机之间垂直相隔 300 m 或水平相隔 9 km。七十年来,得知位置的办法是雷达:地面站发出一个脉冲并给回波计时,或者,在改进的二次雷达形式中,询问飞机上的应答机,应答机在 1090 MHz 上以身份和高度作答。雷达有局限:它需要巨大的功率,每转一圈只能看到每架飞机一次,而且覆盖不了海洋和山脉。
ADS-B,广播式自动相关监视(Automatic Dependent Surveillance - Broadcast),把问题反了过来。每架现代飞机都带有卫星导航接收机,因此知道自己的位置,精确到几米。ADS-B 干脆让飞机的应答机把这个位置连同身份、高度和速度一起,大约每秒两次,在 1090 MHz 上,不针对任何人地宣布出来。自动,因为没有任何东西触发它;相关,因为信息完全来自飞机自身的仪表;监视,因为它的目的是知道飞机在哪里;广播,因为它以明文发给任何在听的人。自 2020 年起,它在欧洲和美国空域中对大多数飞机是强制性的。管制员把它和雷达一起使用,其他飞机用它来互相看见,而学校屋顶上一台 25 欧元的 USB 接收机听到的是一模一样的消息。
要理解这个系统,你必须理解五件事,每一件就是一节课:承载消息的电磁波;给飞机定位的计时,以及让网络能找到一架不肯说自己在哪里的飞机的计时;数字消息及其错误如何被捕捉;限制它能被听多远的几何与能量;以及把它变回数据的天线和接收机。完整的叙述在参考课程里;第 3 课之前请读它的第 3 章和第 5 章,第 4、5 课之前读第 6 到 8 章。
第 1 课
波:作为看不见的光的无线电
消息以电磁波的形式离开飞机:振荡的电场和磁场在没有介质的空间中传播,速度为光速 c = 3.00 x 10^8 m/s。可见光是同一现象在更高频率上的表现;你的眼睛响应大约 4 到 8 x 10^14 Hz,而 ADS-B 以 1.09 x 10^9 Hz 发射,低五十万倍。飞机的消息和这块屏幕发出的光在种类上没有区别,只在频率上不同。
由于波以固定速度传播,它的频率决定了它的波长。一秒钟内波前进 c 米并完成 f 个周期,所以每个周期占据 c / f 米:c = f x lambda。对 ADS-B,lambda = 3.00 x 10^8 / 1.09 x 10^9 = 0.275 m。在飞机和你的天线之间穿行的波,波峰相距 27.5 cm,在波谱上位于手机信号(17 cm)和调频电台(3 m)之间。自己画出这个波谱,用从 10^6 Hz 到 10^18 Hz 的对数坐标轴,把调频广播、ADS-B、手机、Wi-Fi、红外线、可见光和 X 射线放上去。飞机的波就坐在你口袋里那些东西中间。
c = f x lambda即 3.00 x 10^8 m/s = 1.09 x 10^9 Hz x 0.275 m
无线电波不是什么?不是声音。声音是介质中的压力波,在空气中以 343 m/s 传播,在水中 1500 m/s,在真空中根本不传播。无线电是光:它不需要介质,这就是它能穿过从卫星到飞机的真空的原因,而且它快 3.00 x 10^8 / 343 倍,约 875000 倍。如果 30 km 外的一架飞机在同一瞬间发出一个声音和一条消息,消息 100 微秒后到达;声音 87 秒后才到,那时飞机已经飞了 22 km。绳波与光共有那些要紧的性质,波长、频率和固定的速度,所以抖得更快意味着波更短而不是更快;它的不同在于需要绳子。
波的一个性质在第 5 课会很要紧:它的极化。电场在与传播方向垂直的某个确定方向上振荡。飞机的天线是竖直的,所以 ADS-B 波是垂直极化的,而一根侧放的接收天线几乎截获不到它,正如竖直抖动的绳波会被水平的缝挡住。现在就预测一下,如果天线是水平的,你的接收机的作用距离会怎样;你将在项目中检验它。
第 2 课
计时与定位:飞机如何知道自己在哪里
每条 ADS-B 消息里的位置都来自卫星导航,而卫星导航是一种对时间的测量。每个系统(GPS、Galileo、GLONASS、BeiDou)约有三十颗卫星,在约 20200 km 的轨道上运行,每颗带一台原子钟,每颗发射一个声明自身位置和精确发射瞬间的信号。飞机上的接收机记下到达瞬间。两者之差乘以 c,就是到那颗卫星的距离;从正头顶,信号要走 20200 / 300000 = 0.0673 s。一个距离把接收机放在以那颗卫星为中心的球面上;两个球面相交于一个圆;三个相交于两个点,其中一个远离地球,舍去。如果接收机有一台完美的时钟,三颗卫星就够了。它只有一块漂移达微秒的石英晶体,而一微秒就是 300 m 的距离。所以接收机把自己的时钟误差当作第四个未知数,使用第四颗卫星:四个方程,四个未知数(x、y、z 和时钟偏移),连续求解。作为副产品,每台卫星接收机都能把时间保持在几十纳秒以内,本课的后半部分正依赖于此。
牢记数量级:光每纳秒走 0.3 m,每微秒走 300 m。精确到 3 m 的位置意味着精确到 10 ns 的计时。一颗时钟快了 1 微秒的卫星,会把每一台使用它的接收机沿着朝向它的方向推开 300 m,这就是为什么卫星时钟每天要从地面校正好几次。
飞机带有两种高度。卫星解给出的是相对于参考椭球的几何高度。但它为空中交通目的广播的高度是气压高度:机身上一个静压孔处的气压,通过国际标准大气换算成高度,该标准假定海平面 1013.25 hPa、15 摄氏度,每公里递减 6.5 度。当实际气压偏离标准时,每架飞机的气压高度都偏差同样的量,而这恰恰是间隔所需要的:两架分别读作飞行高度层 350 和 360 的飞机,无论天气如何都相隔 1000 ft。位置消息以 25 英尺为步长携带气压高度;速度消息携带气压高度与几何高度之差。如果你有电子表格,把 p = p0 (1 - 0.0065 h / 288.15)^5.255 反解,验证在 11000 m 处气压约为 227 hPa,不到海平面的四分之一:客机穿行的那种空气不足以让你保持清醒。
现在把整个思路反过来。有些飞机在 1090 MHz 上发射却没有位置:老式应答机回答雷达时只给身份和高度,或者飞机的卫星接收被干扰。一个接收机网络仍然可以通过多点定位找到它们。假设四台时钟同步的接收机各自记录下同一次发射的到达时间。一条比到达接收机 B 早一微秒到达接收机 A 的消息,是从一个离 A 比离 B 近 300 m 的点发出的,所有这样的点构成一个以 A 和 B 为焦点的双曲面。四台接收机的三对独立组合给出三个双曲面,它们相交于飞机。这是已知与未知互换了的卫星问题:那边是一台接收机和四台已知的发射机;这边是一台发射机和四台已知的接收机。两者测量的都是时间,而 1 微秒就是 300 m。接收机从飞机所用的同一批卫星把时钟同步到约 100 ns。
你可以用声音来做这件事。三个人拿着秒表站在运动场上测定好的位置;第四个人藏起来拍一次手;每个人记录延迟。声速 343 m/s,0.1 s 的差就是 34 m,用比例图试探位置,或者画出双曲线的草图,就能找到拍手的人。然后问问,要用无线电在 200 km 上做同样的事,秒表得有多精确,你就会明白为什么这个网络需要原子时。
第 3 课
消息:112 位,以及错误如何被捕捉
应答机以 Mode S 扩展电文的形式发送 ADS-B:一个 8 微秒的前导码,然后是 112 个数据位,每微秒一位。前导码是四个脉冲组成的固定图样,位于 0、1、3.5 和 4.5 微秒处,它的任务是回答一个你可能没想到要问的问题:在一条满是噪声和其他飞机的信道里,接收机怎么知道一条消息开始了,每个比特又从何时开始?解码器持续地盯着这个图样,一旦看到,两件事它都知道了。你用的每一种数字协议,从 Wi-Fi 到二维码,都有对应的东西。
发射机只能开或关;它怎么发送 1 或 0?ADS-B 使用脉冲位置调制。每个一微秒的比特时隙分成两半:前半有脉冲、后半静默是 1;先静默、后有脉冲是 0。每个比特总是恰好一个脉冲。想一想为什么这比“有脉冲是 1、没脉冲是 0”更好。接收机从不丢失计时,哪怕遇到一长串 0,而在朴素方案里,一长串 0 与静默无法区分。而且它通过问哪一半更响来判定每个比特,而不是问脉冲是否超过了某个固定电平,所以来自 400 km 外的弱信号和来自头顶的强信号解码得一样可靠。
每个时隙 1 微秒。脉冲在前半段:1。脉冲在后半段:0。
这 112 位的布局如下,你应当能凭记忆复述。第 1 到 5 位:下行格式,来自应答机的 ADS-B 为 17。第 6 到 8 位:能力码。第 9 到 32 位:24 位的 ICAO 地址,飞机的永久身份,在注册时分配;共有 2^24 = 16777216 个,成块分配给各国,比利时的是十六进制 448000 到 44FFFF。第 33 到 88 位:56 位的消息字段,其前五位,即类型码,说明其余 51 位包含什么。类型码 1 到 4 以八个 6 位字符携带呼号,每个字符 64 种符号。类型码 9 到 18 携带空中位置:12 位以 25 英尺为步长的气压高度、一个奇偶标志,以及各 17 位的编码纬度和经度。类型码 19 以地速的东西和南北分量、垂直速率,以及气压高度与几何高度之差携带速度。第 89 到 112 位:24 位的校验。核对算术:12 位高度以 25 ft 计覆盖 102400 ft;17 位若在 180 度纬度上朴素地使用,分辨率只有 1.4 km。位置之所以比这好,是因为紧凑位置报告:这 17 位给出区域内精确到几米的位置,而不是哪个区域,飞机在偶、奇两套区域网格之间交替。各听到一条的接收机能毫不含糊地确定区域,然后用单条消息跟踪。用时间换来同样比特下更高的精度。
解剖本页开头那条真实的消息。8D4840D6202CC371C32CE0576098 是 28 个十六进制数字,112 位。前两位 8D 的二进制是 1000 1101;前五位 10001 是 17,所以这是来自应答机的 ADS-B,接下来三位 101 给出能力 5。接下来六位 4840D6 是 ICAO 地址,分配表把它归于荷兰。下一对数字 20 以 00100 开头,类型码 4,一条识别消息,解码随后的 6 位字符得到呼号 KLM1023。最后六位 576098 是校验。用电子表格或几行代码,你可以完成整个解码,而看着一行十六进制就能说出“一架 KLM 的飞机在宣布 1023 航班”,正是这一课的目标。
校验最值得思考。在繁忙机场上空,不同飞机的发射在接收机上不断重叠,单个脉冲会被噪声吞掉;解码器有时不可避免地会拼出错误的位。最后 24 位是循环冗余校验:88 个消息位被当作一个长二进制数,用一种减法即异或的算术,除以一个固定的 25 位生成多项式;余数就是 CRC。接收机对自己解码出的位重做除法。任何一个翻转的位、任何两个,以及任何长度不超过 24 位的突发错误,都会改变余数,消息便被拒收。先手算一个 8 位消息的 4 位 CRC 来看清机制,然后,如果你会编程,实现真正的 CRC-24,验证示例消息通过、而翻转任何一位都会使它失败。这是每一个现代系统都在用的差错检测,而在这个语境里,一个漏掉的错误可能在管制员的屏幕上放出一架幽灵飞机。
第 4 课
作用距离:地球的弧面与平方反比定律
接收机能听到多远的飞机?有两种不同的极限在起作用,值得把它们分开看。第一种是几何的。在 1090 MHz,无线电不会绕着地球弯曲;它沿直线传播,所以接收机只能听到其地平线之上的飞机,即从飞机到天线的直线不碰到地面的那些。推导地平线距离。半径为 R 的球面上方高度 h 处的天线,看到的地平线是其视线与球面相切的地方;切线和两条半径在切点处构成直角,所以 d^2 + R^2 = (R + h)^2,得 d^2 = 2Rh + h^2,由于 h 相对于 R 可以忽略,d = sqrt(2Rh)。取 R = 6371 km,h 以米计,d (km) = 3.57 sqrt(h)。大气的折射率随高度下降,使无线电略微向下弯曲;标准修正把地球当作半径是真实值四分之三倍的球体,用 4.12 代替 3.57。从高度 h1 的天线到高度 h2 的飞机的完整视线,是两个地平线距离之和:
d (km) = 4.12 x ( sqrt(h1) + sqrt(h2) ) h1、h2 以米计天线在 20 m 高的屋顶上,飞机在 11000 m:4.12 x (4.47 + 104.9) = 451 km。同一天线,飞机在 1000 m:149 km。30 km 外跑道上的飞机:4.12 x (4.47 + 2) = 27 km,所以无声。
用你自己的天线高度画出 d 随 h2 变化的图。曲线先陡后平,它解释了每一台接收机覆盖范围的形状:对巡航交通是 400 km 以上,对进近中的飞机是几十公里,对地面上的飞机一无所获,除非是隔壁的机场。它解释了为什么高度是接收机最重要的性质,以及为什么一座山、一栋楼,或者飞机侧倾转离时自己的机翼,会瞬间切断航迹。
第二种极限是能量。应答机辐射几百瓦,在各个水平方向上大致均匀。在距离 d 处,这份功率散布在面积为 4 pi d^2 的球面上,所以固定有效面积的天线截获的功率按 1 / d^2 下降:这就是平方反比定律,你应当从球面面积推导它而不是死记。距离加倍,功率四分之一;十倍,百分之一。工程师用分贝表示损耗,10 dB 是功率的十倍,3 dB 是两倍,因为分贝把跨越许多数量级的乘法变成了加法。两根简单天线之间的自由空间路径损耗是:
路径损耗 (dB) = 20 log10( d,单位 km ) + 20 log10( f,单位 MHz ) + 32.44在 400 km 和 1090 MHz:52.0 + 60.7 + 32.4 = 145 dB。250 W 的发射机是 +54 dBm;接收功率 54 - 145 = -91 dBm,约 8 x 10^-13 W。
这个数字值得停下来想一想:屋顶上的接收机检测的是比离开飞机时弱 10^14.5 倍的信号,一万亿分之一瓦。一台好的业余接收机可以解码到约 -100 dBm,所以在 400 km 处还有 9 dB 的余量。换句话说,对一架巡航中的客机,能量极限和几何地平线落在同一个地方,而这是有意设计的:应答机功率和接收机标准的规定,就是要让一架飞机在其地平线之内可闻、而超出不多,以免信道被邻国的交通淹没。
两个细化。多普勒:以 250 m/s 接近的飞机使接收频率偏移 f v / c = 1.09 x 10^9 x 250 / 3 x 10^8 = 908 Hz,不到百万分之一,接收机从不在意;对比同一架飞机的声音,那里 v / c 是 250 / 343,飞机经过时音高下降将近一个八度。还有飞行时间:400 km 以 c 计是 1.33 ms,所以广播的位置到达时已经旧了 1.33 ms,其间飞机移动了 33 cm;对地图可以忽略,对多点定位则是决定性的,它正是靠这些微秒活着的。
第 5 课
天线与接收机:从一道 27 厘米的波到地图上的一个点
天线是一段导体,经过的电磁波在其中感应出交变电流,而同一个装置在电流驱动下会发射出一道波;接收天线和发射天线是同一样东西反过来运行。感应电流在共振时最大,此时导体的长度让沿导体的电流分布与波的振荡相吻合,正如长度合适的琴弦与特定的音共振。直导体的基频共振在半个波长处,1090 MHz 时为 13.75 cm,电流在中央最大、两端为零。实用的 ADS-B 天线,在飞机上和大多数接收机上,是四分之一波长单极天线:一根 6.9 cm 的竖直振子立在导电地平面上,地平面形成它的镜像,于是振子与镜像合起来构成半波偶极子。在飞机上,机身就是地平面;买来的 1090 MHz 天线把同样的几何结构藏在它的管子里,并层层叠加了好几次。自制天线只要差几毫米就会失谐,只能听到一小部分天空,所以项目的接收机使用出厂调谐的天线。
竖直单极天线对地平线方向最灵敏,沿自身轴线方向则完全不灵敏;它在三维空间中的灵敏度是一个环形甜甜圈,天线穿过中间的洞。所以你的接收机会完美地听到 300 km 外的飞机,却会把正从头顶经过的那一架丢失几秒钟,而你可以亲眼看着这件事发生。共线天线,即多个谐振单元叠放,把甜甜圈压扁,以头顶的空洞为代价提高地平线方向的灵敏度:这就是天线增益,以 dBi 计量,它来自灵敏度的重新分配,绝不是凭空创造。另外,根据第 1 课,天线必须竖直,因为波是垂直极化的。
天线和地图上的一个点之间有四个阶段。带通滤波器让 1090 MHz 通过,拒绝几百兆赫之外强得多的手机信号,否则它们会使后面的一切饱和。天线处的低噪声放大器在电缆之前把信号放大一千倍,而电缆在 1090 MHz 上每十米损耗约 3 dB,即一半信号;在电缆之后放大,就连电缆的噪声也一起放大了。软件定义无线电,一个原本作为电视调谐器出售的 20 欧元 USB 设备,把信号下变频,并以每秒两百万次采样成一串数字。从这里起就是编程了:免费软件在样本中扫描前导码,测量每个微秒时隙的哪一半携带更多能量,拼出 112 位,计算 CRC,若通过则解码各字段。跟踪器随后配对奇偶位置帧,按 ICAO 地址合并位置、速度和身份,并保持每架飞机的状态直到消息停止到达,通常是因为它降到了地平线以下。
画出这条链条,标出每个阶段的量:天线处的纳伏,放大器之后的微伏,无线电输出的每秒两百万个样本,解码器输出的每秒几百帧,跟踪器输出的每架飞机一条记录。地图上的一个点是一条链条的远端,其中每一环都是这门课程里的一个概念:共振、滤波、放大、采样、模式匹配、解码、差错校验、汇聚。项目就是搭建这条链条,并用天空检验课程:测量你的最大距离随高度的变化,与地平线公式比较;比较天线在室内、窗边和屋顶上,竖直和水平的表现;记录一天的交通,找出最繁忙的小时和典型的巡航高度;解码原始消息,并在自己的代码中验证它们的 CRC。然后,问一问这个系统提出却不回答的问题:消息没有签名,那么是什么阻止有人广播一架幽灵飞机;飞机依赖可能被干扰的卫星,那么被干扰时管制员看到的是什么;数据标识飞机,而飞机可以标识人,那么谁应当有权跟踪谁。
挑战题
每一题先在纸上算出来。核对会显示答案和推理。
1. 1090 MHz 信号的波长是多少?为它制作的四分之一波长天线有多长?
2. 消息比声音快多少倍?30 km 外的一架飞机同时发出两者;声音到达时它飞了多远?
3. 接收机的时钟误差为 2 微秒。这会造成多大的距离误差?卫星接收机为什么需要四颗卫星而不是三颗?
4. 24 位地址能标识多少架飞机?以每微秒 1 位计,一条 112 位消息持续多久?加上前导码的整次发射呢?
5. 在消息 8D4840D6... 中,下行格式和能力是什么?ICAO 地址是什么?
6. 接收天线高 15 m。到 9000 m 高的飞机的无线电地平线是多少?到 300 m 高的呢?
7. 为什么距离加倍会使接收功率变为四分之一?200 km 处的路径损耗是多少,与 400 km 处的 145 dB 相比如何?
8. 预测:如果天线平放,作用距离会怎样?如果接收机从屋顶搬到底层呢?
下一步
把它做出来
这几节课里的一切都可以从一扇窗口得到验证。动手工作坊给你购物清单(约 100 到 150 欧元,或者你已有的一块 Raspberry Pi)、该选哪根天线以及把它放在哪里、安装 Dataero 共享程序的三条命令,以及用真实飞机检验公式的测量:无线电地平线、平方反比定律、一天的节奏。当你的接收机向地图共享数据时,它听到的每一架飞机都会为所有人画出来,上面带着你的站点的名字。