正如打败爱情的是时间一样,所有型号的闪存都无法保证存储的数据会永久稳定。这时候需要 ECC(纠错码)去给闪存纠错。 ECC 能力的强弱直接影响到了 SSD 的使用寿命和可靠性。本章简单介绍了 ECC 的基本原理,和目前最主流的 ECC 算法 LDPC。
 
噪声信号充斥着整个世界,不只是打电话催债时对方声嘶力竭的喊道听不清,也可能是还钱时手抖多按了一个 0,甚至在生物学领域,基因对的复制偏差,癌细胞的产生,意外突破橡胶屏障的新生命都可以划入噪声信号的范畴。凡是有信息传递的地方就有噪声。我们唯一能做的是,把噪声限制在一定大小的笼子里。
 
如何建造这样一个笼子,我们看一下历史的经验。
 
场景是,蛋蛋每天坐地铁都会邂逅一个美丽的女孩。两人日久相熟,经常相视一笑,却默然无语。转眼间,蛋蛋就要离开这个城市,他决定勇敢地表白。
 
表白的地点,还是那一班地铁。唯一的困难是地铁太吵了,女神能够准确无误的接受到自己爱的呼唤吗。这难不倒蛋蛋,他采取了以下策略。
 
1) 扩音器一个。喂喂,喂,音量调高。大声说我爱的就是你。
 
2) 每个字清晰的说三遍。我,我,我,喜,喜,喜,欢,欢,欢,你,你,你。
 
3) 结尾用手比划一个爱心出来。
 
利用扩音器的蛋蛋,改善了有效信号和噪声的强度比。为女神准确的接收作了基础建设。每个字说三遍,增加了信息的冗余,即使有少量字没有听清,也不影响表达的内容。结尾一个性感的手势,增加对关键信息的保护,借助大家都懂的意象,盖上爱的印章。
 
聪明的蛋蛋,揭示了长久以来我们传播信息的诀窍。增强信号和噪声的强度比和信号冗余。前者不在此讨论,我们只考虑不用扬声器的情况下,如何尽量准确的传递信息。
 
实际通讯中,我们用 Information bits 表示有效信息长度,channel use 表示实际通讯中传输的信息长度。定义:
Code rate = (information bits)/(channel use)
 
举个例子,因为每个字说三遍,所以蛋蛋采用的 Code rate 为 1/3。
 
Code rate 可以反映冗余程度。Code rate 越高,冗余越小,反之冗余越大。Shannon 揭示了,每一种实际的信息传输通道,都有一个参数 C,如果 Code rate < C, 有效信息传递的错误的概率可以在理论上趋近于 0。但是如何趋近于 0,是纠错编码(Error correction codes)要做的事情。
 
我们后续的讨论只限制在二进制的世界,即所有的信息都是二进制表示。
 
最后,如果还有人在关心蛋蛋表白结局的话,我只能复述女神的原话:我,我,我,也也,也,喜欢欢欢,你你,小结巴。
 
通信系统模型
所有的信息传播都少不了通信系统,一个完整的通信系统模型,信息由信息源产生,由发送器发送出信号,通过包含噪声的信号传输通道(Channel,简称信道),到达接收器,接收器提取出信息发送到目的地。
 
整个框图如所示。
 
图 1-1 通信系统框图
 
回到蛋蛋跟女神表白的例子,蛋蛋心中所想就是信息源,发送器是神经和肌肉控制的嗓子。声音就是信号。嘈杂的车厢就是 Channel。女神的耳朵就是接收器,最终信息反映到女神大脑中。