转自:http://blog.csdn.net/zhuzongpeng/article/details/78899198

目前SSD中ECC纠错代码主要两种BCH和LDPC。不过,随着SSD对ECC纠错技术要求越来越高,BCH纠错码开始有些吃力,所以,LDPC纠错码是发展趋势,也是最新最主流的纠错码。

为何需要LDPC?

我们先回顾一下NAND闪存的基础知识。在这里以MLC NAND为例。在MLC NAND中,有四个Vt level. 如下图,

随着P/E cycles的增加,MLC NAND的vt电压分布就会变大变宽,如下图,

当P/E cycle到了一定的数值之后,MLC NAND不同vt level之间就会有交叉,这样的话,就会引起数据读取错误,这时,就需要请出LDPC纠错码了。

LDPC编码

LDPC,是Low Density Parity Check Code的简称,翻译为中文就是“低密度奇偶校验码”。在1963年,LDPC第一次出现在R.G.Gallager博士发表的论文之中。LDPC码是一种稀疏校验矩阵线性分组码。为何称为“稀疏”呢?因为校验矩阵中的1要远小于0的数目,这样做的好处就是,译码复杂度低,结构非常灵活。

在LDPC编码中,会用到一个叫做H矩阵的校验矩阵(Parity Check Matrix),比如,我们来看一个交单的H矩阵:

为了可以更加直观的理解H矩阵,可以借助Tanner图,来表示H矩阵:

左侧V1~V7是变量节点,右侧C1~C3是校验节点。变量节点和校验节点之间的连接线称为沿(edge),也代表这H矩阵中的1. 每个节点上连接线(edge)的数目称为节点维度(Degree).

LDPC编码分为正则编码和非正则编码。正则编码中,横向和纵向中1的个数是固定的。非正则编码中,横向和纵向中1的个数不固定。举一个例子,正则LDPC编码矩阵:

在这个正则H矩阵中,横向维度Dr=4, 纵向维度Dc=3. Codeword长度=20.

与校验H矩阵对偶的矩阵,称为G矩阵,也是生成矩阵。构建优异的H校验矩阵,是不同SSD主控商实现LDPC的核心内容,每家都有各自的专利。

LDPC解码

在SSD内部的LDPC解码过程中,主要包括了两方面内容:硬解码(Hard Decode)和软解码(Soft Decode). LDPC解码的方法就是收到码字之后,与校验矩阵H相乘,如果是0矩阵,则说明收到的是正确码字。反之,则不正确码字,再根据相乘结果进行进一步纠错解码。

硬解码(Hard Decode):

信息传递(Messag passing)是LDPC硬解码常用的方法。校验节点和可变节点之间传递信息,进行迭代,直至所有的奇偶校验归0,则解码成功。

举个解码的例子:

迭代1:第一次信息传递迭代之后,Hard decode解码,此时n0,n4,n6仍为1.

迭代2:第二次信息传递迭代之后,Hard decode解码,此时n0仍为1.

迭代3:第二次信息传递迭代之后,Hard decode解码,奇偶校验归0.

软解码(Soft Decode):

软解码的原理是调整不同read level,根据读取结果后,判断bit是1或者0的概率,然后根据1或者0概率实现软解码, 如下图。

结语

本文我们简单的阐述了为何需要LDPC,LDPC编解码的基本原理。

本文链接:http://www.cnblogs.com/sylar5/p/8136314.html

SSD ECC中的LDPC编解码原理的更多相关文章

  1. 蓝牙协议中的SBC编解码原理和仿真

    一.SBC的原理 SBC是subband codec的缩写,中文叫做次频带编码,也叫子带编码.其基本原理是把信号的频率分为若干子带,然后对每个子带进行编码,并根据每个子带的重要性及特点分配不同的位数( ...

  2. 编解码原理,Python默认解码是ascii

    编解码原理,Python默认解码是ascii 首先我们知道,python里的字符默认是ascii码,英文当然没问题啦,碰到中文的时候立马给跪. 不知道你还记不记得,python里打印中文汉字的时候需要 ...

  3. JAVA WEB 中涉及的编解码

    1.对URL解码 1)URI部分解码:<Connector URIEncoding="UTF-8" /> 2)QueryString解码要么是 Header 中 Con ...

  4. Java Web中涉及的编解码

    用户从浏览器发起一个HTTP请求,存在编码的地方是URL.Cookie.Paramiter.服务器端接收到HTTP请求后要解析HTTP协议,其中URL.Cookie和POST表单参数要解码,服务器端可 ...

  5. HDBn编解码原理 n阶高密度双极性码

    /*------------------------------------------------------------------ HDB3 编码解码原理    // 转载 ---------- ...

  6. 高速理解掌握node.js 字符编码,确码过程 以及base64编解码原理

    var buf1 = new Buffer('a','ascii'); // 字符'a' -> ascii编码 -> 61 存在计算机中 console.log(buf1); var b ...

  7. 搞清tomcat中的编解码

    http://www.xuebuyuan.com/1287083.html *********************************** 经常会被乱码问题搅得头晕脑胀.事实上,乱码问题涉及的 ...

  8. MPEG 编解码相关资料收集

    以下是我搜集的关于MPEG1/2的编解码相关的资料: (注:mpge帧内编码是基于jpeg编码的,所以请务必先理解jpeg的编解码原理.) 1:Introduction to MPEG 2 Video ...

  9. (中级篇 NettyNIO编解码开发)第六章-编解码技术

    基于Java提供的对象输入/输出流ObjectlnputStream和ObjectOutputStream,可以直接把Java对象作为可存储的字节数组写入文件,也可以传输到网络上.对程序员来说,基于J ...

随机推荐

  1. dlopen与dlsym用法

    dlopen和dlsym是用于打开动态链接库中的函数,将动态链接库中的函数或类导入到本程序中: dlopen函数: 功能:打开一个动态链接库 包含头文件: #include <dlfcn.h&g ...

  2. (七)maven之阿里云镜像提高jar下载速度

    阿里云国内镜像,提高jar包下载速度 镜像 maven默认会从中央仓库下载包,但是下载过几次就知道,下载速度非常慢.镜像就相当于是中央仓库的一个副本,内容和中央仓库完全一样,而且同时也能保证下载速度, ...

  3. Words Prefixed Trans-

    transit v. Pass across or through (an area) The new large ships will be too big to transit the Panam ...

  4. Gym - 101291C (很有意思的最短路)

    题意: 给出一张地图和机器人还有出口的位置,地图上面有障碍.然后给出UDLR上下左右四种指令,遇到障碍物或者越界的指令会忽略,剩下的继续执行. 只要到达出口就算找到出口,然后给你一串指令,让你修改指令 ...

  5. C#中窗体边框隐藏

    设置窗体属性 FormBorderStyle 为 None

  6. AppCrawler自动化遍历使用详解(版本2.1.0 )(转)

    AppCrawle是自动遍历的app爬虫工具,最大的特点是灵活性,实现:对整个APP的所有可点击元素进行遍历点击.   优点: 1.支持android和iOS, 支持真机和模拟器 2.可通过配置来设定 ...

  7. Codeforces Round #271 (Div. 2)-B. Worms

    http://codeforces.com/problemset/problem/474/B B. Worms time limit per test 1 second memory limit pe ...

  8. IIS应用程序池"启用32位"导致服务不可用的503错误

    原来运行正常的站点,突然不正常了,出现503错误.查看操作系统的日志查看器显示: 由于配置问题,无法加载模块 DLL“C:\Program Files (x86)\IIS\Asp.Net Core M ...

  9. idea Please specify commit message

    在idea中使用github来进行版本控制的时候, 当点击提交的时候遇到了这个问题 错误: Please specify commit message 解决方法: 在commit message中填写 ...

  10. vuejs 的错误代码,有助于理解

    1.vuejs 的双向绑定理解 2.嵌套复杂对象的使用. * 1. 分割都是, 2. json 中分割都是; 4. v-bind:value="param" 括号内的就是 vuej ...