首页 > 编程语言 >m基于Berlekamp-Massey钱搜索算法的BCH译码误码率matlab仿真

m基于Berlekamp-Massey钱搜索算法的BCH译码误码率matlab仿真

时间:2023-05-29 22:12:32浏览次数:44  
标签:误码率 Massey BCH syndrome 搜索算法 k1 end gamma lambda

1.算法仿真效果

matlab2022a仿真结果如下:

 

2.算法涉及理论知识概要

      BCH编译码是一种纠错能力强,构造简单的信道编译码。BCH编译码的生成多项式可以由如下的式子表示:

 

①BCH码是一种纠错码、线性分组码、循环码。

 

②需要传输信息位数:k

 

③纠错能力:t

 

④总码长(信息位+监督位):n

 

⑤n的长度满足n=2^m – 1时生成的为本原BCH码;n的长度为2^m – 1的因子时为非本原BCH码

 

(如n=15,n=31,n=63时为本原BCH码;n=21(可被63整除)等时为非本原BCH码)

 

⑥此外还有加长BCH码和缩短BCH码。

 

⑦具体的BCH码通常用BCH(n,k)码来表示。

 

加长BCH码和缩短BCH码:

因为本原BCH码和非本原BCH码要求了n的长度,但很多情况下我们想要的码长并不满足n=2^m – 1或其因子。这时候就需要加长BCH码和缩短BCH码。

 

(1)缩短BCH码

 

BCH(50,32)码是扩展域GF(2^6)上BCH(63,45)码的缩短码。BCH(50,32)码和BCH(63,45)码的区别与联系:

 

①两者纠错能力相同,生成多项式相同。

 

②缩短码的实现只需要在编译码时在高位上补0,从k = 32凑到k = 45即可。

 

(2)加长BCH码

 

在本原BCH码或非本原BCH码的生成多项式中乘因式(x+1),可以得到加长BCH码(n+1,k),加了一个校验位。

 

  编码之后的码字包含信息字节和校验字节,其表达式如下所示:

 

 

         BCH译码过程主要通过计算伴随式sj得到错误位置多项式,然后通过chein算法计算错误位置多项式的根,从而确定错误位置数。并最终由错误位置数得到错误值以及错误图样E(x),最后通过R(x)- E(x)= C(x)进行纠错。

 

 

 

3.MATLAB核心程序

 

%begin decoding
for j=1:nwords
    rec_data=rec_data2((j-1)*n+1:(j-1)*n+n);
    syndrome=gf(zeros(1, 2*t), m);
    for i=1:n,
        syndrome=syndrome.*alpha_tb+rec_data(n-i+1);
    end;
    %imba
    lambda = gf([1, zeros(1, t)], m);
    lambda0= lambda;
    b=gf([0, 1, zeros(1, t)], m);
    b2 = gf([0, 0, 1, zeros(1, t)], m);
    k1=0;
    gamma = one;
    delta = zero;
    syndrome_array = gf(zeros(1, t+1), m);
 
    if(simplified == 1) 
        for r=1:t,
            r1 = 2*t-2*r+2;
            r2 = min(r1+t, 2*t);
            num = r2-r1+1;
            syndrome_array(1: num) = syndrome(r1:r2);
            delta = syndrome_array*lambda';
        
            lambda0 = lambda;
            lambda = gamma*lambda-delta*b2(2:t+2);
        
            if((delta~= zero) && (k1>=0))
                b2(3)=zero;
                b2(4:3+t) = lambda0(1:t);
                gamma = delta;
                k1 = -k1;
            else
            b2(3:3+t) = b2(1:t+1);
            gamma = gamma;
            k1=k1+2;
            end
            joke=1;
        end
    else
        for r=1:2*t,
            r1 = 2*t-r+1;
            r2 = min(r1+t, 2*t);
            num = r2-r1+1;
            syndrome_array(1:num) = syndrome(r1:r2);
            delta = syndrome_array*lambda';
 
            lambda0 = lambda;
            lambda = gamma*lambda-delta*b(1:t+1);
 
            if((delta ~= zero) && (k1>=0))
                b(2:2+t)=lambda0;
                gamma = delta;
                k1=-k1-1;
            else
                b(2:2+t) = b(1:t+1);
                gamma = gamma;
                k1=k1+1;
            end   
            joke=1;
        end
    end
 
    %inverstable
    inverse_tb = gf(zeros(1, t+1), m);
    for i=1:t+1,
        inverse_tb(i) = alpha^(-i+1);
    end;
 
    %chien's search
    lambda_v = zero;
    accu_tb=gf(ones(1, t+1), m);
    for i=1:n,
        lambda_v=lambda*accu_tb';
        accu_tb = accu_tb.*inverse_tb;
        if(lambda_v==zero)
            error(1,n-i+1)=1;
        else
            error(1,n-i+1)=0;
        end
    end
    found = find(error(1,:)~=0);
    for i=1:length(found)
        location=found(i);
        if location <= k;
            rec_data(n-location+1)=rec_data(n-location+1)+one;
        end
    end
    decoded_data((j-1)*k+1:(j-1)*k+k)=rec_data(n-k+1:n);
end
 
%decoded_data;
error=0.;
for i=1:length(message)
    if message(i)~=decoded_data(i)
        error=error+1;
    end
end
ber = error/length(message);

 

  

 

标签:误码率,Massey,BCH,syndrome,搜索算法,k1,end,gamma,lambda
From: https://www.cnblogs.com/51matlab/p/17441815.html

相关文章

  • 第K短路(A*算法 启发式搜索算法)
    【启发式算法】定义函数h[x]=g[x]+f[x];其中g[x]是x结点的真实值,f[x]是x结点的估计剩余代价值,h[x]就是当前方案的总估计值。在BFS过程中,以最优价值优先遍历,可以减小时间复杂度,并简化问题。A*算法的优势就是,对当前结点做一个价值估计,取出堆中最优的结点进行下一次遍历。在求......
  • 基于MIMO-OFDM通信系统的误码率matlab仿真,对比了MRC,ZF等多种接收器性能
    1.算法仿真效果matlab2022a仿真结果如下:  2.算法涉及理论知识概要    MIMO-OFDM系统的接收信号是多个发射天线发送信号的衰落与加性噪声的线性叠加,若采用通常SISO-OFDM系统或MIMO系统的估计算法估计信道,将会带来很大的估计误差。出于设计实现的考虑,本文主要研究理论相......
  • 基于MIMO-OFDM通信系统的误码率matlab仿真,对比了MRC,ZF等多种接收器性能
    1.算法仿真效果matlab2022a仿真结果如下:2.算法涉及理论知识概要MIMO-OFDM系统的接收信号是多个发射天线发送信号的衰落与加性噪声的线性叠加,若采用通常SISO-OFDM系统或MIMO系统的估计算法估计信道,将会带来很大的估计误差。出于设计实现的考虑,本文主要研究理论相对比较成熟的慢......
  • m基于SPA和积译码算法的LDPC误码率matlab仿真
    1.算法仿真效果matlab2022a仿真结果如下: 2.算法涉及理论知识概要       LDPC(Low-densityParity-check,低密度奇偶校验)码是由Gallager在1963年提出的一类具有稀疏校验矩阵的线性分组码(linearblockcodes),然而在接下来的30年来由于计算能力的不足,它一直被人......
  • 2-3 改写二分搜索算法
    设a[0:n-1]是已排好序的数组。请改写二分搜索算法,使得当搜索元素x不在数组中时,返回小于x的最大元素的位置i和大于x的最小元素位置j。当搜索元素在数组中时,i和j相同,均为x在数组中的位置。测试数据(自己写的):61234567输出:i=5,j=-16123456-1输出:i=-1,j=......
  • 搜索算法
    //DPS(深度搜索)//n-皇后问题//方法一(与数字全排列相似)#include<bits/stdc++.h>usingnamespacestd;constintN=80;intn,res=0;charQ[N][N];boolcow[N],dg[N],rdg[N];//dg,rdg是对角线和反对角线,cow是列;voiddfs(intu){if(u==n){res++;......
  • m基于MIMO-OFDM-LDPC-STBC的通信链路matlab误码率仿真
    1.算法仿真效果matlab2013b仿真结果如下:使用一个二值图进行测试,并加入不同的均衡算法进行对比:2.算法涉及理论知识概要LDPC码是麻省理工学院RobertGallager于1963年在博士论文中提出的一种具有稀疏校验矩阵的分组纠错码。几乎适用于所有的信道,因此成为编码界近年来的研究......
  • m基于MIMO-OFDM-LDPC-STBC的通信链路matlab误码率仿真
    1.算法仿真效果matlab2013b仿真结果如下:    使用一个二值图进行测试,并加入不同的均衡算法进行对比:  2.算法涉及理论知识概要          LDPC码是麻省理工学院RobertGallager于1963年在博士论文中提出的一种具有稀疏校验矩阵的分组纠错码。几乎......
  • 基于matlab的LDPC译码算法误码率对比仿真,对比BP和BF译码
    1.算法仿真效果matlab2022a仿真结果如下:2.算法涉及理论知识概要LDPC码是麻省理工学院RobertGallager于1963年在博士论文中提出的一种具有稀疏校验矩阵的分组纠错码。几乎适用于所有的信道,因此成为编码界近年来的研究热点。它的性能逼近香农极限,且描述和实现简单,易于进行理论分......
  • 基于matlab的LDPC译码算法误码率对比仿真,对比BP和BF译码
    1.算法仿真效果matlab2022a仿真结果如下: 2.算法涉及理论知识概要       LDPC码是麻省理工学院RobertGallager于1963年在博士论文中提出的一种具有稀疏校验矩阵的分组纠错码。几乎适用于所有的信道,因此成为编码界近年来的研究热点。它的性能逼近香农极限,且描述和实现......