(7,4)循环码的编码和译码教学内容

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

(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 +++----0111...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

1

24+++x x x 134+++x x x

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

相关文档
最新文档