循环码实验报告.docx
《循环码实验报告.docx》由会员分享,可在线阅读,更多相关《循环码实验报告.docx(9页珍藏版)》请在冰豆网上搜索。
![循环码实验报告.docx](https://file1.bdocx.com/fileroot1/2023-7/25/36b5b2f1-885c-4428-95cc-0c45a5451fb2/36b5b2f1-885c-4428-95cc-0c45a5451fb21.gif)
循环码实验报告
循环码实验报告
篇一:
循环码实验报告
湖南大学
信息科学与工程学院
实验报告
实验名称课程名称
香农编码信息论与编码
1、实验目的
(1)进一步熟悉循环编码、译码算法;
(2)掌握C语言程序设计和调试过程中数值的进制转换、数值与字符串之间的转换等
技术。
2、实验要求
(1)输入:
7位信息序列
(2)输出:
输出(11,7)循环码
3、循环码编码算法
一个码长为n的(n,k)循环码,它必为按模xn+1运算的一个余式。
Cn-1(x)=c0xn-1+cn-1xn-2+…+c2x+c1Ci(x)≡xi·C(x)mod(xn+1)
循环码完全由其码组长度n和生成多项式g(x)所决定生成多项式g(x)具有以下特性:
(1)g(x)是一个常数项为1的r=n-k次多项式;
(2)g(x)是x?
1的一个因式;
(3)该循环码中其它码多项式都是g(x)的倍式。
g(x),xg(x)…,xk-1g(x)
如果g(x)是一个n–k=r次多项式,并且是xn+1的一个因式,则g(x)生成一(n,k)循环码。
任何(n,k)循环码的全体码字都是由一个n-k=r次多项式生成。
n
?
gn?
kgn?
k?
1...g1g0000...0?
?
0gg?
...gg00...0n?
kn?
k?
110?
?
?
?
G?
?
00gn?
kgn?
k?
1...g1g00...0?
?
........?
?
?
?
?
000...0gn?
kgn?
k?
1...g1g0?
?
生成矩阵
xn+1=g(x
可见H矩阵可由下述的多项式矩阵的系数构成,即由h(x)的反多项式h*(x)循环移位得到r组互不相关的多项式系数矢量构成。
称H为循环码的一致监督矩阵
定义一个矩阵是生成矩阵还是监督矩阵,主要是看它们在编码过程中所起的作用。
由于H矩阵与G矩阵彼此正交,所以两者的作用可以互换。
若g(x)生成一(n,k)循环码,那么h*(x)可生成(n,n-k)循环码,h(x)亦也作为生成多项式得到一(n,n-k)循环码。
h*(x)=xkh(x–1)=h0+h1x+…+hkxk
以g(x)作为生成多项式生成的(n,k)循环和以h*(x)作为生成多项式生成的(n,n-k)循环码互为对偶码,而以g(x)作为生成多项式生成的(n,k)循环码和以h(x)作为生成多项式生成的(n,n-k)循环码互为等效对偶码。
设待编码的信息序列为I=[cn-1cn-2…cn-k]
I(x)=cn-1xk-1+cn-2xk-2+…+cn-k
一般系统循环码的编码可由下述三个步骤完成:
(1)先用xn-k乘以I(x),这相当于用移位寄存器将信息序列移位n-k位。
(2)用生成多项式g(x)除xn-kI(x),得到余式V(x),即构成监督码元位
(3)输出k个未变化的信息元,cn-1,cn-2,cn-3,…,cn-k,其后紧随n-k个监督码元输出。
编码电路的关键是如何构造一个以g(x)为除式,以xn-k·I(x)为被除式的除法电路。
4、循环码译码:
1)由接收到的码多项式B(x)计算校正子(伴随式)多项式S(x);2)由校正子S(x)确定错误图样E(x);
3)将错误图样E(x)与B(x)相加,纠正错误。
上述第
(1)步运算和检错译码类似,也就是求解B(x)整除g(x)的余式,第(3)步也很简单。
因此,纠错码译码器的复杂性主要取决于译码过程的第
(2)步。
基于错误图样识别的译码器称,它的原理图如图8-7所示。
错误图样识别器是一个具有(n-k)个输入端的逻辑电路,原则上可以采用查表的方法,根据校正子找到错误图样,利用循环码的上述特性可以简化识别电路。
梅吉特译码器特别适合于纠正2个以下的随机独立错误。
梅基特译码器
5、实验代码
#include
main(){inti,j,k,wy=0;inttotal[128][7];inttemp[7]={0,0,0,0,0,0,0};ints,ss;intydev[5]={0,0,0,0,0};intxdev[5]={1,0,0,1,1};intYE1[11][64][11];intin[11];intend=6;intY[64][11];intE[11][11];//得到7位所有源码for(i=0;i=0;k--){//转换为二进制temp[k]=ss%2;ss=ss/2;}}for(i=0;i循环码实验报告)(wy d];
//做除法11101需要六次移位,由end进行判断除法是否结束if(ydev[0]==0){
ydev[0]=ydev[1];ydev[1]=ydev[2];ydev[2]=ydev[3];ydev[3]=ydev[4];ydev[4]=Y[wy][11-enend--;}//end为0时若ydev[0]=0则停止若为1则还有一次运算if(ydev[0]==1){for(j=0;j printf("\n");getchar();
/**生成一位错误图样**/printf("一位错误图样:
\n");for(i=0;i /**加到源码中**/for(k=0;k篇二:
循环码实验报告
一、实验内容:
(15,6)循环码实验
二、实验过程:
1、先下载运行插件RunTimeEngine.exe;
2、解压(15,6)循环码实验运行即可。
3、编解码分为两个部分
(一)编码
1.1、输入时钟频率,默认值:
2.048mHZ。
1.2、输入信息码元,灯为绿色为1,黑色为0
1.3、生成多项式默认值为X^9+X^6+X^5+X^4+X+1。
1.4、观察编码输出结果,注意区分信息位,校验位。
(二)译码
2.1、该实验模拟信道加扰,人为加入错误码元。
2.2、在任意位置加入一位错误,观察译码输出。
2.3、在任意位置加入两位错误,观察译码输出。
2.4、在任意位置加入三位或三位以上错码,观察译码输出。
2.5、框图右下角的指示灯为绿色,表示能够正确译码;
框图右下角的指示灯为红色,表示不能保证正确译码。
三、实验要求及结果:
4.1、设置不同的信息码元(至少设置3组),观察编码结果。
在报告中标注信息位与校验位。
第一组码:
第二组码:
第三组码:
4.2、在任意位置分别加入1、2、3、4位以上错码,观察译码结果。
在报告中标注错码位。
一个错码:
两个错码:
三个错码:
四个错码:
4.3、在实验报告中说明循环码的编码和译码原理,以及其纠错能力。
循环码编码原理
(1)有信息码构成信息多项式m(x)=
(2)用
(mxk?
1k?
1+……+m其中高幂次为k-1;0xn?
k乘以信息多项式m(x),得到的,xn?
km(x)最高幂次为n-1,该过程相当于把信息吗mk?
1mk?
2,……,m,m)移位到了码字德前k个信息位,其后是r个全为零的10
监督位;
(3)用g(x)除xn?
km(x)得到余式r(x),其次数必小于g(x)的次数,即小于(n-k),将此r(x)加
于信息位后做监督位,即将r(x)于xn?
km(x)相加,得到的多项式必为一码多项式。
当码字c通过噪声信道传送时,会受到干扰而产生错误。
如果信道产生的错误图样是e,译码器收到的n重接受矢量是y,则表示为:
y=c+e(13)
上式也可以写成多项式形式:
y(x)=c(x)+e(x)(14)
译码器的任务就是从y(x)中得到
?
?
e(x),然后求的估值码字?
c(x)=y(x)+e(x)(15)
并从中得到信息组m(x)。
?
循环码译码可按以下三个步骤进行:
(1)有接收到的y(x)计算伴随式s(x);
(2)根据伴随式s(x)找出对应的估值错误图样
?
?
?
e(x);?
?
(3)计算
若c(x)=y(x)+e(x),得到估计码字c(x)。
若c(x)=c(x),则译码正确,否则,?
c(x)?
c(x),则译码错误。
纠错能力:
四、实验体会
通过这次自己动手实验,深刻理解了课上所讲的循环码编译码原理。
并且更直观的看到了编译码过程中,接受码元和译码输出码元。
篇三:
基于MATLAB的循环码实验报告
基于Matlab循环码编码方法的应用
叶俊(指导老师,刘丹平副教授)
(重庆大学通信工程学院中国重庆400000)
摘要:
任何两个相邻的循环码只有一位数字不同,因此循环码具有可靠性高的优点,在现代通信系
统中应用广泛。
本文主要介绍了循环码的编码和译码的基本编码原理,纠错能力及其在Matlab中的实现及应用。
关键词:
循环码编码Matlab
TheApplicationofCyclicCodingMethodonMatlab
YeJun(Tutor:
LiuDanping)(CollegeofCommunicationEngineering,ChongqingUniversityChinaChingqing400000)
Abstract:
Anytwoadjacentcycliccodeonlyonenumberisdifferent,sothecycliccodehasthe
advantagesofhighreliability,whichiswidelyusedinmoderncommunicationsystem.Thisarticlemainlyintroducedthebasiccodingprincipleofcycliccodecodinganddecoding,errorcorrectionabilityanditsimplementationandapplicationinMatlab.
Keywords:
cycliccodecodingMatlab
1.循环码原理及其基本特点
循环码基本概念及其特点
设C使
某
线性分组码的码字集合,如
只有一位码元不同,因此它具有一个很好的优点是它满足邻接条件,没有瞬时错误(在数码变换过程中,在速度上会有快有慢,中间经过其他一些数码形式,即为瞬时错误)。
3)码字的循环特性,循环码中任一许用码经过循环移位后,所得到的码组仍然是许用码组。
4)可以用反馈移位寄存器很容易实现编码和伴随式的计算。
果对任C?
(cn?
1,cn?
2,?
c0)?
C,它的循环移位
C
(1)?
(cn?
2,cn?
3,?
c0,cn?
1)也属于C,则称
该
码为循环码。
该码在结构上有另外的限制,即一个码字任意循环移位的结果仍是一个有效码字。
其特点是:
1)循环码是线性分组码的一种,所以它具有线性分组的码的一般特性,且具有循环性,纠错能力强。
2)循环码是一种无权码,循环码编排的特点为相邻的两个数码之间符合卡诺中的邻接条件,即相邻数码间
循环码编码原理
在一个GF
(2)域上的(n,k)循环码中,一定存在唯一的一个次数最低的(n-k)次首一码多项式g(x)=xn-k+gn-k-1xn-k-1+…+g1x+1,使所有码多项式都是g(x)的倍式,且所有小于n次的g(x)的倍式都是码多项式。
(n,k)循环码的生成多项式g(x)一定是nn(x-1)的因式,即一定存在一个多项式h(x),满足(x-1)
n
=g(x)h(x)或g(x)|(x-1)
反之,如果g(x)是(x-1)的(n-k)次因式,g(x)一定是某(n,k)循环码的生成多项式。
即C(x)=m(x)g(x)
n
及g(x)|C(x)
上述定理告诉了构造(n,k)循环码的方法如下:
①对xn-1(在二元域中等效于对xn+1)实行因式分解,找出其中的(n-k)次因式。
②以找出的(n-k)次因式为循环码生成多项式g(x),与信息多项式m(x)相乘,即得码多项式:
C(x)=m(x)g(x)。
编码过程流程图:
2.译码原理及其实现:
译码原理及其步骤
1)有接收到的y(x)计算伴了随式s(x)。
2)
根据伴随式s(x)找出对应的估值错误图样。
3)计算c^(x)=y(x)+e^(x),得估计码字。
若c^(x)=
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)循
环码中的一位错误。
解码过程流程图:
纠错能力及其接收向量:
由于循环码是一种线性分组码,所以其纠检错能力与线性分组码相当。
而线性分组码的最小距离可用来衡量码的抗干扰能力,那么一个码的最小距离就与它的纠检错能力有关。
定理:
对于任一个(n,k)线性分组码,若要在码字内
(1)检测
个错误,要求码的最小距离
d?
e?
1;
(2)纠正个错误,要求码的最小距离
d?
2t?
1;
(3)纠正个错误同时检测
个错误,则
要求d?
t?
e?
1;
循环码的译码分检错译码与纠错译码两类。
在无记忆信道上,对码字c,差错图案e和接收向量r的
多项式描述为
r(x)
?
c(x)?
e(x)
定义r(x)的伴随多项式为s(x)
s(x)?
r(x)(modg(x))
?
s
0?
s1x?
s22x?
?
?
sr?
1
r?
1x由于c(x)?
a(x)g(x)?
0(modg(x)),所
以
s(x)?
e(x)(modg(x))
由此可见,s(x)
?
0则一定有差错产生,或
说满足e(x)(modg(x))?
0的差错图样e(x)
产生,它满足e(x)(modg(x))?
0。
循环码的检错译码即是计算s(x)并判断是否为0
3.实验分析
实验测试结果
理想状态下,对信号随机的提取,编码器输入为
0,
通过encode函数后,因为加入了监督码,信号变得复杂密集,编码输出为01通过译码输出为0,与编码输入一致。
说明循环码的检错和纠错能力性能好。
输出多项式为:
g(x)=(x+a)(x+a2)(x+a3)=a6+a5x+a4x+a3x2+a3x+a2x+x3
以randint函数重新做一个输入信号并进行编码,结果与上例相似,输入与输出一致。
由上面所有的图可以发现,编码器输入信号并不完全相同,因为对信号的提取是随机的,所以码元也是随机的,信号经过编码器后,因为要加入监督码,所以波形变得更加密集了。
信号经过译码后,波形和编码器输入信号大致相同,说明循环码的检错和纠错能力可以。
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)code=encode(msg,n,k,'cyclic',p);subplot(2,2,2)stem(code)
recode=decode(code,n,k,'cyclic',p)subplot(2,2,3)stem(recode)
title('译码器输出信号')t=-1:
0.01:
1;
x=recode;N=length(x);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('频谱图')
5.总结
我们小组在分配到循环码这个专题报告后,我们在组长的组织下大家先是自己了解相关内容,然后再聚集在一起进行讨论和对专题进行分析,确定任务后根据大家的兴趣以及现所掌握的知识进行任务的分配,我所承担的任务就是弄清楚循环码的译码和编码原理及其相关方法,最后做好PPT发给组长进行综合整理。
刘老师这种独特的教学方式把被动的课堂浇灌知识改变为让我们主动的去搜索知识,这点很重要,可以很好地培养我们的自学能力,而且还可以培养我们的合作协调意识,在这次专题报告中,我也确实学习了很多,而且印象深刻,因为是自己主动学习的。
开始并没有注意到运用循环码时可用简便的Matlab功能函数,不知道怎么进行纠错编码及解码,然后查找资料,收集了与循环码相关的函数(部分如下:
)
1)encode函数功能:
编码函数
说明:
用method指定的方法完成纠错编码。
其中msg代表信息码元,是一个K列矩阵,N是编码后
的码字长度;K是信息位的长度;opt是有些编码方式需要的参数。
2)decode函数功能:
译码函数
语法:
msg=decode(code,N,K,method,opt1,opt2,opt3,opt4);
说明:
这个函数对接收到的码字进行译码,恢复出原始的信息,译码参数和方式必须和编码时采用的严格相同。
它对接收到的码字,按method指定的方式进行译码;opt1,…,opt4是可选项的参数。
6.参考文献
[1]徐明远,邵玉斌MATLAB仿真在通信与电子工程中的应用.西安:
西安电子科技大学学出版社,XX.6[2]唐向宏,岳恒立,郑雪峰MATLAB及在电子信息类课程中的应用(第二版).北京:
电子工业出版社,XX.6
[3]黄爱民,安向京,骆力.数字图像处理与分析基础
[M].中国水利水电出版社,XX.6:
135—196.[4]晏晖,姜鹏,陈贝.基于MATLAB工具箱的数字图像
处理技术[J].《微计算机信息》(嵌入式与SOC)XX,26(9-2):
211—215.