Qraft

脏了也能读的秘密 - 把损坏的数据复原回来的技术

坏掉 30% 也能复原的惊人技术

黑白的方块图案,就算用记号笔把一部分涂黑,有时候手机照样扫得出来。这要归功于「纠错」(error correction)这项技术:在纠错等级 H 下,即使数据(码字)丢掉约 30%,仍能把原本的内容复原回来。不过这并不等于「面积涂掉 30% 也没关系」。缺损集中在一处,或者盖住了定位图案这类功能部分时,往往在远不到 30% 的时候就已经扫不出来了。

纠错不只用在图案上。CD、DVD、蓝光光盘、与人造卫星的通信、深海探测器的数据回传,各种数字通信里都少不了它。只要数据存在损坏的可能,几乎必定会把纠错做进去。

把「备用数据」一起送出去的思路

纠错的基本想法非常朴素:在本来的数据之外,再一并存进一份「备用数据」,等本来的数据坏掉时,就用备用数据把它复原回来。

不妨用身边的例子想一想。给朋友发消息说「明天 3 点车站前集合」,信号不好的话,也许会缺掉一小截。于是改成「明天 3 点车站前集合。重复一次,明天 15 点在车站前面碰头」,那么即使前半句丢了,也能从后半句把内容还原出来。这就是纠错最朴素的形态。真实的技术在数学上要精巧得多,但「事先留一份备用」这个思路是完全一样的。

四个等级 - 到底坏到什么程度还没事

黑白图案的纠错强度可以从四个等级里挑。L 级最多可复原 7% 的损坏,M 级是 15%,Q 级是 25%,H 级是 30%。数字越大,能扛的损坏越多,但相应地备用数据也越多,图案整体就会变大。

举个例子,存同一条链接,用 L 级 25×25 格就够了,换成 H 级有时就要 33×33 格。也就是说,「不容易坏」和「图案的大小」之间是此消彼长的关系。像名片那样想印得小一点的场合选 L 级或 M 级,像户外招牌那种容易脏的地方则一般选 Q 级或 H 级。

能把标志嵌进去,也是纠错的功劳

你大概见过中间嵌着企业标志、看起来很讲究的图案。标志所在的位置,图案的数据已经被彻底压掉了,却依然读得出来,靠的就是纠错。只要标志遮住的面积落在纠错的容许范围之内,就能从剩下的部分把原数据复原。

要嵌标志,铁律是选纠错 H 级(30%)。安全起见,一般把标志面积控制在整个二维码的 20% 左右,以纠错等级 H 为前提时上限的经验值约为 25%。如果用 M 级(15%)嵌标志,光是标志本身就把容许范围用光了,稍微脏一点就有读不出来的风险。

为什么靠备用数据就能还原

缺了一块还能还原,是因为事先算好的备用数据是与原信息相互关联地嵌进去的。打个比方,把几个数字连同它们的合计一起存下来,其中一个数字读不出来时,也能从合计倒推回去补上。纠错就是把这件事做得高明得多的机制,它会拿周围的线索把缺掉的部分重新算出来。正因如此,即使因为脏污或破损丢了一部分,只要把剩下的信息和备用数据对上,原来的数据就能重新活过来。

实际该怎么挑等级

纠错强度虽然有四个等级可选,但越强、备用数据就越多,能装的信息量也相应变少。也就是说,结实程度和容量是要拿来交换的。只在室内短期张贴、放在能保持干净的地方,这类场合用低一点的等级就足够了。反过来,户外招牌、容易蹭脏刮伤的位置,或者想叠一个标志上去的时候,选高一点的等级更让人放心。先把「在哪里、怎么用」想清楚,再挑一个与所需结实程度相称的等级,做出来的码才不浪费。

纠错技术在太空里同样大显身手

纠错技术在最严苛的环境里大显身手的舞台,是太空通信领域。NASA 的探测器旅行者 1 号,正从距地球 240 亿公里以上的地方往回发数据。在这个距离上信号极其微弱,宇宙线带来的噪声会让数据频繁出错。

旅行者号用的纠错技术叫「里德-所罗门码」,黑白图案用的也是同一项技术。这项在 1960 年代问世的技术,60 年后的今天依然同时活跃在太空探测和手机上,正是数学具有普遍性的一个好例子。身边随处可见的图案里,藏着和太空技术一样的数学——这么一想,看它的眼光是不是有点不一样了。