基于长除法的BCH(15,7)译码算法*
2018-09-03江宝安
江宝安
(重庆邮电大学移通学院,重庆 401520)
0 引 言
BCH码是一种重要的能纠多个随机错误的循环码,编码方便,实现电路简单,在现代数字通信领域中有及极广泛的应用[1-3]。BCH译码已有多种算法,实际工程应用中主要用的是错误图样查表法。该方法需要预先存储错误图样,对码长较长、纠错能力较强的BCH码,错误图样较多,查找、匹配较费时,译码延时严重[4-5]。
BCH(15,7)码是码距d=5的循环码,能纠正2位随机错误。本文主要讨论一种基于长除法的BCH(15,7)码译码算法,实现快速译码,且简单高效。
1 BCH(15,7)编码
BCH(15,7)的生成多项式为:
信息多项式为:
信息序列为m=(m6m5m4m3m2m1m0),其中mi(i=0,1,…,6)为伽罗瓦域GF(2)中的0或1,则BCH(15,7)码多项式为:
例 1:m=(0100101),m(x)=x5+x2+1,则:
2 基于长除法的BCH(15,7)译码算法
此译码算法分为以下2步:
(1)由接收到的含有错误的r(x)=c(x)+e(x)长除g(x)得余式,即错误多项式(余式项数必须小于等于2);
(2)错误多项式模2相加r(x)得原码。
证明:
由于g(x)=x8+x7+x6+x4+1能纠正循环距离为8位的2位错误位,故只要r(x)mod(g(x))余式项数小于等于2必为错误多项式。
证毕。
例2:由于例1发送码是式(1),假定接收码r(x)=x13+x12+x11+x10+x7+x6+x5+x4+1有2位错误e(x)=x6+x2,当然接收端是不知道有这2位错误的。由长除法得错误多项式如图1所示,得错误多项式e(x)=x17+x21。由于BCH(15,7)是循环码,x15=1,故e(x)=x17+x21=x6+x2,即c(x)=r(x)+e(x)=x13+x12+x11+x10+x7+x5+x4+x2+1纠错得原码。
图1 长除法得错误多项式
3 MATLAB仿真
仿真程序如下:
%BCH(15,7)decode
msg=gf(randint(1,7),1); %information code
c=bchenc(msg,15,7); %encode
e=gf([1 0 0 0 0 0 0 0 0 0 0 1 0 0 0],1);%2 bit errors
r1=c+e;% receive code
r=r1;
g=gf([1 1 1 0 1 0 0 0 1],1);%generator polynomial
m=3;n=0;k=0;
k=k+1;
if r(1)==1
for j=1∶9
r(j)=r(j)+g(j);
end
end
m=sum(r==1);
可以看出,在大学阶段产学合作的很多模式在我国也已经广为探索和开展。但是,高中阶段的产学模式和中国的情况有所不同。20世纪90年代中期,职业教育达到发展高峰,中等职业教育的学生占高中在校生的比例为56%,20世纪90年代末,则进入了低谷期,高等职业教育开始迎来发展高潮。
while r(1)==0 & m>2 & k<30 %left shift
n=n+1;
for i=1∶14
r(i)=r(i+1);
end
r(15)=0;
end
end
s=mod(n,15);
for k=1∶s %cyclic right shift
t=r(15);
for i=0∶13
r(15-i)=r(14-i);
end
r(1)=t;
end
e1=r;
m1=sum(e1==1);
if m1<3
disp('OK e(x)=r(x) mod(g(x))');
end
该MATLAB仿真程序,可验证本算法的正确性。任意改变信息多项式msg和小于等于2位错误多项式e,均能纠错得到正确的原码。
4 结 语
利用长除法可得到BCH(15,7)接收码的错误多项式,译码算法具有简单、快速等优点,具有极广泛的应用价值。此外,本算法也适用于纠1位错误的汉明码译码,对纠多个错误的BCH码具有参考价值。