以(7,3)码为例的matlab仿真代码:
传输信息组(0 1 0),由随机数生成单随机错误
列出全部错误图样对应的伴随式
for i=1:7
error_sample=zeros(1,7);
error_sample(i)=1;
error_sample
S=error_sample*H'
end
并将二进制序列转为10进制,按升序排列,接收码字得到其伴随式之后同样转为10进制,再二分查找,匹配到对应的错误图样
close all;
clear all;
clc
N=7;
k=3;
t=1;
%generate matrix
G=[1 0 0 1 1 1 0;0 1 0 0 1 1 1;0 0 1 1 1 0 1];
H=gen2par(G);
u=[0 1 0];
%decode tab
map=[7 6 5 2 4 3 1];
tab=[1 2 4 7 8 13 14];
%encode
c=u*G;
%make mistake in transprot
e=zeros(1,N);
for i=1:t
pos=randi(N);
e(pos)=mod(e(pos)+1,2);
end
%in receive
r=mod(c+e,2);
S=mod(r*H',2);% get S
%match S in tab
num=0;tem=1;
for i=4:-1:1 %bin to int
num=num+S(i)*tem;
tem=tem*2;
end
inf=0;sup=7; %binary search
while(inf<sup-1)
mid=inf+fix((sup-inf)/2);
if(num>tab(mid))
inf=mid;
else
sup=mid;
end
end
%get error sample
CE=zeros(1,N);
CE(map(sup))=1;
%correct error
rec=mod(r+CE,2);
rec_u=rec(1,1:3);