1.问题描述:


        该信道编译码的生成多项式为:

RS编译码理论介绍与MATLAB性能仿真_matlab

RS编译码理论介绍与MATLAB性能仿真_初始化_02

RS编译码理论介绍与MATLAB性能仿真_码元_03

其中信息字节I的表达式为:

RS编译码理论介绍与MATLAB性能仿真_初始化_04

        RS译码算法,一般通过Chien搜索算法进行计算错误位置,用Forney算法计算错误值。

 

2.部分程序:

clc;
clear;
close all;
warning off;
addpath 'func\'; 

%参数初始化
k            = 239;       
n            = 255;       
Len          = log2(n+1);
Simu_Len     = k;  %仿真的时间长度
Simu_time    = 1;
SNR          = [0:1:9];
TJL          = 5000;
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 
          %产生信号
          msg      = (double(rand(1,Simu_Len)>0.5))';
          %编码
          Msg_Enc  = encode(Rs_Encoder,msg);
          %转换为二进制
          Msg_Enc2 = func_dec2bin(Msg_Enc,Len);
          Msg_Enc3 = 2*Msg_Enc2-1; 
          %通过信道
          Msg_Enc4 = awgn(Msg_Enc3,SNR(i),'measured');
        
          %二进制转换为十进制
          Msg_Enc5 = ones(size(Msg_Enc4)); 
          Msg_Enc5(find(Msg_Enc4<=0)) = 0;
          Msg_Enc6 = func_bin2dec(Msg_Enc5,Len);
        
          %译码
          [Msg_Dec,cnumerr,ccode] = decode(Rs_Decoder,Msg_Enc6');
          %计算误码率
          Err                     = biterr(Msg_Dec,msg);
          Num_err                 = Num_err+Err;
          Num_err
          Numbers                 = Numbers+1;
    end  
    Bit_err(i) = Num_err/(length(Msg_Enc3)*Numbers);  
end

%曲线仿真
figure;
semilogy(SNR,Bit_err,'b-o');
xlabel('SNR');
ylabel('BER');
grid on;
save data.mat SNR Bit_err

3.仿真结论:

我们对RS(255,239)编译码以及RS(31,15)两种编译码算法的误码率性能进行仿真分析。

RS编译码理论介绍与MATLAB性能仿真_RS编译码_05

D44