?? 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 + -