实验四 求循环码的最小汉明距离
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验四求循环码的最小汉明距离
一、实验题目
1、输入码的生成多项式;
2、输出码的最小汉明距离。
二、实验目的
1、理解和掌握循环码的概念以及生成方法;
2、求出循环码的最小距离。
三、算法设计
四、程序分析
1.采用Matlab编程;
2.cyclpoly(15, 4,'all')函数用来产生(15,4)循环码的所有生成多项式;
3.circshift()函数是进行移位操作函数;
4.sym2poly()函数是将多项式转化为矩阵表示形式;
5.expand(x^r*m)函数是对m进行左移r位的操作;
五、程序代码
syms x ;
G=cyclpoly(15, 4,'all');%求出所有的生成多项式功能:产生循环码的生成多项式g=G(2,:);%选择所有生成多项式中的第二个作为(15,4)循环码的生成多项式
r=15-4 ; %监督位数
m=x^3+x^2+1; %信息码元
m1=expand(x^r*m); %用x^r乘以m,相当于对m进行左移r位的操作
m2=sym2poly(m1); %将多项式转化为矩阵表示形式
[Q,R] = DECONV(m2,g); %求m2除以g所得的余数
%由于在求解余数时是按照一般的算术运算计算的,
%而实际要求的为模2运算,转化为模2运算
R=abs(R);
for i=1:length(R)
R(i)=mod( R(i),2);
end
%C(X)=x^r*m(x)+x^r*m(x)/g(x)
T=R+m2 ;%T为生成的一个循环码字
T2(1,:)=T;
[W,L]=size(T);
%将T2循环移位,得到其他的码字
for i=1:L-1
T2(i+1,:)=circshift(T2(i,:),[0,1]);
end
Y=[zeros(1,L);T2]; %Y矩阵为生成的全部码字
%求最小汉明距离
t=1;
for i=1:15
for j=i+1:16
M(t,:)=(Y(i,:)~=Y(j,:));
t=t+1;
end
end%分别比较两行中不同的元素
S=(sum(M,2))'; %将M矩阵的每一行求和,得出任意两个码字之间的距离
d=min(S); %最小汉明距离
display(d);
六、程序运行结果
七、心得体会
刚刚接触Matlab不久,对于Matlab里的函数不是十分了解,在解读程序时需要将函数一个个打开,解读它的注释,了解函数的算法;经过对程序细致的解读,不但对求循环码的最小汉明距离有了更深的了解,对Matlab的软件也有了更多的掌握,可谓收获颇丰。只是可惜的是自己的编程能力不好,时间不允许我慢慢磨蹭着自己写程序,所以只好看成熟的程序,看会了、了解了,这些知识也是我的。