原来,“噪声” 里藏着数据
用 Signal Lab 探索 SAME 编码:紧急警报里的报头藏着什么信息?
ProjectsLearningOn this page
最开始,我认为紧急警报开头的那三段声音只是噪声,吸引人的注意。后来才发现,里面竟然包含很多信息。
这一下就有意思了起来:在 “开始说话” 前,接收设备就可能已经知道发生了哪类事件、涉及哪些区域,以及消息的有效时长。我想探究这个过程到底如何实现,于是把 SAME 学习功能做进了 Signal Lab。
一段神秘的报头
SAME 的全称是 Specific Area Message Encoding,用于 NOAA 气象广播和美国的紧急警报系统 EAS。开头的短促信号传输的是供机器读取的报头,语音播报则是消息的另一个部分。NOAA 的说明介绍了接收设备如何利用这些字段筛选与自己有关的警报。
这里的 “三段” 指重复发送三次。每段信号内部用两种频率传递数据:1,562.5 Hz 表示 0,约 2,083.3 Hz 表示 1,速率约为每秒 520.83 位。后面那段较长的提示音是另一回事。EAS 协议分别规定了它们的格式。
解码之后,我们会发现报头其实是一行文字。下面用一个虚构的洛杉矶县每周测试消息做例子。可以试着更改一些数据,再看看里面的含义。
读懂这段信号
改动字段、查看一个字节,再比较三次报头。这里只做无声演示,不会发出警报,也不是完整的解码器。
ZCZC-EAS-RWT-006037+0015-3021800-SIGLAB -再往里看:一个字符如何传输
0x5A最先发送的位 → 最后发送的位
按传输顺序排列的位:
每格是一位,持续 1.92 毫秒。0 对应 1,562.5 Hz,1 对应约 2,083.3 Hz。这里按实际发送顺序排列,最低有效位在前,与通常书写二进制数的顺序不同。
如果少收到一次,或其中一次不同呢?
A、B 代表两个完整、可解析,但有一个字段不同的报头。每个位置都是一次独立的物理发送。试着选择接收到了哪些。
这里演示 Signal Lab 对完整报头的比较方式。副本一致不能证明发送方的身份,实际接收设备的接受与恢复规则也可能不同。
试着读另一个报头
ZCZC-EAS-DMO-026163+0030-3021800-SIGLAB -无需脚本,也能阅读报头、字段说明和正文。
- 开始标记
- ZCZC 标记报头的开始。同步用的前导码位于它之前,这里没有显示。
- 发起方
- EAS 表示发起方属于 EAS 参与机构。这是类别,不是某个电台的名称。
- 事件
- 三个字母的事件码说明消息类型,并不包含语音播报的正文。 RWT = Required Weekly Test(规定的每周测试)。
- 区域
- PSSCCC 依次表示分区、州和县或同等区域。这里的示例均以 0 表示全部或未指定的部分。 0 · 06 · 037 = 加利福尼亚州洛杉矶县。
- 有效时长
- + 后面的四位数字采用 HHMM 格式,表示消息的有效时长。 +0015 = 0 小时 15 分钟。
- 发布时间
- 3021800 表示一年中的第 302 天、UTC 18:00。这个字段本身不含年份。
- 发送方
- SIGLAB 后补两个空格,组成八字符的虚构发送方标识,仅用于本例。
这里演示 Signal Lab 对完整报头的比较方式。副本一致不能证明发送方的身份,实际接收设备的接受与恢复规则也可能不同。
一些值得细看的地方
地理区域码就很有意思。006037 可以拆成 0 · 06 · 037,分别对应分区、加利福尼亚州和洛杉矶县。它不是邮政编码。第一位可以选择由当地定义的县内分区,随便改一个数字,并不代表就选中了一个实际有效的区域。NOAA 的分区说明解释了这一点。
时间字段也很紧凑:3021800 表示一年中的第 302 天、UTC 18:00,但它本身不包含年份。发送方标识有固定长度,所以本例中 SIGLAB 后面的两个空格也有作用。在这些可读字符之前,还有十六字节的前导码帮助接收端同步。NOAA 存档的技术规范记录了字节格式和时序。
我在 Signal Lab 里做了什么
在 Signal Lab 里,SAME 与音频调制解调器和摩尔斯电码工具放在一起。我把编码、解码和相关说明集中在一个地方,方便改动参数,再看看信号发生了什么变化。SAME 是这个声音与数据实验的一部分。
在 SAME 模式中,我可以修改报头字段、查找地理区域码、生成对应的波形,再通过 Test in decoder(在解码器中测试)直接送入解码器。这个内部测试是无声的:它处理生成的采样数据,不经过扬声器和麦克风。
接收端还会追踪重复发送的报头。其中有个容易忽略的实现细节:解码器可能通过几个不同的时序候选检测到同一次物理发送。如果把每次检测都算作一次新发送,一段信号就可能被误计成多份副本。Signal Lab 根据这些检测在音频中的位置,避免重复计数。
目前它比较的是完整、已经解析出来的报头。三次一致,才满足应用里的比较条件;少收到是不完整,不同则标记为冲突。它不会用逐位多数表决来重建损坏的报头,而且即使副本一致也不能证明发送方的身份。上面的实验演示的是这个比较过程,而不是实际警报设备的全部处理规则。
从一段声音,到可以解码的数据
这就是我想分享的小发现:原本被我当作噪声的声音,里面有可以拆开研究的结构。字符、时长和反复播放,各有具体作用。把它们做成一个小工具,也让我能顺着信息走一遍:从数据到波形,再从波形读回数据。
可以在 Signal Lab → Learn(学习)→ EAS / SAME 阅读带注释的格式说明,再打开项目中的 Encoder(编码器)→ EAS / SAME,试试完整工具。
Signal Lab 是学习项目,不是经过认证的警报设备。本文的实验不播放声音。美国对 EAS 编码和提示音的传输有限制,也包括录音和模拟信号;标注“测试”并不等于获得授权。考虑播放或分发之前,请先阅读 47 CFR § 11.45。
Comments