74循环码的编码和译码Word下载.docx

上传人:b****4 文档编号:14312698 上传时间:2022-10-22 格式:DOCX 页数:10 大小:43.70KB
下载 相关 举报
74循环码的编码和译码Word下载.docx_第1页
第1页 / 共10页
74循环码的编码和译码Word下载.docx_第2页
第2页 / 共10页
74循环码的编码和译码Word下载.docx_第3页
第3页 / 共10页
74循环码的编码和译码Word下载.docx_第4页
第4页 / 共10页
74循环码的编码和译码Word下载.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

74循环码的编码和译码Word下载.docx

《74循环码的编码和译码Word下载.docx》由会员分享,可在线阅读,更多相关《74循环码的编码和译码Word下载.docx(10页珍藏版)》请在冰豆网上搜索。

74循环码的编码和译码Word下载.docx

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校正

fori=1:

7

ifrem(abs(b(i)),2)==0

b(i)=0;

end

ifrem(abs(b(i)),2)==1

b(i)=1;

disp('

输入序列:

'

);

a

编码输出序列:

b

程序运行结果为:

a=

1100

b=

1011100

改变输入序列a=[1011],运行结果:

1011

1001011

运行结果的编码如下:

序号

输入序列

输出序列

1

0000

0000000

9

1000

1101000

2

0001

1010001

10

1001

0111001

3

0010

1110010

11

1010

0011010

4

0011

0100011

12

5

0100

0110100

13

6

0101

1100101

14

1101

0001101

0110

1000110

15

1110

0101110

8

0111

0010111

16

1111

1111111

译码的实验原理g(x)=,在(n,k)循环码中,由于g(x)能除尽,因此可分解成g(x)和其他因式的乘积,记为

即可写成

即h(x)=

则=,其中式h(x)的逆多项式。

监督矩阵多项式可表示为

相对应的译码和纠错(一位)程序如下:

r=[1001111];

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;

ifrem(abs(s(i)),2)==0

s(i)=0;

ifrem(abs(s(i)),2)==1

s(i)=1;

ifs==[000]

e=[0000000]

elseifs==[100]

e=[0000001]

elseifs==[110]

e=[0000010]

elseifs==[111]

e=[0000100]

elseifs==[011]

e=[0001000]

elseifs==[101]

e=[0010000]

elseifs==[010]

e=[0100000]

elses==[001]

e=[1000000]

u=r+e;

ifrem(abs(u(i)),2)==0

u(i)=0;

ifrem(abs(u(i)),2)==1

u(i)=1;

Data=zeros(1,4);

Data

(1)=u(4);

Data

(2)=u(5);

Data(3)=u(6);

Data(4)=u(7);

ife==[0000000]

第几位错误:

k=0,else

k=find(e)

;

接受码字'

r

Data

运行程序结果如下:

e=0000100

k=5

接受码

r=1001111

Data=1011

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

a=[11001011];

[X,N]=size(a);

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

M=ceil(N/4);

d=zeros(1,4);

b=zeros(1,7*M);

fork=1:

M

forj=1:

d(j)=a(j+(k-1)*4);

%生成多项式

Data

(1)=d(4);

Data

(2)=d(3);

Data(3)=d

(2);

Data(4)=d

(1);

e=Rx+Data;

b(7*k-6:

7*k)=e(1:

7);

c=b(1+(k-1)*7);

b(1+(k-1)*7)=b(7+(k-1)*7);

b(7+(k-1)*7)=c;

c=b(2+(k-1)*7);

b(2+(k-1)*7)=b(6+(k-1)*7);

b(6+(k-1)*7)=c;

c=b(3+(k-1)*7);

b(3+(k-1)*7)=b(5+(k-1)*7);

b(5+(k-1)*7)=c;

M*7

程序运行结果如下:

11001011

Columns1through13

1011100100101

Column14

相应的多位译码纠错程序如下:

r=[10011001001001];

[X,N]=size(r);

%将接收到的码分为M帧,1帧7个信息位

M=ceil(N/7);

d=zeros(1,7);

U=zeros(1,4*M);

Data=zeros(1,7*M);

d(j)=r(j+(i-1)*7);

s=d*b;

ifrem(abs(s(k)),2)==0

s(k)=0;

ifrem(abs(s(k)),2)==1

s(k)=1;

u=d+e;

ifrem(abs(u(k)),2)==0

u(k)=0;

ifrem(abs(u(k)),2)==1

u(k)=1;

Data(1+7*(i-1))=e

(1);

Data(2+7*(i-1))=e

(2);

Data(3+7*(i-1))=e(3);

Data(4+7*(i-1))=e(4);

Data(5+7*(i-1))=e(5);

Data(6+7*(i-1))=e(6);

Data(7+7*(i-1))=e(7);

U(1+(i-1)*4)=u(4);

U(2+(i-1)*4)=u(5);

U(3+(i-1)*4)=u(6);

U(4+(i-1)*4)=u(7);

ifData==zeros(1,7*M);

m=0,else

[j,m]=find(Data);

m

接收到的码字:

U

运行结果如下:

e=0010000

e=0000010

m=313

r=Columns1through13

1001100100100

U=11001011

分析:

这两组实验基本上完成了循环码的编码和译码,但是该实验的缺点就是不能同时对7位信息码进行两位的纠错,即只能完成一位信息码的纠错。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 其它课程

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1