**RTCM SC-104**是一种通信协议，用于从无线电接收器等辅助源向GPS 接收器发送差分 GPS (D-GPS)。该标准以创建它的海事无线电技术委员会(RTCM) 的特别委员会 SC104 命名。该格式没有限定D-GPS消息的来源。该通信协议如今已应用于各种系统，如长波海事广播、通信卫星广播和互联网分发。

该协议的第一个广泛使用的版本于 1990 年发布，它基于 GPS 卫星使用的 30 位长数据包，称为"帧"。每条消息都以标准化的长度为两个帧的头部开始，紧跟着一个或多个数据帧。这些帧的设计类似于 GPS，可以很容易地集成到 GPS 接收器中，但缺点是信道效率低，限制了在给定时间内可以发送的消息数量。2003 年，标准的第 3 版引入了一种全新的消息格式，它使用可变长度格式来提高效率，从而增加可以发送的消息数量——这对于实时 GPS 校正很重要。新标准还大大增加了可能的消息类型的数量。遵照标准流程，标准的命名发生了变化，3.1 版成为**RTCM 标准 10403.1** 。截至2021年5月20日 (2021-05-20)[update] ，最新版本是 3.3 或 **RTSM Standard 10403.3，修正 1 和 2**。

RTCM SC-104并不是支持D-GPS 的唯一标准。例如，Trimble公司基于相同的目的引入了**紧凑型测量记录(CMRx) 格式**。但是，随着 10403.1 的推出，其中大部分的协议被RTCM 10403.1所取代。

版本 1
----

最初的 SC-104 于 1985 年作为初始版本发布，但从未被广泛采用。它被非常相似的第 2 版所取代。

版本 2
----

RTCM 第 2 版于 1990 年 1 月发布，随后于 2001 年 8 月更新至 2.3 版。 

### 版本历史

* RTCM 2.0：只有D-GPS，没有RTK数据
* RTCM 2.1：完整继承RTCM 2.0；为RTK和carrier phase data增加了新的消息
* RTCM 2.2：增加了对GLONASS的支持和**消息类型31-36**

### 帧结构

RTCM 第 2 版基于一组固定长度的 30 位"字"，这些"字"串在一起形成较长的消息，称为"帧"。所有字都使用与 GPS 信号相同的算法——以基于汉明码的6 位"奇偶校验"码结尾，剩下 24 位用于数据传输。该格式特意模仿实际 GPS 消息的格式。 24 位有效负载中的数据被提取为单独的数据，然后编码为本地传输的 6 位数据字符串，具有前导 1 起始位和尾随 0 停止位，以形成适合在ASCII上使用的单个8位值。数据以最高有效位格式编码，而不是类似于ASCII 的最低有效位，因此需要进行一些处理才能在接收后将其恢复为原始格式。 所有帧都以标准的两字头部开始。第一个字以"神奇数字"开头，即 8 位"前导码"，始终包含 01100110。接下来的六位编码消息类型，从 0 到 64。其后是一个 10 位的站 ID。第二个标头字以 13 位版本的 z-count（GPS 中的时间单位）开头，3 位序列号以确保帧无序到达时可以进行排序，5 位长度它计算帧中的总字数，包括标题和三位"站健康"代码，其中 111 表示站工作不正常。 

### **消息类型**

总共允许 64 种消息类型，尽管其中一些被故意保留为将来扩展或很少使用后来放弃的格式。原始标准包括六种消息格式，**消息类型1** 用于校正数据，**消息类型2** 用于更新以前的校正，**消息类型3** 提供测量站的位置，**消息类型6** 作为空消息以填充未使用的插槽，**消息类型16** 包括用于发送测试的任意 90 个 ASCII 字符消息， **消息类型59**用于设备供应商使用的专有消息。 

1992 年的2.1版本该小组开会考虑使用相位比较 GPS (RTK) 的用户的意见，该 GPS 产生的精度约为1厘米。 1994 年，新的消息类型被添加进来，标准版本更新为为版本 2.1，包括用于原始伪距测量的**消息类型18** 和**消息类型19**，和作为校正的**消息类型20**和**消息类型21**。新的**消息类型9**提供了**消息类型**1和**消息类型**2 的替代，并成为最广泛使用的格式之一。 1997 年的 2.2 版增加了 **消息类型31** 到 **消息类型37**以支持GLONASS ，**消息类型31**和 **消息类型32** 相当于 GPS 的 1 型和 2 型。该协议最后的更新是 2001 年的 2.3版本，添加了更多信息，例如 **消息类型23** 中的天线 ID 和描述、**消息类型24**中天线的高度，以及与Loran-C和无线电信标一起使用的其他几个字段。 

### 协议缺点

由于其固定宽度的数据包和显著的纠错开销，版本 2 从传输方面并不是很有效，虽然这对于大多数 D-GPS 应用场景来说不是问题，但对于消息负载相对较高的RTK来说这是一个糟糕的问题。出于这个原因，Trimble公司于 1996 年推出了自己的紧凑型测量记录(CMR) 格式，并于次年更新了成CMR+。 此外，数据包格式的一些特性，特别是奇偶校验系统依赖于按顺序到达的数据包的限制，使其不适合例如互联网的分发系统。除此以外，由于已用完可能的消息格式，该协议无法支持伽利略和北斗等新系统。

版本 3
----

RTCM版本3最初于2004年2月发布， 是 RTCM标准当前版本，该协议也还在处于不断更新中。与 RTCM版本2.3 相比，RTCM版本3使用可变长度消息格式和单个24 位循环冗余校验(CRC)，而不是固定长度30 位字使用 6 位奇偶校验。与早期版本一样，消息格式以扩展为8 位的前导码开始，然后是6位保留区域，然后是10位消息长度，最多允许1024字节的数据。每条消息都可以携带私有定义的标头和数据，紧跟在标头之后，然后用 CRC 收尾。数据传输的有效性的提升是显著的，特别是在 RTK 的情况下：RTCM版本3的RTK的校正集通常是版本2长度的一半。  此外，RTCM3 将消息与相关数据组合在一起发送，而不是发送单独的消息来完成相同的任务。例如，在版本2中，发送完整的 RTK 消息需要同时发送**消息类型18**进行校正和**消息类型19** 用于伪距测量，而在版本3中，此信息组合在可以通过发送单个**消息类型1003**来实现。为同一类型的信息定义多种消息类型，进一步提高效率；例如，**消息类型1001**仅在 L1 频率上具有 GPS 数据，而 **消息类型1002** 增加了各种附加信息，而 **消息类型1003** 和 **消息类型1004** 对可以利用第二个载波的那些站的L1和L2数据执行相同的操作。 

最初的 RTCM版本3.0定义了 13 种消息类型，从 **消息类型1001**到**消息类型1013**。**消息类型1002**包含L1 GPS 测量的详细信息，而**消息类型1004** 既是L1又是L2。 **消息类型1010**和**消息类型1012**是GLONASS的等价物。**消息类型1013**包含各种系统详细信息，包括 GPS 周数。**消息类型1005**、**消息类型1006**和**消息类型1007**包含有关电台的详细信息，其中**消息类型1007**添加了天线高度。位置消息，**消息类型1002**或**消息类型1004**和**消息类型1010**或**消息类型1012**，大约每秒一次从任何特定站发送。站点详细信息大约为20到30秒。 

在接下来的协议版本里，消息类型很快扩展到包含GPS 星历表的**消息类型1019，**它提供轨道更新并可用于更快地锁定 GPS 信号；**消息类型1020** 是等效的 GLONASS 星历，该消息很少被使用，因为卫星本身也会定期发送相同的信息；之后的协议的更新添加了伽利略 F (**消息类型1045**) 和 I (**消息类型1046**)、QZSS (**消息类型1044**) 和北斗 (**消息类型**1042) 的星历表。 该协议的另外一个重要补充是添加了用于定期更新卫星信息的状态空间表示 State Space Representation (SSR)，以及允许使用单个卫星组合来自不同卫星集的数据的多信号消息 Multiple Signal Message (MSM)数据格式。   MSM 还允许基本接收器添加多普勒校正，这主要用于在移动接收器使用 L1 信号来消除歧义。

与其他GPS数据格式的关系
-------------

除了RTCM SC-104的协议之外，描述GPS数据的协议还有RINEX和NMEA 0183，他们之间的主要区别如下：

* RINEX
	+ 从不同的生产上的GPS终端接收数据
	+ 用于静态处理
* RTCM
	+ 在GPS接收机之间传输数据
	+ 二进制文件，用于实时D-GPS和RTK的数据更新
* NMEA 0183:
	+ GPS接收机之间和终端之间传输数据
	+ ASCII文件，用于实时处理

参见
--

* NMEA 0183
* RINEX