我有一条短消息(假设 24 到 30 位长)要通过嘈杂的通道发送。另外,该通道只允许发送0或1,没有“静默”,因此需要开始传输标记。对于我收到的每一位,我都有从 0.0(我们根本不知道发送了哪一位)到 1.0(我们确定发送了给定位)的信心 - 这可以很容易地转换为不同的范围,例如:-127(cerraint) '0') ... 0(不知道发送了什么)... 127(某个 1)。
现在我使用了这个很好的答案: https://stackoverflow.com/a/79145998/207717 对于我之前的问题,加上一些幼稚的开始传输标记以获得相当好的结果,但我不使用接收位的置信值,也不使用任何高级的开始传输标记,所以我确信可以改进。
我读过一些用于无线通信、5G 和太空任务的高级纠错码,例如:
但这很快就变成了一个具有非常高级数学的深兔子洞。我希望一些库实现这些没有专利的解决方案,但我找不到 CRC、Reed Solomon 和一些 BCH 之外的任何内容。 您能推荐最佳实用方法吗? 计算性能不重要,简单,参考,用python实现就够了。
8|12 或 (12,8) 代码应该可以工作。
使用 BCH(15,11) 代码或等效的 CRC、11 位数据、4 位奇偶校验,可以检测任何 2 位错误。域多项式、奇偶校验和 CRC 多项式相同 x^4 + x + 1 == hex 13。
这是一个15位代码:但是只有11位数据中的低8位用于数据字节,并且只传输12位。标记的编码就好像 11 位代码字的高 3 位都是 1 位一样,但不包含在输出中,因此您得到 0x00F 作为代码字。这意味着数据和标记之间至少有 2 位差异。至少需要 2 个数据位才能具有奇偶校验 == 0x0f,例如 01010000 或 10000100,因此任何一位错误都不会错误地误识别数据 + 标记。