[0016] 下面通过实施例,并结合附图,对本发明的技术方案作进一步具体的说明。
[0017] 实施例1:
[0018] 如图1‑6所示,一种基于极化码和元数据信息的NAND FLASH差错控制方法,步骤一:将长度为k bits的信息序列M{m1,m2,K,mk}进行CRC编码,添加一个rbits的CRC校验因子,得到CRC码字。
[0019] 步骤二:在Polar码编码的过程中可以利用元数据信息来提高纠错性能,NAND FLASH中存储的元数据信息包含了对于编码器和译码器来说是已知的专用的Flash文件系统和逻辑物理地址映射信息。把NAND FLASH中存储的逻辑物理地址映射信息(记作LBA,长度为k′bits)和专用FTL信息(记作SUP,长度为k′bits)当作输入信息的一部分,总长度记作Q,其中,Q=k′+k″,整合CRC码字、LBA和SUP形成Polar码字的自由比特,记作payload,payload的总长度为K,其中,K=k+r+Q,如图2所示。
[0020] 步骤三:设极化信道的个数为N。利用高斯近似法估计信道的可靠度,并按照从大到小的顺序依次排列,选择可靠度较高的前K个序号,将自由比特按照先CRC码字后元数据信息的顺序依次映射到前K个序号对应的极化信道上,剩余的N‑K个极化信道传输的为冻结比特,其中,信道的可靠度越高表示信道的错误概率越小,如图3所示。这一步的输出即为编N N N N码的原始比特u1 ,对u1进行Polar编码。编码方式为:x1=u1GN,其中,GN为极化码的生成矩阵, BN为比特翻转矩阵,RN为奇偶重排矩阵。
表示冻结比特位置, 表示自
N
由比特的位置,为 的补集, 为编码器的符号输入序列,x1@{x1,x2,L,xN}为编码后的序列,记作(N,K),其中,N是Polar码字的总长度,K是信息序列的总长度,码率为R1=K/N,生成的Polar码字结构如图4所示。
[0021] 步骤四:在Polar码(N,K)的自由比特A@{a1,a2,L,aK}中选择Q个可靠高度较低(错误概率较大)的信道当作冻结比特,构造一个新的Polar码,记作(N,K‑Q)。新生成的低码率Polar码字结构如图5所示。其中, 表示冻结比特位置,表示自由比特位置,码率为R2=(K‑Q)/N。
[0022] 步骤五:为了获取适用于NAND FLASH的高码率Polar码,对新构造的Polar码(N,K‑Q)进行凿孔。设每个极化信道的错误概率为Pe(ui),则凿掉的冻结比特信道的错误概率满足: 即凿掉的冻结比特信道的错误概率为最小值,构造出适用于NAND FLASH的Polar码(N1,K‑Q),码率为R3=(K‑Q)/N1,其中需要凿去的比特个数为N‑N1,如图6所示。把该码字存储在NAND FLASH指定的Flash page中,其中CRC码字存储到NAND FLASH的数据区,剩余的冻结比特存储在NAND FLASH的冗余区。
[0023] 步骤六:从NAND FLASH指定的Flash page中读取存储的Polar码(N1,K‑Q)。根据凿掉的比特的信息,在相应的位置处插入对应的值。在步骤五中被凿掉的比特实际上并没有传输,但接收端可以将这些凿孔比特信道视为容量为0的信道,也就是凿孔比特可以视为被传输了,只是在容量为0的信道上传输。所以可以在凿掉的N‑N1个比特的位置处补上相应的值,即把N‑N1个极化信道按照可靠度由大到小排列,前Q个极化信道补上元数据信息,剩余N的极化信道补上0,得到待译码字y1(N,K‑Q),R2=(K‑Q)/N。
[0024] 步骤七:用CA‑SCL译码算法对待译码字y1N(N,K‑Q)译码,得到译码序列[0025] 步骤八:从译码序列 中取出最原始的kbits的信息序列
[0026] 下面结合型号为MT29F128G08CBCAB芯片具体说明:
[0027] MT29F128G08CBCAB芯片总容量为(128G+9728M)bits,每片分为2048块,每块分为512页,每页包含16kByte数据区容量和1216Byte冗余大小。如果直接采用页容量(16k+
1216)Byte作为码长,则编译码所需的存储容量过大,因此本实施例中将(16k+1216)Byte拆分成512段,每段将分配到256bits的数据区和16bits的冗余区,即每段需要构造(272,256)的Polar码字,然后一起写进页内。
[0028] 步骤一:对长度为240bits的信息序列M{m1,m2,K,m240}采用g(D)=D16+D15+D2+1的生成多项式进行CRC编码,即添加一个16bits的CRC校验因子,得到CRC码字。
[0029] 步骤二:把NAND FLASH中存储的逻辑物理地址映射信息(记作LBA)和专用FTL信息(记作SUP)当作输入信息的一部分,在本实施例中LBA和SUP和均采用4个字节即32bits来记录,总长度Q等于64bits,整合CRC码字、LBA和SUP形成Polar码字的自由比特,记作payload,payload的总长度为320bits。
[0030] 步骤三:根据payload的总长度为320bits,假设N是大于对payload总长度的最小2的幂次,即N取512。首先利用高斯近似法估计信道的可靠度,并按照从大到小的顺序依次排列,选择可靠度较高的前320个序号,将自由比特按照先CRC码字后元数据信息的顺序依次映射到前320个序号对应的极化信道上,剩余的192个极化信道传输的是冻结比特。这一步N N N N的输出即为编码的原始比特u1 ,对u1 进行Polar编码。编码方式为:x1=u1GN,其中,GN为极化码的生成矩阵, BN为比特翻转矩阵,RN为奇偶重排矩
阵。 表示冻结比特位置, 表
N
示自由比特的位置,为 的补集, 为编码器的符号输入序列,x1 @{x1,x2,L,xN}为编码后的序列,记作(512,320),码率为0.625。
[0031] 步骤四:在Polar码的自由比特A@{a1,a2,L,aK}中选择64个可靠度较低(错误概率较大)的信道,把它们当作冻结比特信道,构造一个新的Polar码,记作(512,320‑64),码率为0.5,其中, 表示冻结比特位置,表示自由比特位置。
[0032] 步骤五:对新构造的Polar码(512,320‑64)进行凿孔。在冻结比特中选择240个可靠度较高(错误概率较小)的比特信道凿掉,构造出适用于NAND FLASH的Polar码(272,256,240),其中240表示需要凿去的比特个数,然后把Polar码(272,256,240)存储到NAND FLASH指定的Flash page中,存储的位置由LBA决定。此时,NAND FLASH中数据区存储的是256bits的CRC码字,冗余区存储的是16bits的冻结比特,即校验位,新构造的适用于NAND FLASH的Polar码字的码率为0.941。
[0033] 步骤六:从NAND FLASH指定的Flash page中读取存储的Polar码(272,256,240),根据凿掉的240个比特的信息,在相应的位置处插入对应的值,即把240个极化信道按照可靠度由大到小排列,前64个极化信道补上元数据信息,剩余的极化信道补上0,得到待译码N字y1(512,256),此时的码率为0.5。
[0034] 步骤七:利用CA‑SCL译码算法对码字y1N进行译码,得到译码序列[0035] 步骤八:从译码序列 中取出最原始的240bits的信息序列