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



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

RS译码算法,一般通过Chien搜索算法进行计算错误位置,用Forney算法计算错误值。
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
我们对RS(255,239)编译码以及RS(31,15)两种编译码算法的误码率性能进行仿真分析。

免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删