课程设计报告
题目:基于MATLAB循环码编
译码器的设计与仿真
学生姓名:胡鑫
学生学号:1114030110 系别:电气信息工程学院
专业:通信工程
届别:15届
指导教师:吴琰
电气信息工程学院制
2014年6月
基于MATLAB循环码编译码器的设计与仿真
学生:胡鑫
指导教师:吴琰
电气信息工程学院11级通信工程专业
1循环码编码的设计目的与要求
1.1设计目的
(1)巩固并扩展通信原理课的基本概念,基本理论,分析方法和实现方法;
(2)通过实验了解循环码的工程作原理;
(3)培养创新思维和设计能力;
(4)增强软件编程实现能力和解决能力。
1.2设计要求
(1)掌握循环码的编码与译码的相关知识;
(2)能够设计程序并建立模型。
2循环码介绍与原理
2.1循环码的介绍
随着社会经济的迅速发展和科学技术的全面进步,计算机事业的飞速发展,以计算机与通信技术为基础的信息系统正处于蓬勃发展的时期。随着经济文化水平的显著提高,人们对生活质量及工作软件的要求也越来越高。在计算机通信信息码中循环码是线性分组码的一个重要子集,是目前研究得最成熟的一类码。它有许多特殊的代数性质,它使计算机通信以一种以数据通信形式出现,实现了在计算机与计算机之间或计算机与终端设备之间进行有效的与正确地信息传递,它使得现代通信的可靠性与有效性实现了质的飞跃。它是现代计算机技术与通信技术飞速发展的产物,在日常生活通信领域、武器控制系统等领域都被广泛应用。
循环码是线性分组码的一种,所以它具有线性分组码的一般特性,此外还具有循环性。循环码的编码和解码设备都不太复杂,且检(纠)错能力强。它不但可以检测随机的错误,还可以检错突发的错误。(),n k循环码可以检测长为n k-或更短的任何突发错误,包括首尾相接突发错误。循环码是一种无权码,循环码编排的特点是相邻两个数码之间符合卡诺图中的邻接条件,即相邻两个数码之间只
有一位码元不同,码元就是组成数码的单元。符合这个特点的有多种方案,但循
环码只能是表中的那种。循环码的优点是没有瞬时错误,因为在数码变换过程中,
在速度上会有快有慢,中间经过其它一些数码形式,称它们为瞬时错误。这在某
些数字系统中是不允许的,为此希望相邻两个数码之间仅有一位码元不同,即满
足邻接条件,这样就不会产生瞬时错误。循环码就是这样一种编码,它可以在卡
诺图中依次循环得到。循环码又称格雷码(Gray Code )。
2.2循环码的设计原理
2.2.1 循环码的循环性
循环码除了具有线性码的一般性质外,还具有循环性。循环性是指任一码组
循环一位(即将最右端的一个码元移至左端,或反之)以后,仍为该码中的一个
码组。在表1中给出一种(7,3)循环码的全部码组。由此表可以直观看出这种
码的循环型。例如,表中的第2码组向右移一位即得到第5码组;第6码组向右
移一位即得到第7码组。一般说来,若(0121a a a a n n ?-- )是循环码的一个码组,则
循环移位后的码组:
(1032---??n n n a a a a )
(2143----??n n n n a a a a )
……
(1210a a a a n ??-)
也是该编码组中的码组。
表1 一种(7,3)循环码的全部码组
由于循环码具有码的代数结构清晰、性能较好、编译码简单和易于实现的特
点,因此在目前的计算机纠错系统中所使用的线性分组码几乎都是循环码。它不。
但可以纠正独立的随机错误,也可用于检测突发错误并且非常有效。),(k n 循环码
能够检测长为k n -或更短的任何突发错误;其中n 为码长,k 为信息位数。
2.2.2循环码多项式表示
在代数编码理论中,为了便于计算,把这样的码组中各码元当作是一个多项
式的系数,即把一个长度为n 的码组表示成:
012211)(a x a x a x a x a x T i i n n n n ++?++?++=---- (2-1)
这种多项式中, x 仅是码元位置的标记,例如上式表示第7码组中a 6、a 5、
a 2和a 0为“1”,其他均为0。因此我们并不关心x 的取值。这种多项式有时称
为码多项式。
例如,表1中第7个码组可以表示为:
1)(256+++=x x x x T
2.2.3循环码的生成多项式
在循环码中,一个),(k n 码有2k 个不同的码组。若用)(x g 表示其中前)
1(-k 位皆为“0”的码组,则)(,),(),(),(12x g x x g x x xg x g k -?都是码组,而且这k 个码
组是线性无关的。对于(n,k )循环码中的生成多项式g (x ),它是(n,k)循环码码集中
唯一的,幂次为n-k 的码多项式,则()k x g x 是一个幂次为n 的码多项式。按模
(1n x +) 运算,此时:
1
)()(1)(++=+n n k x x R x Q x x g x ,R (x )余数多项式 (2-2) 即 ()()k x g x R x ≡,且因()k x g x 也是n 阶幂,故Q(x)=1.由于它是循环码,
故()k x g x 按模(1n x +)运算后的“余式”也是循环码的一个码字,它必能被g(x)
整除,即:
)()
()(x F x G x R = (2-3) 由以上两式可以得到:
)()()1()()1)(()(x G x F x x R x x Q x g x n n k ++=++= (2-4)
和 ()()()1n k x x F x G x +=+ (2-5)
从上式中可以看出,生成多项式g(x)应该是1n x +的一个因式,即循环码多
项式应该是1n x +的一个n-k 次因式。
2.2.4循环码的生成矩阵和一致校验矩阵
对所有的i =0,1,2,……k -1,用生成多项式g(x)除i k n x +-,有:
)()()(1x b x g x a x i i k n +=-- (2-6)
式中)(x b i 是余式,表示为:
0,1,11__,...)(i i k n k n i i b x b x b x b ++=-- (2-7)
因此()n k i i x b x -++是g(x)的倍式,即)(x b x i i k n ++-是码多项式,由此得到系统形式
的生成矩阵为:
它是一个k ?n 阶的矩阵。
同样,由0=?T H G 可以得到系统形式的一致校验矩阵为:
已知(7,4)循环码的生成多项式和校验多项式分别为:()31g x x x =++,
()421h x x x x =+++。写得其生成矩阵和校验矩阵分别为:
3循环码编译码原理
3.1循环码的编码原理
(1)有信息码构成信息多项式)()()(x R x E x c +=,其中最高幂次为k -1;
(2)用k n x -乘以信息多项式)(x m ,得到的)()()(x R x E x c +=,最高幂次为1-n ,
该过程相当于把信息码),,.....,,(0121m m m m k k --移位到了码字德前k 个信息位,其
后是r 个全为零的监督位;
(3)用g (x)除)(x m x k n -得到余式r(x),其次数必小于g(x)的次数,即小于(n-k ),
将此r(x)加于信息位后做监督位,即将r (x )于)(x m x k n -相加,得到的多项式必为
一码多项式。
根据上面的讨论,可得(7,4)循环码编码的程序框图,如图1如下:
图1 编码程序框图
3.2循环码的译码原理
纠错码的译码是该编码能否得到实际应用的关键所在。译码器往往比编
码较难实现,对于纠错能力强的纠错码更复杂。根据不同的纠错或检错目
的,循环码译码器可分为用于纠错目的和用于检错目的的循环码译码器。
通常,将接收到的循环码组进行除法运算,如果除尽,则说明正确传
输;如果未除尽,则在寄存器中的内容就是错误图样,根据错误图样可以
确定一种逻辑,来确定差错的位置,从而达到纠错的目的。用于纠错目的
的循环码的译码算法比较复杂,感兴趣的话可以参考一些参考书。而用于
检错目的循环码,一般使用ARQ 通信方式。检测过程也是将接受到的码组
进行除法运算,如果除尽,则说明传输无误;如果未除尽,则表明传输出现差错,要求发送端重发。用于这种目的的循环码经常被称为循环冗余校验码,即CRC校验码。CRC校验码由于编码电路、检错电路简单且易于实现,因此得到广泛的应用。在通过MODEM传输文件的协议如ZMODEM、XMODEM协议中均用到了CRC校验技术。在磁盘、光盘介质存储技术中也使用该方法。
在SystemView中没有提供专用的CRC循环冗余校验码编码器,我们可以在CDMA库中找到一个现成的专用的CRC编码器和译码器。该图符是的接入信道的数据帧品质指示编码器,其中使用了多种不同比特率的数据模型,通过CRC校验来判断接入信道的质量好坏。其中规定每一帧的长度为20ms 的数据。一个典型IS-95-A标准规定的9600信道的CRC测试码的长度为192比特,其中信息位172位、校验位12比特、尾部全零8比特。感兴趣的读者可以加入一个速率为860bps(192bit/0.2ms=860)的PN数据,然后观察经过CRC编码后的波形。并可用对应的译码器译码观察输出波形是否与输入的PN码一致。
当码字c通过噪声信道传送时,会受到干扰而产生错误。如果信道产生的错误图样是e,译码器收到的n重接受矢量是y,则表示为:
y+
=
e
c
上式也可以写成多项式形式:
e
c
=
y+
x
x
(
)
(x
)
(
)
译码器的任务就是从y(x)中得到)?(x
e,然后求的估值码字
??
c x y x e x
=+
()()()
并从中得到信息组)?(x
m。
循环码译码可按以下三个步骤进行:
(1)有接收到的)
(x
y计算伴随式)
s;
(x
(2)根据伴随式s(x)找出对应的估值错误图样)?(x
e;
(3)计算??
c
x
c≠,则译码正确,
)?(x
()()()
c x y x e x
=+,得到)?(x
c估计码字。若)
(
否则,若)
x
c ,则译码错误。
c
)?(x
(
由于g(x)的次数为n - k次,g(x)除E(x)后得余式(即伴随式)的最高次数为n-k-1次,故S(x)共有2n-k个可能的表达式,每一个表达式对应一个错误格式。可以知道(7,4)循环码的S(x)共有2(7-4) = 8个可能的表达式,可根据错误图样表来纠正(7,4)循环码中的一位错误,其伴随式如下表2所示。
表2 BCH(7,4)循环码错误图样表
上式指出了系统循环码的译码方法:将收到的码字R(x)用g(x)去除,如果除尽则无错;否则有错。如果有错,可由余式S(x)一一找出对应图样,然后将错误图样E(x) 与R(x)模2 和,即为所求码字C(x) ,从而实现纠错目的。
解码过程流程图,如图2所示:
图2 译码程序框图
4实现程序和仿真结果分析
4.1、循环码编码与解码Matlab源程序(实验以(7,4)循环码进行分析)
m = 3;
n = 2^m-1; %定义码长
k = n-m; %信息位长
msg = randint(k*4,1,2);%随机提取信号,引起一致地分布的任意整数矩阵subplot(2,2,1)
stem(msg)
title('编码器输入信号')
p=cyclpoly(n,k)%循环码生成多项式,n=7,k=4 code = encode(msg,n,k,'cyclic',p); %编码函数,对信号进行差错编码subplot(2,2,2)
stem(code)
title('编码器输出信号')
recode=decode(code,n,k,'cyclic',p)%对信号进行译码,对接收到的码字进行译码,
恢复出原始的信息,译码参数和方式必须和
编码时采用的严格相同
subplot(2,2,3)
stem(recode)
title('译码器输出信号')
t=-1:0.01:1;
x=recode; %将recode赋值给x,并进行N=length(x);长度与fft设定
fx=fft(x);
df=100/N;
n=0:N/2;
f=n*df;
subplot(2,2,4);
plot(f,abs(fx(n+1))*2/N); grid;
title('频谱图')
4.2循环码的仿真与分析
实验测试结果,译码结果
图3 编译码信号图
理想状态下,对信号随机的提取,编码器输入为11000,
通过encode函数后,因为加入了监督码,信号变得复杂密集,
编码输出为111100
通过译码输出为11000,与编码输入一致。说明循环码的检错和纠错能力性能好。输出多项式为:g(x)=(x+a) (x+a2) (x+a3)=a6+a5x+a4x+a3x2+ a3x +a2x+x3
图4 编译码信号图图5 编译码信号图以randint函数重新做一个输入信号并进行编码,结果与上例相似,输入与输出一致。
由上面所有的图可以发现,编码器输入信号并不完全相同,因为对信号的提取是随机的,所以码元也是随机的,信号经过编码器后,因为要加入监督码,所以波形变得更加密集了。信号经过译码后,波形和编码器输入信号大致相同,说