循环码的编码和译码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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 【实验心得】