纠错编码
一个翻转的比特,三种编码的应对
蓝色格子是收到的数据位,金色格子是附加的校验位,红框格子是被噪声翻转的那一位。依次按下无保护、奇偶校验、汉明,就能并排比较三种码如何处理同一个一位错误。只发数据时连出错都察觉不到;一个奇偶校验位只能察觉出错;汉明码则能找出是哪一位并把它纠正。
噪声翻转比特
噪声偶尔会在接收端把 0 变成 1、把 1 变成 0。图中原来的数据是 1011,第二位被翻转,结果以 1111 到达。如果只发送数据位,1111 也是一个完好的 4 位数据,接收机连出了错都无从知道。因为任何位模式作为数据都同样合理。
冗余比特当哨兵
附加上按规则从数据算出的校验位,情况就不同了。最简单的奇偶校验位是所有数据位的 XOR,它总让 1 的个数保持为偶数。原数据 1011 中有三个 1,所以校验位是 1;第二位一翻转,1 就变成五个,成了奇数,校验便对不上。接收机由此知道出了错,但单凭一个奇偶校验位,查不出错的是哪一位。
距离带来纠正
把码字看成点,好的码会让有效的点彼此离得远远的。两个码字取值不同的位数叫作汉明距离;有效码字之间的最小距离为 2 时能检出一位错误,为 3 时还能纠正。因为错了一位的字,依然离原来的码字最近。汉明(7,4)码用 3 个校验位,就能在 7 位中找出任意一位的错误。三个校验位各自守护一组不同的数据位,所以哪些校验对不上的组合,会唯一地指向被翻转的位置。代价是码率 R = k/n = 4/7,也就是为了传 4 位信息要付出 3 位的冗余。
回到第一屏
没有保护时,被翻转的位看起来就像正常的数据,呈红色。加上一个奇偶校验位后,出现了“有地方不对”的信号,却不知道是哪一位,呈橙色;汉明码的校验位把不一致之处汇总起来,准确找出那一位并把它翻回去,就变成了金色。要记住的只有一点:用多余的比特让有效的字彼此远离,被噪声推开一步的字也会回到离它最近的原字上。香农所承诺的、容量之下的可靠性,就是这样实现的。
通信单元到此结束
从“为什么要调制”出发,我们一路跟着一条消息走完了全程。把基带的微小起伏加载到载波上、搬到频率轴高处(AM·FM),变成数字(采样·PCM),再用比特去摇动载波(ASK·FSK·PSK)。接着遇到了带宽的上限,测量了噪声与 SNR,用概率驯服了随机,看到了香农的绝对极限,最后在这个极限之下用编码把差错纠正回来。说到底,通信就是在充满噪声的世界里把消息完整地递过去的技术。