zoukankan      html  css  js  c++  java
  • bch算法生成nand flash中512byte校验和

    bch算法可以分为四步:

    第一步:构造扩域

    第二部:求最小多项式

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

    第四步:计算bch编码

    一、本原bch码构造举例

     

     

     

     

     

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

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

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

    总结:计算bch码需要四步

    1)构造扩域GF(2^)

    2)计算最小多项式

    3)计算bch码生成多项式g(x)

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

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

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

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

     

    三、求最小多项式

     

    四、例子

     

     

    五、Matlab仿真

    1) Matlab环境-Matlab R2014a

    2) Matlab脚本

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

    本原多项式选择:P(X)=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=fscanf(fid,'%d ');  % %d 表示以整数形式写入数据,这正是我想要的;

    fclose(fid);  %关闭文件;

    %data=mx';

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

    %disp(['随机生成的序列为 m= ',num2str(mx)])

    pr = primpoly(m,'all');

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

    for i=1:1

    enc = comm.BCHEncoder(n,k);

    enc.PrimitivePolynomialSource='Property';

    enc.PrimitivePolynomial=de2bi(pr(i),'left-msb');

    %enc.PrimitivePolynomial=de2bi(pr(i));

    encodedData = step(enc, data);

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

        filename=['out',num2str(i),'.txt'];

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

        fprintf(fid,'%d ',encodedData);  % %d 表示以整数形式写入数据,这正是我想要的;

        fclose(fid);  %关闭文件;   

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

    end

    dec = comm.BCHDecoder(n,k);   

      receivedBits = step(dec, encodedData);

     if data==receivedBits

         disp('译码正确  ')   

    else disp('译码错误  ')

    end

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

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

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

     

     

     

     

  • 相关阅读:
    推荐一个很好得电子书下载网站
    C# 线程手册 第四章 线程设计原则 管道线程模型
    C# 线程手册 第六章 线程调试与跟踪
    C# 线程手册 第五章 扩展多线程应用程序 剖析ThreadPool 类
    C# 线程手册 第六章 线程调试与跟踪 代码跟踪
    C# 线程手册 第五章 多线程应用程序 .NET 中的扩展性
    C# 线程手册 第五章 扩展多线程应用程序 CLR 和 线程
    C# 线程手册 第五章 扩展多线程应用程序 什么是线程池
    C# 线程手册 第五章 多线程应用程序 一个多线程微软消息队列(MSMQ)监听器
    C# 线程手册 第六章 线程调试与跟踪 使用不同的监听器程序
  • 原文地址:https://www.cnblogs.com/freedomworld/p/12266332.html
Copyright © 2011-2022 走看看