📄 untitled2.m
字号:
clear
n=input('请输入循环码的码长 n=');
k=input('请输入循环码的信息码长 k=');
gx=zeros(k,n);G=zeros(k,n);H=zeros(n-k,n);
g=input('请输入生成多项式的系数a,b,… 次数由高到低,如:[1 0 1] \n');
%产生生成矩阵gx
for m=1:k
gx(m,m:n-k+m)=g;
end
%典型生成矩阵G和一致校验矩阵H
h=eye(k)/gx(:,1:k);
gx=h*gx;
G=rem(abs(gx),2)
H=cat(2,(G(:,k+1:end))',eye(n-k))
%解码
fid=fopen('decode.txt');
data=fread(fid);
fclose(fid);
for m=1:length(data)
if data(m)==49
data(m)=1;
elseif data(m)==48
data(m)=0;
else disp('存在非法字符')
end
end
data=data';
if rem(length(data),n)
disp('序列不符合要求')
end
decode=zeros(1,k*length(data)/n);
pr=eye(n,k);
a=0;c=0;d=0;
for m=1:length(data)/n;
if rem(data(1,n*(m-1)+1:n*m)*H',2)==zeros(1,n-k)
decode(1,k*(m-1)+1:k*m)=data(1,n*(m-1)+1:n*(m-1)+k);
else
a=1;
end
if a==1
for b=1:n
if rem(data(1,n*(m-1)+1:n*m)*H',2)==H(:,b)'
decode(1,k*(m-1)+1:k*m)=rem(data(1,n*(m-1)+1:n*(m-1)+k)+pr(b,:),2);
c=1;
break;
end
end
end
if a==1&&c==0
decode(1,k*(m-1)+1:k*m)=2*eye(1,k);
end
end
for m=1:length(decode)
if decode(m)==2
disp('收到的该序列误码太多,无法纠错')
d=1;
break;
end
end
if d==0
decode
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -