RS编码译码误码率性能matlab仿真
时间:2023-08-05 08:07:00
目录
1.算法描述
2.部分程序
3.预览部分仿真图
4.获取源码的方式
1.算法描述
RS编译码是一种非二进制编译码,RS编译码的码元符号取自伽罗达域GF(2m)。可分为输入信息k*m每组k个符号由m比特组成,而不是二进制BCH码中的一个比特。目前RS编译码中,RS(255,239)编译码广泛应用于海底光纤通信系统,包括239个信道编译码bit信息和16个验证字节。该码型最多可以纠正8个字节的错误。
RS码(Reed-solomon codes)低速前向纠错的信道编码是一种具有较强纠错能力的多进制BCH在线性分组码中,其纠错能力和编码效率最高。与其它线性分组码相比,在同样的效率下,RS的纠错能力是特别强的,特别是在短的中等码长下,其性能接近于理论值,它不但可以纠正随机错误,突发错误及两者的结合,而且可以用来构造其他码型,如级联码。
编码过程首先在多个点冗余,然后传输或存储。这种超出必要值的多项式采样使多项式超定(过限)。当接收器正确接收到足够的点时,即使许多点被噪声干扰和扭曲,也可以恢复原来的多项式。
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.预览部分仿真图
4.获取源码的方式
点击下载链接:
RS编码错码率性能matlab仿真 程序操作视频
获取方式2:
博客资源项,搜索与博文同名资源。
获取方式3:
如果下载链接失效,请添加博客微信联系。
A_044