赞
踩
RS编译码是一种非二进制编译码,RS编译码的码元符号取自伽罗达域GF(2m)。输入的信息可分为k*m比特一组,每组k个符号由m比特组成,而不是二进制BCH码中的一个比特。目前RS编译码中,RS(255,239)编译码被广泛应用于海底光纤通信系统中,该信道编译码包括239个bit信息以及16个校验字节。该码型可以纠正最多8个字节的错误。
该信道编译码的生成多项式为:
其中信息字节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)两种编译码算法的误码率性能进行仿真分析。
D44
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。