1.问题描述:
BCH编译码是一种纠错能力强,构造简单的信道编译码。BCH编译码的生成多项式可以由如下的式子表示:
本文,主要分析码率为0.8和0.5两种模式下 的BCH编译码性能,将BCH码的参数设置为BCH(255,207)和BCH(255,131),两种参数下的编码码率分别为0.8117和0.5137。
BCH译码过程主要通过计算伴随式sj得到错误位置多项式,然后通过chein算法计算错误位置多项式的根,从而确定错误位置数。并最终由错误位置数得到错误值以及错误图样E(x),最后通过R(x)- E(x)= C(x)进行纠错。
2.部分程序:
clc;
clear all;
close all;
warning off;
SNR = [0:1:7];
TJL = 5000;
N = 255;
K = 207;
%主体代码
for i = 1:length(SNR)
i
Bit_err(i) = 0; %设置误码率参数
Num_err = 0; %蒙特卡洛模拟次数
Numbers = 0; %误码率累加器
while Num_err <= TJL
%计算几个值
message = randint(1,K,[0,1]);
msg = gf(message);
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
Err = biterr(BCHdecode_double,message);
Num_err = Num_err+Err;
Num_err
Numbers = Numbers+1;
end
Bit_err(i) = Num_err/(length(message)*Numbers);
end
%曲线仿真
figure;
semilogy(SNR,Bit_err,'b-o');
xlabel('SNR');
ylabel('BER');
grid on;
save data.mat SNR Bit_err
3.仿真结论:
从图的仿真结果可知,采用BCH(255,131)的编译码方式,其码率接近0.5,因此具有较好的编译码性能,当SNR为6db的时候,误码率达到10的-4次方。而采用BCH(255,207)编译码方式,其码率较高,为0.8117。虽然具有较高的传输效率,但是其性能较差。在SNR为7db的时候,误码率性能为10的-3次方。
D45