7-4线性分组码的matlab程序

补充一点,关于生成矩阵G和校验矩阵H的关系:生成矩阵G是4*7矩阵,分为两块,前4列组成的4*4矩阵为单位矩阵,后3列组成的4*3矩阵我称它监督矩阵,校验矩阵是3*7矩阵,前4列组成的3*4矩阵是监督矩阵的转置得到的,后面三列组成的3*3矩阵是单位矩阵。

%设本组(7,4)线性分组码信息位和检验位的约束关系为:

%c5=c1+c2+c3;c6=c2+c3+c4;c7=c1+c2+c4;

%由约束关系可以写出生成矩阵G.

clear all;

G1=[1,0,0,0;0,1,0,0;0,0,1,0;0,0,0,1];

G2=[1,0,1;1,1,1;1,1,0;0,1,1];

G=[G1,G2];

C=[1,0,1,1]; %C=[c1,c2,c3,c4]要进行编码信息码字

R1=C*G;

R=mod(R1,2);

fprintf('输出的编码为:R=')

disp(R);

%已知生成矩阵G,可以求出校验矩阵H。

clear all;

E=[1,1,1,1,1,1,1];

H1=[1,1,1,0;0,1,1,1;1,1,0,1];

H2=[1,0,0;0,1,0;0,0,1];

H=[H1,H2];%校验矩阵。

R=[1,0,1,1,0,0,1];%接收到的码字。

S1=R*(H'); %S为校阵子;

S=mod(S1,2);

for i=1:7; %用改for循环取出H中每一列,然后与S相加。

T=H(:,[i]);

%disp(T);

B1=S+T';

B=mod(B1,2);

if (all(B(:)==0)); %如果S与H的第i列之和B为0矩阵,则表示R中第i个码字有误。

fprintf('R中序列中错误码位是第:');

disp(i)

else

E(1,i)=0;

end;

end;

C=mod((R+E),2);

fprintf('纠错后的码字应该为:C=');

disp(C);