1.算法描述
BCH编译码是一种纠错能力强,构造简单的信道编译码。BCH编译码的生成多项式可以由如下的式子表示:
①BCH码是一种纠错码、线性分组码、循环码。
②需要传输信息位数:k
③纠错能力:t
④总码长(信息位+监督位):n
⑤n的长度满足n=2^m – 1时生成的为本原BCH码;n的长度为2^m – 1的因子时为非本原BCH码
(如n=15,n=31,n=63时为本原BCH码;n=21(可被63整除)等时为非本原BCH码)
⑥此外还有加长BCH码和缩短BCH码。
⑦具体的BCH码通常用BCH(n,k)码来表示。
加长BCH码和缩短BCH码:
因为本原BCH码和非本原BCH码要求了n的长度,但很多情况下我们想要的码长并不满足n=2^m – 1或其因子。这时候就需要加长BCH码和缩短BCH码。
(1)缩短BCH码
BCH(50,32)码是扩展域GF(2^6)上BCH(63,45)码的缩短码。BCH(50,32)码和BCH(63,45)码的区别与联系:
①两者纠错能力相同,生成多项式相同。
②缩短码的实现只需要在编译码时在高位上补0,从k = 32凑到k = 45即可。
(2)加长BCH码
在本原BCH码或非本原BCH码的生成多项式中乘因式(x+1),可以得到加长BCH码(n+1,k),加了一个校验位。
本课题,主要分析码率为0.8和0.5两种模式下 的BCH编译码性能,将BCH码的参数设置为BCH(255,207)和BCH(255,131),两种参数下的编码码率分别为0.8117和0.5137。
以BCH(255,207)为例进行分析,编码之后的码字包含信息字节和校验字节,其表达式如下所示:
BCH译码过程主要通过计算伴随式sj得到错误位置多项式,然后通过chein算法计算错误位置多项式的根,从而确定错误位置数。并最终由错误位置数得到错误值以及错误图样E(x),最后通过R(x)- E(x)= C(x)进行纠错。
2.仿真效果预览
matlab2022a仿真结果如下:
从图3.2的仿真结果可知,采用BCH(255,131)的编译码方式,其码率接近0.5,因此具有较好的编译码性能,当SNR为6db的时候,误码率达到10的-4次方。而采用BCH(255,207)编译码方式,其码率较高,为0.8117。虽然具有较高的传输效率,但是其性能较差。在SNR为7db的时候,误码率性能为10的-3次方。
3.MATLAB部分代码预览
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 A_045_BCH
标签:误码率,BCH,err,BCHdecode,编译,SNR,matlab From: https://www.cnblogs.com/51matlab/p/17052596.html