循环码的编码和译码

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

信息编码技术实验报告三

题目:循环码的编码和译码

院系:计算机科学与工程学院

班级:

姓名:

学号:

【实验目的】

1.通过实验了解循环码的工作原理。

2.了解生成多项式g(x)与编码、译码的关系。

3.了解码距d 与纠、检错能力之间的关系。

【实验条件】

仪器设备:PC 机,应用软件:Matlab 。

【实验内容】

1、 编程实现(7,4)系统循环码的编、译码。

已知(7,4)循环码的生成多项式和校验多项式分别为:()3

1g x x x =++,()421h x x x x =+++。其生成矩阵和校验矩阵分别为:

1 0 1 1 0 0 00 1 0 1 1 0 00 0 1 0 1 1 0 0 0 0 1 0 1 1G ⎡⎤⎢⎥⎢⎥=⎢⎥⎢⎥⎣⎦ 1 1 1 0 1 0 00 1 1 1 0 1 00 0 1 1 0 0 1H ⎡⎤⎢⎥=⎢⎥⎢⎥⎣⎦

2、计算出所有的码字集合,可纠错误图样E (x )表和对应的错误伴随式表。

【程序代码】

% (7,4)系统循环码编码、译码

clc;

clear all;

close all;

%=================编码================

n=7;k=4;r=n-k;

mx=input('请输入信息码字:m=\n'); %输入信息码字

gx=[1 0 1 1]; %循环码生成多项式

x_nk=[1,zeros(1,r)]; %x^(n-k),

messg=conv(x_nk,mx); %x^(n-k)*mx

[qx,rx0]=deconv(messg,gx); %模gx ,qx 为所得除式,rx0为余式

rx=mod(rx0,2); %将余式rx0转换为二进制

cx=messg+rx; %编码码字多项式

c=cx %输出编码码字

%=================绘图===================

fs=1000;ts=1/fs; %fs 为一个单位内的样点

for i=1:n %以方波形式输出编码码字,一个单位内一个码字 for j=1:fs

cx_wave((i-1)*fs+j)=c(i);

end

end

t=0:ts:n-ts;

plot(t,cx_wave); %以方波形式输出编码码字

xlabel('时间');

ylabel('幅度');

title('(7,4)循环码编码输出波形');

axis([0 7 0 1.2]);

%==================译码====================

S=zeros(1,r); %初始化校验子

gx=[1 0 1 1]; %循环码生成多项式

Rx=input('请输入接收码字:R=\n');%接收码字多项式

% Rx=[1 0 1 0 1 1 1];

R=Rx; %接收码字

[nx,Sx0]=deconv(Rx,gx); %接收码字多项式除以gx,Sx0为余式(十进制) Sx=mod(Sx0,2); %将Sx0转换为G(2)域下多项式

S=Sx(5:7); %Sx0最后3位为检验子

if S==[0 0 0] %校验子=0

disp('There is no wrong!'); %显示接收码字无错

E=[0 0 0 0 0 0 0]; %查表得出错误图样为0

C=R; %译码输出为接收码字

elseif S==[0 0 1] %接收码字第一位r0错

disp('r0 is wrong!'); %显示r0错

E=[0 0 0 0 0 0 1]; %查表得出错误图样

C=xor(R,E); %译码输出C=R+E

elseif S==[0 1 0] %r1错

disp('r1 is wrong!');

E=[0 0 0 0 0 1 0];

C=xor(R,E);

elseif S==[1 0 0] %r2错

disp('r2 is wrong!');

E=[0 0 0 0 1 0 0];

C=xor(R,E);

elseif S==[0 1 1] %r3错

disp('r3 is wrong!');

E=[0 0 0 1 0 0 0];

C=xor(R,E);

elseif S==[1 1 0] %r4错

disp('r4 is wrong!');

E=[0 0 1 0 0 0 0];

C=xor(R,E);

elseif S==[1 1 1] %r5错

disp('r5 is wrong!');

E=[0 1 0 0 0 0 0];

C=xor(R,E);

elseif S==[1 0 1] %r6错

disp('r6 is wrong!');

E=[1 0 0 0 0 0 0];

C=xor(R,E);

end

C %输出译码码字

【实验结果】

请输入信息码字:m=

[1 0 1 1 0 1 0]

c =

1 0 1 1 0 1 0 1 1 0

请输入接收码字:R=

[1 0 1 1 0 1 0 1 1 0]

There is no wrong!

C =

1 0 1 1 0 1 0 1 1 0 【实验心得】

相关文档
最新文档