教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 精品文档 > 互联网资料 >

通信工程基于matlab的(7 - 4)循环码和(7 - 4)汉明码的编程设计

来源:网络收集 时间:2026-09-17
导读: 实验设计 实验一:(7,4)循环码的编码与译码 1.实验编码原理: 根据循环码的代数性质建立系统编码的过程,可以把消息矢量用如下多项式表示: m(x)?mk?1xk?1?mk?2xk?2?...?m1x?m0要编码成系统循环码形式,把消息比特移入码字寄存器的最右边k位,而把监督 n?

实验设计

实验一:(7,4)循环码的编码与译码

1.实验编码原理: 根据循环码的代数性质建立系统编码的过程,可以把消息矢量用如下多项式表示:

m(x)?mk?1xk?1?mk?2xk?2?...?m1x?m0要编码成系统循环码形式,把消息比特移入码字寄存器的最右边k位,而把监督

n?kn?kxx比特加在最左边的n-k个中,则要用乘以m(x)得到 m(x)=

mk?1xn?1?mk?2xn?2?...?m1xn?k?1?m0xn?kn?k,则p(x)+ x m(x)

xn?k m(x)= q(x) g(x)+ p(x),其中p(x)可以表示为

n?k?1?...?p1x?p0p(x)= pn?k?1xn?1n?2n?k?1?m0xn?k+ pn?k?1xn?k?1?...?p1x?p0= mk?1x?mk?2x?...?m1xn?kpmp另U(x)= p(x)+ x m(x),则U=(0,p1,p2,···,n?k?1,0 ,m1,···,

mk?1)。

本实验根据以上原理,用matlab实现书上例6.8系统形式的循环码,生成多项式为g(x)=

2.实验译码原理:译码的实验原理 g(x)= ,在(n,k)循环码中,

nx?1可分解成g(x)和其他因式的乘积,记为 由于g(x)能除尽,因此

1?x?x31?x?x3 即可写成

xn?1?g(x)h(x)

nxh(x)??1

*43hh(x)x?x则 = ? x ? 1,其中

g(x)即h (x) =

x4?x2?x?1*(x)式h(x)的逆多项式。

监督矩阵多项式可表示为

?x2h*(x)??*?H(x)??xh(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);

úta除以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

程序运行结果为:

改变输入序列

运行结果的编码如下: 序号 1 2 3 4 5 输入序列 0000 0001 0010 0011 0100 输出序列 000 0000 101 0001 111 0010 010 0011 011 0100 序号 9 10 11 12 13 输入序列 1000 1001 1010 1011 1100 输出序列 110 1000 011 1001 001 1010 100 1011 101 1100

6 7 0101 0110 110 0101 100 0110 14 15 1101 1110 1111 000 1101 010 1110 111 1111 8 0111 001 0111 16 4.相对应的译码和纠错(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(i)),2)==1 u(i)=1;end

end

Data=zeros(1,4); Data(1)=u(4); Data(2)=u(5); Data(3)=u(6); Data(4)=u(7); if e==[0 0 0 0 0 0 0] disp('没有错误:') k=0,else

disp('第几位错误:') k=find(e) ;end

disp('接收码字') r

disp('译码输出序列:') Data

第几位错误:k = 5 接收码字

r = 1 0 0 1 1 1 1 译码输出序列:

Data =1 0 1 1

以上编码有个缺点,就是它只能对一个消息矢量(4位)进行编码,我又在这个基础上编写了一个可以同时对位数是4的倍数的消息矢量进行编码。 5.多位循环码(4的倍数)的编码程序如下: clear; clc;

a=[1 1 0 0 1 0 1 1]; [X,N]=size(a);

%将信息码分为M帧,1帧4个信息码

M=ceil(N/4); d=zeros(1,4); b=zeros(1,7*M); Data=zeros(1,7); for k=1:M for j=1:4

d(j)=a(j+(k-1)*4);end %生成多项式 Gx=[1 0 1 1]; Data(1)=d(4); Data(2)=d(3); Data(3)=d(2); Data(4)=d(1);

úta除以Gx得到余数Rx

…… 此处隐藏:855字,全部文档内容请下载后查看。喜欢就下载吧 ……
通信工程基于matlab的(7 - 4)循环码和(7 - 4)汉明码的编程设计.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wendang/446008.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)