当前位置:文档之家› (7,4)循环码的编码和译码

(7,4)循环码的编码和译码

(7,4)循环码的编码和译码
(7,4)循环码的编码和译码

(7,4)循环码的编码译码

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

要编码成系统循环码形式,把消息比特移入码字寄存器的最右边k 位,而把监督比特加在最左边的n-k 个中,则要用k

n x

-乘以m(x)得到

k n x - m(x)= k

n x - m(x)= q(x) g(x)+ p(x),其中p(x)可以表示为

p(x)= ,则p(x)+ k

n x - m(x)

= + 另U(x)= p(x)+ k

n x - m(x),则U=(0p ,1p ,2p ,···,1--k n p ,0m ,1m ,···,

1-k m )

。 本实验根据以上原理,用matlab 实现书上例6.8系统形式的循环码,生成多项式为g(x)= (7,4)循环码的编码的程序如下:clear; clc; a=[1 0 1 1];

%高次项系数在前的生成多项式 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

12211...)(m x m x m x m x m k k k k ++++=----k

n k n n k n k x m x m x m x m -+-----++++0

112211 (011)

1...p x p x

p k n k n +++----0

111...p x p x p k n k n +++----k n k n n k n k x m x m x m x m -+-----++++0112211 (3)

1x

x ++

[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

程序运行结果为:输入序列:a = 1 1 0 0

编码输出序列:b =

1 0 1 1 1 0 0 改变输入序列a=[1 0 1 1],运行结果:输入序列:a = 1 0 1 1 编码输出序列:b =

1 0 0 1 0 1 1 运行结果的编码如下:

译码的实验原理 g(x)= ,在(n ,k )循环码中,由于g(x)能除尽,因此1+n

x 可分解成g(x)和其他因式的乘积,记为

)()(1x h x g x n

=+

31x x

++

即可写成

)(1

)(x g x x h n +=即h (x) =

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

监督矩阵多项式可表示为

???

?

?

?????=)()()()(***2x h x xh x h x x H ,

相对应的译码和纠错(一位)程序如下: 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

1

24+++x x x 134

+++x x x

相关主题
文本预览
相关文档 最新文档