RS+BCH级联编译码误码率性能matlab仿真

简介: RS+BCH级联编译码误码率性能matlab仿真

1.算法描述

    在实际情况中,在光通信信道中出现的错误有单独随机出现的误码,也有突发出现的无码,为了更好的提升光通信的性能,需要使用级联码。

    级联码在进行编码的时候,将k1k2个二进制bit数据分为k2个部分,每个部分由k1个bit信息,然后按照非二进制分组码编成(n2,k2)的外码C2,最小距离为d2,码率为R2= k2/n2。然后将每一个部分中的k1个信息按照二进制分组码编码成(n1,k1)的内码C1,最小距离为d1,码率为R1=k1/n1。因此,级联码的码率为R = R1R2。

    级联码根据结构的不同,可以分为内外型级联码,并行型级联码以及交织连续型级联码三种类型,根据文献[50]的研究成果,我们选择一种结构较为简单的内外型级联码作为本文的一个研究对象。

    在本课题中,本文选择内外型级联码的内码分别为BCH(15,7)和BCH(255,207),外码使用RS(31,15)两种类型进行仿真性能分析。级联码的基本结构框图如下图所示:

1.png

2.仿真效果预览
matlab2013b仿真结果如下:

2.png

   从上面的仿真分析可知,RS(31,15)+BCH(15,7)这种内外型级联码具有良好的纠错性能,当SNR = 5的时候,其误码率性能达到了10^-5。 

3.MATLAB部分代码预览

k            = 15;       
n            = 31;   
 
N            = 15; 
K            = 7; 
 
Len          = log2(n+1);
Simu_Len     = k;  %仿真的时间长度
Simu_time    = 1;
SNR          = [0:1:5];
TJL          = [200,150,100,50];
 
 
Rs_Encoder   = fec.rsenc(n,k);
Rs_Decoder   = fec.rsdec(Rs_Encoder);
 
%主体代码
for i = 1:length(SNR)
    i
    Bit_err(i)    = 0; %设置误码率参数
    Num_err       = 0; %蒙特卡洛模拟次数
    Numbers       = 0; %误码率累加器
    while Num_err <= TJL 
          fprintf('Eb/N0 = %f\n', SNR(i));
          Num_err 
          %产生信号
          msg2     = (double(rand(1,Simu_Len)>0.5))';
          %编码
          Msg_Enc  = encode(Rs_Encoder,msg2);
          %转换为二进制
          Msg_Enc2 = func_dec2bin(Msg_Enc,Len);
 
          %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
          %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
          
          message    = [Msg_Enc2,(rand(1,55)>=0.5)];
          Rec        = [];
          for jj = 1:length(message)/K
              tmps       = message((jj-1)*K+1:jj*K);
              msg        = gf(tmps);
              BCHcode_gf = bchenc(msg,N,K);
              %BCH编码
              BCHcode_double=-1*ones(1,N);
              for code_j=1:N
                  if BCHcode_gf(1,code_j)==1
                     BCHcode_double(1,code_j)=1;
                  end
              end         
              %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
              %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
              %通过信道
              BCH_receive = awgn(BCHcode_double,SNR(i),'measured');
 
              %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
              %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
              hard_coded  = zeros(1,N);
              for hard_j=1:N
                  if BCH_receive(hard_j)>0
                     hard_coded(hard_j)=1;
                  end
              end
              %BCH解码 
              BCHdecode = gf(zeros(1,K));
              hard_BCH  = hard_coded;
              [BCHdecode_i,error_num]=bchdec(gf(hard_BCH),N, K);
              BCHdecode = BCHdecode_i;
              BCHdecode_double = zeros(1,K);
 
              for gf_to_double_j=1:K
                  if BCHdecode(gf_to_double_j)==1
                     BCHdecode_double(gf_to_double_j)=1;
                  end
              end
              Msg_Enc4 = BCHdecode_double;
              %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
              %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
              Rec = [Rec,Msg_Enc4];
          end
          Rec(end-55+1:end) = [];
          
          %二进制转换为十进制
          Msg_Enc5 = Rec; 
          Msg_Enc6 = func_bin2dec(Msg_Enc5,Len);
        
          %译码
          [Msg_Dec,cnumerr,ccode] = decode(Rs_Decoder,Msg_Enc6');
          %计算误码率
          Err                     = biterr(Msg_Dec,msg2);
          Num_err                 = Num_err+Err;
          Num_err
          Numbers                 = Numbers+1;
    end  
    Bit_err(i) = Num_err/(Simu_Len*Numbers);  
end
 
%曲线仿真
figure;
semilogy(SNR,Bit_err,'b-o');
xlabel('SNR');
ylabel('BER');
grid on;
save data.mat SNR Bit_err
A_046
相关文章
|
1天前
|
机器学习/深度学习 算法 机器人
基于QLearning强化学习的较大规模栅格地图机器人路径规划matlab仿真
本项目基于MATLAB 2022a,通过强化学习算法实现机器人在栅格地图中的路径规划。仿真结果显示了机器人从初始位置到目标位置的行驶动作序列(如“下下下下右右...”),并生成了详细的路径图。智能体通过Q-Learning算法与环境交互,根据奖励信号优化行为策略,最终学会最优路径。核心程序实现了效用值排序、状态转换及动作选择,并输出机器人行驶的动作序列和路径可视化图。
110 85
|
1天前
|
算法
基于龙格库塔算法的锅炉单相受热管建模与matlab数值仿真
本设计基于龙格库塔算法对锅炉单相受热管进行建模与MATLAB数值仿真,简化为喷水减温器和末级过热器组合,考虑均匀传热及静态烟气处理。使用MATLAB2022A版本运行,展示自编与内置四阶龙格库塔法的精度对比及误差分析。模型涉及热传递和流体动力学原理,适用于优化锅炉效率。
|
5月前
|
安全
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
本文介绍了2023年高教社杯数学建模竞赛D题的圈养湖羊空间利用率问题,包括问题分析、数学模型建立和MATLAB代码实现,旨在优化养殖场的生产计划和空间利用效率。
247 6
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
|
5月前
|
存储 算法 搜索推荐
【2022年华为杯数学建模】B题 方形件组批优化问题 方案及MATLAB代码实现
本文提供了2022年华为杯数学建模竞赛B题的详细方案和MATLAB代码实现,包括方形件组批优化问题和排样优化问题,以及相关数学模型的建立和求解方法。
147 3
【2022年华为杯数学建模】B题 方形件组批优化问题 方案及MATLAB代码实现
|
5月前
|
数据采集 存储 移动开发
【2023五一杯数学建模】 B题 快递需求分析问题 建模方案及MATLAB实现代码
本文介绍了2023年五一杯数学建模竞赛B题的解题方法,详细阐述了如何通过数学建模和MATLAB编程来分析快递需求、预测运输数量、优化运输成本,并估计固定和非固定需求,提供了完整的建模方案和代码实现。
117 0
【2023五一杯数学建模】 B题 快递需求分析问题 建模方案及MATLAB实现代码
|
8月前
|
数据安全/隐私保护
耐震时程曲线,matlab代码,自定义反应谱与地震波,优化源代码,地震波耐震时程曲线
地震波格式转换、时程转换、峰值调整、规范反应谱、计算反应谱、计算持时、生成人工波、时频域转换、数据滤波、基线校正、Arias截波、傅里叶变换、耐震时程曲线、脉冲波合成与提取、三联反应谱、地震动参数、延性反应谱、地震波缩尺、功率谱密度
基于混合整数规划的微网储能电池容量规划(matlab代码)
基于混合整数规划的微网储能电池容量规划(matlab代码)
|
8月前
|
算法 调度
含多微网租赁共享储能的配电网博弈优化调度(含matlab代码)
含多微网租赁共享储能的配电网博弈优化调度(含matlab代码)
|
8月前
|
Serverless
基于Logistic函数的负荷需求响应(matlab代码)
基于Logistic函数的负荷需求响应(matlab代码)
|
8月前
|
供应链 算法
基于分布式优化的多产消者非合作博弈能量共享(Matlab代码)
基于分布式优化的多产消者非合作博弈能量共享(Matlab代码)

热门文章

最新文章