您所在位置:网站首页 > 海量文档
 > 计算机 > 软件工程
通信工程基于matlab的(7_4)循环码和(7_4)汉明码的编程设计.doc15页
本文档一共被下载:次,您可全文免费在线阅读后下载本文档。
下载提示
1.本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。
2.该文档所得收入(下载+内容+预览三)归上传者、原创者。
3.登录后可充值,立即自动返金币,充值渠道很便利
实验设计
实验一:(7,4)循环码的编码与译码
1.实验编码原理: 根据循环码的代数性质建立系统编码的过程,可以把消息矢量用如下多项式表示:
要编码成系统循环码形式,把消息比特移入码字寄存器的最右边k位,而把监督比特加在最左边的n-k个中,则要用乘以m(x)得到 m(x)=
m(x)= q(x) g(x)+ p(x),其中p(x)可以表示为
p(x)= ,则p(x)+ m(x)
=+
另U(x)= p(x)+ m(x),则U=(,,,···,, ,,···,)。
本实验根据以上原理,用matlab实现书上例6.8系统形式的循环码,生成多项式为g(x)=
2.实验译码原理:译码的实验原理 g(x)= ,在(n,k)循环码中,由于g(x)能除尽,因此可分解成g(x)和其他因式的乘积,记为
即可写成
即h (x) =
则 = ,其中式h(x)的逆多项式。
监督矩阵多项式可表示为
,
3.(7,4)循环码的编码(4位)的程序:
clear;
clc;
a=input('请输入消息矢量:');
%高次项系数在前的生成多项式
Gx=[1 0 1 1];
%将数组a的高位依次放在数组Data的低位
Data=zeros(1,7);
Data(1)=a(4);
Data(2)=a(3);
Data(3)=a(2);
Data(4)=a(1);
%Data除以Gx得到余数Rx
[Qx,Rx]=deconv(Data,Gx);
b=Rx+Data;
%将数组b的高位放在后面
c=b(1);
b(1)=b(7);
b(7)=c;
c=b(2);
b(2)=b(6);
b(6)=c;
c=b(3);
b(3)=b(5);
b(5)=c;
%将数组b校正
for i=1:7
if rem(abs(b(i)),2)==0
b(i)=0;end
end
for i=1:7
if rem(abs(b(i)),2)==1
b(i)=1;end
end
disp('输入序列:');
a
disp('编码输出序列:');
b
程序运行结果为:
改变输入序列
运行结果的编码如下:
序号输入序列输出序列序号输入序列输出序列10000 000 000091000110 100020001101 0001101001011 100130010111 0010111010001 101040011010 0011121011100 101150100011 0100131100101 110060101110 0101141101000 110170110100 0110151110010 111080111001 0111161111111 11114.相对应的译码和纠错(7位)程序:
clear;
clc;
r=[1 0 0 1 1 1 1];
h=[1,0,0;1,1,0;1,1,1;0,1,1;1,0,1;0,1,0;0,0,1];
b=flipud(h);
s=r*b;
for i=1:3
if rem(abs(s(i)),2)==0
s(i)=0;end
end
for i=1:3
if rem(abs(s(i)),2)==1
s(i)=1;end
end
if s==[0 0 0]
e=[0 0 0 0 0 0 0 ];
elseif s==[1 0 0]
e=[0 0 0 0 0 0 1];
elseif s==[1 1 0]
e=[0 0 0 0 0 1 0];
elseif s==[1 1 1]
e=[0 0 0 0 1 0 0];
elseif s==[0 1 1]
e=[0 0 0 1 0 0 0];
elseif s==[1 0 1]
e=[0 0 1 0 0 0 0];
elseif s==[0 1 0]
e=[0 1 0 0 0 0 0];
else s==[0 0 1]
e=[1 0 0 0 0 0 0];
end
u=r+e;
for i=1:7
if rem(abs(u(i)),2)==0
u(i)=0;end
end
for i=1:7
if rem(abs(u(
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
用户名:
验证码:
匿名?
发表评论