bch算法生成nand flash中512byte校验和

bch算法可以分为四步:

第一步:构造扩域

第二部:求最小多项式

第三步:计算bch码生成多项式

第四步:计算bch编码

一、本原bch码构造举例

 

 

 

 

 

上图中mx)代表信息源码,Cx)的结果表示bch编码的结果,前面k位是信息位,后面n-k位位为校验位。

或者也可以直接计算校验位:计算过程如下:

可直接计算上图中的n-k位校验位。

总结:计算bch码需要四步

1)构造扩域GF2^)

2)计算最小多项式

3)计算bch码生成多项式gx)

4)计算bch编码,有两种方法,方法一:

,cx)就是n位码的多项式;方法二:

,结果是n-k位校验位的多项式;

二、用m次本原多项式构造扩域

 

三、求最小多项式

 

四、例子

 

 

五、Matlab仿真

1) Matlab环境-Matlab R2014a

2) Matlab脚本

脚本说明:脚本中m=13,但是信息位只有4096bitn=8191,校验位m*t=13*8=104。所以前面3991位信息补0

本原多项式选择:PX)=X^13+X^4+X^3+X^1+1;

M=13时,本原多项式有630个,脚本中选择的是最小的那个,也是第一个。

校验位位置:encodedData数据写入out1.txt文件,文件中每个0或者1用空格隔开,最后的13*8=104个是校验位。

脚本代码如下:

clc;

clear all;

m = 13;

t = 8;

n = 2^m-1;   % Codeword length

k = n-m*t;       % Message length

%  data = randi[0 1], k, 1);

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

fid=fopen’in.txt’,’rt’); %写的方式打开文件(若不存在,建立文件);

data=fscanffid,’%d ‘);  % %d 表示以整数形式写入数据,这正是我想要的;

fclosefid);  %关闭文件;

%data=mx’;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%disp[‘随机生成的序列为 m= ‘,num2strmx)])

pr = primpolym,’all’);

[r,c]=sizepr);%r就是本原多项式的个数

for i=1:1

enc = comm.BCHEncodern,k);

enc.PrimitivePolynomialSource=’Property’;

enc.PrimitivePolynomial=de2bipri),’left-msb’);

%enc.PrimitivePolynomial=de2bipri));

encodedData = stepenc, data);

    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

    filename=[‘out’,num2stri),’.txt’];

    fid=fopenfilename,’wt’); %写的方式打开文件(若不存在,建立文件);

    fprintffid,’%d ‘,encodedData);  % %d 表示以整数形式写入数据,这正是我想要的;

    fclosefid);  %关闭文件;   

    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%    

end

dec = comm.BCHDecodern,k);   

  receivedBits = stepdec, encodedData);

 if data==receivedBits

     disp’译码正确  )   

else disp’译码错误  )

end

3) 仿真结果与flash中结果比对

Flash中数据存储特点,一个page中存放连续的4512byte的数据,接着是12byteFF,然后是52byte的校验位信息。每一个512byte的数据,产生一个13byte的校验和,4个校验和依次存放。

仿真数据及校验结果如下4个图所示:

 

 

 

 

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注