BCH码编译码matlab仿真Word文档下载推荐.docx
- 文档编号:17501341
- 上传时间:2022-12-06
- 格式:DOCX
- 页数:10
- 大小:122.35KB
BCH码编译码matlab仿真Word文档下载推荐.docx
《BCH码编译码matlab仿真Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《BCH码编译码matlab仿真Word文档下载推荐.docx(10页珍藏版)》请在冰豆网上搜索。
,进行编码。
BCH码译码方法主要有Peterson译码法和Berlekamp迭代译码法等,其中Peterson译码方法如下:
1.计算伴随式。
已知接受向量
,则
2.求解错误位置。
引入错误位置多项式,将求解错误位置的问题转化为求解线性方程组的问题
3.用Peterson译码方法译码,解出错误位置多项式系数和错误图样,得到估值码字。
(1).假设e=t,计算S行列式M的值。
M=0则降阶,e=e-1,同样计算直到M≠0.
(2)将上面得到的2t个连续根代入试根,求上述方程组解。
取倒数即为错误位置。
由此写出错误图样。
(3)求出译码。
每一步具体的实现方法,详见程序源代码注释。
三、程序框图
编码框图
过信道框图
译码框图
四、实验结果分析
结果截图:
上面是较高信噪比时127位BCH正确译码
下面是较低信噪比时127为BCH错误译码
结果框内容(加粗部分是手动输入内容,下划线是结果重点):
---简易BCH编码译码系统---
输入码长n=128
错误:
只支持本原BCH码
输入码长n=127
输入纠错能力t=6
计算得码长k=85
自动生成随机信息序列输入1,手动键入信息序列输入0:
1
随机生成的序列为m=0010101101010000011001101111001000111110110000000001111111010100001101110111010111011
编码后生成码序列为0010101101010000011001101111001000111110110000000001111111010100001101110111010111011100100100001001000010111100101011010101110
过高斯白信道输入1,过理想信道输入0:
输入信道信噪比(单位分贝,15左右较合适):
10
接收码字为0010101101010000011001101111001000111110110000000001111111110100001101110111010111001100100100001001000010111100101110010101110
发送码字为0010101101010000011001101111001000111110110000000001111111010100001101110111010111011100100100001001000010111100101011010101110
通过信道后出错4位
错误图样为0000000000000000000000000000000000000000000000000000000000100000000000000000000000010000000000000000000000000000000101000000000
译码结果为0010101101010000011001101111001000111110110000000001111111010100001101110111010111011100100100001001000010111100101011010101110
还原信息序列为m’=0010101101010000011001101111001000111110110000000001111111010100001101110111010111011
译码正确
五、实验小结
整个过程严格按照所学BCH码相关知识编写,所得结论完全正确。
六、源代码
clc
clearall
%----------------------------------------------
disp('
---简易BCH编码译码系统---'
)
flag=1;
while(flag)%输入n
n=input('
输入码长n='
);
m=0;
while(2^m-1~=n&
&
m<
20)%计算m
m=m+1;
end
if(m==20)%非本原就重新输入
disp('
只支持本原BCH码'
elseflag=0;
end
while(flag)%输入t
t=input('
输入纠错能力t='
if((t>
=floor((n-1)/2))||(t<
=0))
纠错能力不能为0或者不能太大'
a=gf(2,m);
%构造扩域,matlab自动只把a当做扩域中的本原元
fori=1:
2:
(2*t-1)%求最小多项式,只找奇数项
b=[1,a^i];
%让b分别为a^i...找每一个(这么定义是要卷积的)
l=i;
whilea^i~=a^(2*l)%找共轭根系
l=2*l;
b=conv(b,[1,a^l]);
%求最小多项式
ifi==1g=b;
else
g=conv(g,b);
%求生成多项式利用卷积,进行连乘
%--------------------------------------------------
gx=double(g.x);
%从扩域到数域相当于变成多项式
k=n-length(gx)+1;
%k=n-(r+1)+1
disp(['
计算得码长k='
num2str(k)])
while(flag)
temp=input('
\n'
iftemp
mx=round(rand(1,k));
%随机生成信息组
disp(['
随机生成的序列为m='
num2str(mx)])
flag=0;
elseinputm=str2mat(input('
输入信息序列'
'
s'
));
iflength(inputm)~=k
输入码长应为'
mx=str2num(inputm(:
))'
;
%----------------------------------------------------
x1=zeros(1,length(gx));
%循环码编码方程中的
x1
(1)=1;
c1=conv(x1,mx);
%码字的前k位,编码方程第一项
[q,r]=deconv(c1,gx);
r=mod(r,2);
%编码方程第二项
c=mod(c1+r,2);
%生成系统码,转换成为二进制
编码后生成码序列为'
num2str(c)])
%-----------------------------------------------------
judge=input('
ifjudge==1
SNR=input('
'
rr=awgn(c,SNR);
%过信道
elserr=c;
n%量化为01序列
ifrr(i)>
=0.5
r(i)=1;
elser(i)=0;
接收码字为'
num2str(r)])
发送码字为'
enum=0;
n
ifr(i)~=c(i)
enum=enum+1;
通过信道后出错'
num2str(enum),'
位'
])
s=a+a;
%构造伴随式,初始化s
2*t
s(i)=a+a;
forj=1:
s(i)=s(i)+r(j)*a^((n-j)*i);
fore=t:
-1:
1%降阶
A=a+a;
fori=1:
e
A(i,j)=s(e+i-j);
ifdet(A)~=0break;
%判断行列式是否为奇异,是就继续降
d=rank(A);
%开始求方程组
B=a+a;
d
B(i)=s(d+i);
ifA==a+a%接受的码字出错的情况
cc=r;
E=zeros(1,n);
else
sigma=A\(B'
%错误位置多项式的系数
x=a+a;
ki=1;
n%试根
h=a^0;
h=h+sigma(j)*a^(i*j);
ifh==a+a
x(k)=a^(n-i);
E(i)=1;
%错误图样,可以不用求具体根,找到位置即可
ki=ki+1;
cc=mod(E+r,2);
%校正接收码字
错误图样为'
num2str(E)])
译码结果为'
num2str(cc)])
m=c(1:
k);
还原信息序列为m’='
num2str(m)])
ifcc==c
译码正确'
elsedisp('
译码错误'
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- BCH 译码 matlab 仿真