资源简介
循环码编码与解码,并用MATLAB对其实现。
代码片段和文件信息
clc
clear all
n=input(‘请输入循环码的码长 n=‘);
k=input(‘请输入循环码的信息码长 k=‘);
gx=zeros(kn);G=zeros(kn);H=zeros(n-kn);
g=input(‘请输入生成多项式的系数ab… 次数由高到低如:[1 0 1] \n‘);
%产生生成矩阵gx
for m=1:k
gx(mm: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);
data
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(1k*length(data)/n);
pr=eye(nk);
a=0;c=0;d=0;
for m=1:length(data)/n;
if rem(data(1n*(m-1)+1:n*m)*H‘2)==zeros(1n-k)
decode(1k*(m-1)+1:k*m)=data(1n*(m-1)+1:n*(m-1)+k);
else
a=1;
end
if a==1
for b=1:n
if rem(data(1n*(m-1)+1:n*m)*H‘2)==H(:b)‘
decode(1k*(m-1)+1:k*m)=rem(data(1n*(m-1)+1:n*(m-1)+k)+pr(b:)2);
c=1;
break;
end
end
end
if a==1&&c==0
decode(1k*(m-1)+1:k*m)=2*eye(1k);
end
end
for m=1:length(decode)
if decode(m)==2
disp(‘收到的该序列误码太多,无法纠错‘)
d=1;
break;
end
end
if d==0
decode
end
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 398 2006-08-02 10:37 Unti
文件 1406 2011-12-02 07:31 cyclic_decode.m
文件 879 2011-12-04 09:29 cyclic_encode.m
----------- --------- ---------- ----- ----
2683 3
- 上一篇:运动前景提取的matlab程序
- 下一篇:matlab 改变图片灰度级的函数
评论
共有 条评论