摩尔斯电码为什么仍然有效:时序、频率与人工容错
摩尔斯电码由 Samuel Morse 与 Alfred Vail 在 1836 到 1844 年间研制。它已经将近两百岁,比电报本身又活了半个世纪,是今天**唯一**仍在被人类彼此直接传输(不靠计算机做编码)的字符编码。最常见字母 E 是最短信号(一个点)这件事,不是巧合——这是从印刷厂字盘里推出来的数据压缩,比 David Huffman 1952 年把它形式化早了一百年。
整个博客里只有这一篇的主题比电网还古老。Morse 是为电报设计的——单线电流回路上由人手工敲键、靠耳朵解码的信号。每一种后来出现的电子通讯技术都让 Morse 显得过时,可它就是没消失。飞行员飞往的机场,它们的导航辅助仍在用 Morse 广播自己的呼号。Hams 在短波上用 Morse 以每分钟 25 字聊天。承载现代互联网的海底电缆,最早是 Morse 时代电报电缆铺设船的"嫡系后代",被取代的网络说的就是 Morse。
这篇是写给"看到 ... --- ... 想理解它周围那个系统"的人。
两套 Morse
今天大多数人学的是 国际 Morse(ITU Morse),1865 年由 ITU 形式化,至今基本没变过。早期还有一种 美式 Morse(也叫"Railroad Morse"),1900 年前后在北美使用,码表不同、长划更长、字符内部还有空格。两者不互通——一个美式 Morse 操作员和一个 ITU Morse 操作员互相听对方的电报,听到的大多是乱码。
本文说"Morse"指的都是 ITU Morse。美式 Morse 是博物馆藏品。
ITU Morse 字母表覆盖 26 个字母(不分大小写)、10 个数字、一小套标点,以及一组 prosign(程序信号——停止、错误、消息结束)。仅拉丁字母;非拉丁字母表有本地变体(西里尔、希腊、阿拉伯、日语 kana 用 Wabun 码)。
四个时长单位
Morse 只有两个符号——短(.,"dit")和长(-,"dah")——但有四种时长都重要:
- dit 长度:1 单位。
- dah 长度:3 单位。
- 字符内间隔(同字母里 dit / dah 之间):1 单位。
- 字符间间隔(同单词里字母之间):3 单位。
- 单词间间隔:7 单位。
这就是完整的时序模型。人类发报大致保持这些比例;软件生成的 Morse 完全精确。
"单位"本身由速度决定。WPM(每分钟字数) 是标准速度量度,用单词 PARIS(按惯例算 50 单位长)校准。20 WPM 等价于每分钟 1000 单位,每单位 60ms。普通 ham 在 15–25 WPM 操作;竞赛操作员经常超 40 WPM;少数冠军靠耳朵能解 60+ WPM——大约相当于正常英语口语速度。
软件"识别"手发 Morse 失败,几乎总是输给时序变化——真人的 dit / dah 不会精确 1:3,而且热身后越来越快。软件得追踪时序,不能假定它。
按频次看码表(以及为什么)
按"编码长度"看英语字母:
| 长度 | 字母 | 英语频率 |
|---|---|---|
| 1 元素 | E (.)、T (-) |
E ≈ 12%、T ≈ 9% |
| 2 元素 | I、A、N、M | 高 |
| 3 元素 | S、U、R、W、D、K、G、O | 大多偏高 |
| 4 元素 | H、V、F、L、P、J、B、X、C、Y、Z、Q | 大多偏低 |
Morse 和 Vail 是故意这么排的。他们去印刷厂数字盘——排字工把最常用字母放最大格——把最短的码分给最常用的字母。E 是一个 dit,T 是一个 dah,Z 是 --.. 而 Q 是 --.- 因为它们不常用。这就是按频率优化的前缀编码(任何码都不是另一码的前缀),原理正是 Huffman 编码——只是 Huffman 1952 年才把最优算法发表出来,Morse 与 Vail 一百年前用肉眼凑近最优了。
数字是统一的 5 元素码:
0 -----
1 .----
2 ..---
3 ...--
4 ....-
5 .....
6 -....
7 --...
8 ---..
9 ----.
好学(从一端数 dit 个数),按频率不优(数字在真实文本里并非等概率),但是个干净的系统。
标点与你不会想到的几个
完整 ITU 集合包含:
.句号:.-.-.-,逗号:--..--?问号:..--..!叹号:-.-.--/斜杠:-..-.(、)括号:-.--.、-.--.-&and 号:.-...:冒号:---...;分号:-.-.-.=双划线(分隔符):-...-+加号:.-.-.-连字符:-....-_下划线:..--.-"引号:.-..-.$美元号:...-..-@at 号:.--.-.
@ 是 ITU 在 2004 年加的,一个多世纪以来码表唯一的新增。原因是 hams 开始在空中互留 email 地址。编码(.--.-.)就是 "AC" 连读——之前没有约定,ITU 终于给了一个。
Prosign:那套看不见的词汇
Prosign 是用作过程标记的短组合,不当字母传输。某些用顶上加横线写(如 SK 上加横)以表示"这是一个符号,不是两个"。
| Prosign | 含义 | 编码 |
|---|---|---|
| AR | 消息结束 | .-.-. |
| SK | 联络结束 | ...-.- |
| BT | 分段 / 中断 | -...- |
| KN | 邀请特定台发报 | -.--. |
| K | 邀请任意台发报 | -.- |
| AS | 等待 | .-... |
| HH | 错误(8 个 dit) | ........ |
| SOS | 求救 | ...---... |
SOS 是几乎所有人都知道的那一个,也是几乎不再用 Morse 发的——现代求救信号走 GMDSS(数字)。历史意义真实存在:1912 年泰坦尼克沉没时,船同时发了 CQD(早期求救呼号)和 SOS(新采用的),SOS 因为无歧义、能快速发出而胜出。
"错误" prosign——........——就是八个快速连发的 dit。听到对方发错就连发八点,然后把那个错词从头来。它有效是因为没有任何真正字母或标点是八个 dit 长。
今天 Morse 还在哪用
美国海岸警卫队 1999 年停止监听 500 kHz Morse 求救。商业航海与航空几十年前就走出 Morse。然而:
- 航空导航辅助 在循环里广播自己的呼号 Morse 码。飞行员调到 VOR 或 NDB,听到
... .-. -..-.与图表对照,确认调到的是正确信标,而不是被错认或被欺骗的。飞行员被训练通过耳朵识别主要导航台的三字母呼号。 - 业余无线电(HAM) 在文化层面让 Morse 活着。CW(连续波)操作仍是简易设备能做的最频谱高效的数字模式,QRP(低功率)和 DX(远距离联络)里很流行。
- 特殊需求通讯。 单按键 Morse 是辅助科技里带宽最低的一种输入方式,重度运动障碍者使用——Stephen Hawking 时代的技术。现代眼动追踪基本取代了它,但技法仍存在。
- 文化与彩蛋。 表盘设计、首饰、歌曲(《碟中谍》主题曲里的几段、Rush 的《YYZ》副歌就是 YYZ 的 Morse)。这个格式作为视觉信号本身已经成为图标。
操作员真正怎么"抄报"
新手一码一码解——数 dit 听 "dit-dah" 翻成 "A"。这慢,5–10 WPM 就到顶。
熟练操作员在单词层解。他们不想"点点划,U,点,E,点点点,S",他们直接想"USES"。25 WPM 以上,逐字母解码就不可能——字符之间没那么多时间让你思考。大脑把每个 Morse 词当成一个听觉模式,就像流利读者不会一个一个字母读。
这也是为什么软件驱动的初学者训练用 Koch 方法:从两个字符开始按目标速度发,练到能抄,加第三个,反复。慢 Morse 比快 Morse 更难练流利,因为慢速下你听到的是个别 dit / dah(错误技能);快速下你听到的是词形(正确技能)。
常见坑(软件、操作、生活)
- 忘了字符间和单词间间隔。 新程序员常错:把
HELLO WORLD编了,但O和W之间的空隙是七单位,不是一个。 - 用 ASCII 去比 Morse。 空格分隔的
.... . .-.. .-.. ---不等于.... . .-.. .-.. ---——后者间隔更长。多数解码器用单空格分字母,/或三个空格分单词。 - 美式 Morse 漏进来。 老收音机手册和电影偶尔展示美式 Morse(字符内部有空格)。不要相信戏剧化呈现。
- 编码非 ASCII 字符。 核心 Morse 仅限拉丁。Wabun(日语)用同样 dit / dah 但映射到 kana,和常规 Morse 不兼容。
- 速度和接收方不匹配。 30 WPM 发给 10 WPM 操作员就是噪声。HAM 用 QRS(请慢)和 QRQ(请快)协调。软件解码器通常自适应。
- 手键时序漂移。 真人键时序会变化。锁死单位长度的解码器会失败;追踪滚动中位数的自适应解码器才行。
- 把 SOS 当字母拼。 它是一个连续九元素模式,没有字母间间隔——不是
S-O-S。逐字母编出来的信号略有不同。
什么时候你"故意要"把东西编成 Morse
只有一种场景是把"编码到 Morse"作为正确答案而不是好奇心:你在和明确说 Morse 的人或设备通讯。业余无线电操作员、备考仪表评级的飞行员、新奇硬件项目、追求时代准确性的电影道具。
其他场景里——这个格式是一件美丽的人造物,是与最早期电气通讯之间一条仍活着的连接,也是一个小小的例子说明"当周围技术彻底改变时,什么仍能存活"。今晚你在 7 MHz 接收机上能听到的那些点划,就是 1844 年 Vail 敲下的同一套码,加上 2004 年补的 @。
这个规范稳定到这个程度。现代工程师哪天能有这福分。
主要参考资料
用于核对本文技术细节的标准与官方文档。
在线编码与解码
本站 Morse 工具在浏览器内做 ITU Morse 与文本互转,支持字母、数字、标点、prosign。适合业余无线电备考、HAM 执照学习、或者解码手表面盘上的几个点。数据不会离开浏览器。
打开 Morse 工具相关文章
继续阅读同一主题领域的实践指南。
Node 生产 Dockerfile 里到底该有什么,不该有什么
网上大多数 Node Dockerfile 都把 node_modules 直接拷进镜像、用 root 运行、最后产出一个 900 MB 的层。本文只讲那几个真正影响构建时间、镜像体积和运行时安全的决定:基础镜像、多阶段构建、依赖层缓存、NODE_ENV 陷阱,以及为什么你的 docker-compose 不该照搬生产。
在用户之前发现缺失的翻译键和插值参数不匹配
缺失的翻译键会把原始键路径直接渲染给用户,插值参数不匹配会渲染出空串或崩溃。这两者在评审中都容易漏,因为开发者的语言包永远有全部键。本文讲如何结构化比较 locale JSON 文件、找出缺失键,并在发布前抓住参数不匹配。
能真正压测 UI 的 mock 数据(而不是只把页面填满)
大多数 mock 数据是同一行复制十遍、只换个 id。它填满页面,却什么都测不到。本文讲如何生成能压测布局边界、长名字、缺失字段、空状态,以及会破坏格式化代码的日期和数字格式的 mock 数据,并通过字段推断让一个 JSON 样本一步变成贴近真实的数据集。