文档库 最新最全的文档下载
当前位置:文档库 › 信息论循环码报告

信息论循环码报告

信息论循环码报告
信息论循环码报告

三级项目报告

课程名称:信息论与编码__________ 课程设计题目:循环码的编码和译码程序设计______

合作者

完成时间: 2012 年 5 月 18 日至 5 月 21 日

成绩:评阅人:

摘要

循环码是线性分组码中一个重要的子类,具有检错纠错能力强,实现方便等特点。它具有严密的代数学理论,封闭性与循环性。(n,k)循环码表示信息位为k位,监督位为(n-k)位。本次设计实验首先分析了(7,4)循环码的编码与译码原理,然后,用C语言实现其编码与译码功能。通过C语言平台运行所编写的程序,观察了在输入信息码情况下输出对应的编码结果以及相反的译码功能。通过多组的对比验证了该(7,4)循环码的编译码程序的正确性。最后,在程序运行的过程中进一步分析循环码的编译码原理,并通过比较仿真模型与理论计算的性能,证明了仿真模型的可行性。

关键词:循环码,编码与译码,C程序。

循环码的原理与特点

循环码是线性分组码的一种,所以它具有线性分组码的一般特性,此外还

具有循环性。循环码的编码和解码设备都不太复杂,且检(纠)错能力强。它不但可以检测随机的错误,还可以检错突发的错误。(n,k )循环码可以检测长为n-k 或更短的任何突发错误,包括首尾相接突发错误。

循环码是一种无权码,循环码编排的特点是相邻两个数码之间符合卡诺图中的邻接条件,即相邻两个数码之间只有一位码元不同,码元就是组成数码的单元。符合这个特点的有多种方案,但循环码只能是表中的那种。循环码的优点是没有瞬时错误,因为在数码变换过程中,在速度上会有快有慢,中间经过其它一些数码形式,称它们为瞬时错误。这在某些数字系统中是不允许的,为此希望相邻两个数码之间仅有一位码元不同,即满足邻接条件,这样就不会产生瞬时错误。循环码就是这样一种编码,它可以在卡诺图中依次循环得到。循环码又称格雷码( Grey Code )。

循环码最大的特点就是码字的循环特性,所谓循环特性是指:循环码中任一许用码组经过循环移位后,所得到的码组仍然是许用码组。若(

)为一循环码组,则(

)、

)、……还是许用码组。也就是说,不论是左移还是右

移,也不论移多少位,仍然是许用的循环码组。

循环码编码原理

(1) 有信息码构成信息多项式m(x)= 1

k m -1

k x

-+……+0m 其中高幂次为

k-1; (2) 用n k

x

-乘以信息多项式m(x),得到的n k

x

- m(x)最高幂次为n-1,该

过程相当于把信息吗(1k m -,2k m -,……,1m ,0m )移位到了码字德前k 个信息位,其后是r 个全为零的监督位; (3) 用g(x)除n k

x

- m(x)得到余式r(x),其次数必小于g(x)的次数,即小

于(n-k ),将此r(x)加于信息位后做监督位,即将r(x)于n k

x m(x)

相加,得到的多项式必为一码多项式。

根据上面的讨论,可得到在(7,4)循环码编码的程序框图如图 1 所下图示:

图2 编码程序框图 循环码的译码原理

纠错码的译码是该编码能否得到实际应用的关键所在。译码器往往比编码

较难实现,对于纠错能力强的纠错码更复杂。根据不同的纠错或检错目的,循环码译码器可分为用于纠错目的和用于检错目的的循环码译码器。 通常,将接收到的循环码组进行除法运算,如果除尽,则说明正确传输;如果未除尽,则在寄存器中的内容就是错误图样,根据错误图样可以确定一种逻辑,来确定差错的位置,从而达到纠错的目的。用于纠错目的的循环码的译码算法比较复杂,感兴趣的话可以参考一些参考书。而用于检错目的循环码,一般使用ARQ 通信方式。检测过程也是将接受到的码组进行除法运算,如果除尽,则说明传输无误;如果未除尽,则表明传输出现差错,要求发送端重发。用于这种目的的循环码经常被成为循环冗余校验码,即CRC 校验码。CRC 校验码由于编码电路、检错电路简单且易于实现,因此得到广

储存c(x)

初始化

确定余式r(x):

确定c(x):

泛的应用。在通过MODEM 传输文件的协议如ZMODEM 、XMODEM 协议中均用到了CRC 校验技术。在磁盘、光盘介质存储技术中也使用该方法。

在SystemView 中没有提供专用的CRC 循环冗余校验码编码器,读者可根据有关参考书设计一个相应的仿真电路。如果不想亲自动手设计,可以在CDMA 库(IS95)中找到一个现成的专用的CRC 编码器和译码器。该图符(FrameQ )是的接入信道的数据帧品质指示编码器,其中使用了多种不同比特率的数据模型,通过CRC 校验来判断接入信道的质量好坏。其中规定每一帧的长度为20ms 的数据。一个典型IS-95-A 标准规定的9600信道的CRC 测试码的长度为192比特,其中信息位172位、校验位12比特、尾部全零8比特。感兴趣的读者可以加入一个速率为860bps (192bit/0.2ms =860)的PN 数据,然后观察经过CRC 编码后的波形。并可用对应的译码器译码观察输出波形是否与输入的PN 码一致。

当码字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),则译码错误。

由于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)循环码中的一位错误,其伴随式如表1所示。

错误图样 错误图样码字 伴随式S(x)

伴随式 E6(x)=x6 1000000 x2 100 E5(x)=x5 0100000 x2+x 110 E4(x)=x4 0010000 x2+x+1 111 E3(x)=x3 0001000 x+1 011 E2(x)=x2 0000100 x2+1 101 E1(x)=x1 0000010 x 010 E0(x)=x0 0000001 1 001 E(x)=0

0000000

000

表1 BCH (7,4)循环码错误图样表

上式指出了系统循环码的译码方法:将收到的码字R (x ) 用g (x ) 去除,如果除尽则无错;否则有错。如果有错,可由余式S (x ) 一一找出对应图样,然后将错误图样E (x ) 与R (x ) 模2 和,即为所求码字C (x ) ,从而实现纠错目的。

根据前面的讨论,可得(7,4)循环码译码的程序框图如图2 所示

是 否

图 2 译码程序框图

初始化

由R(x)确定S(x):

S(x)=0,无误码误

由S(x)确定错误图样E(x) 纠错C(x)=E(x)+R(x) 存储C(x)

基于C 语言程序编写

就74循环码的编码与译码程序如附录所示:

运行及分析

运行结果理论分析

由循环码性质我们可以知道,对于(7,4)循环码来说,最小码距d 0=4,可以检测出3 位错误,纠正1 位错误,编码效率为4 7 ×100% = 57.1%。设传输信道的误码率为p ,据此设定信道模型存在如下关系:

传输正确概率为(1? p )n ,信息帧传输错误概率为Pe=1-(1-p) n ,每帧仅发生1 位错误的概率为P e =Cn 1p(1-p) n-1=np(1-p) n-1, 则1 位错误帧在总的错误帧中的概率为

表2 为其P e ,P e1,R 的模拟结果

表2 P e ,P e1,R 的模拟结果(n=7)

综合表2 的模拟结果和理论分析可知,通信系统的帧传输具有下列性质: (1) 在n 一定的条件下,信息帧错误概率随着比特误码率p 的增加而增加,最坏条件下帧错误 概率几乎为100%,此时系统失去通信能力。

(2) 在典型的通信环境下( p 为10-3 ~10-5 5,帧长n =128 ~ 1024,np <1 ) , 当p → 0 时,R →1,表明当比特误码率p 足够小的情况下,绝大多数信息帧错误是每帧1 位错误,因此纠正每帧1 位错误有实际应用价值。

1(1)1(

)100%100%1(1)E E P np p n R P p n

--=?=?--

程序运行结果

1.初始化界面

图3 2.正确编码界面

图4 3.正确译码界面

图5 4.信息位有一位错误时的译码界面

图6

5.信息位有二位错误时的译码界面

图7 6.信息位有三位错误时的译码界面

图8

RS码在现代通信系统中的应用

几乎所有的现代化通信系统都把纠错编码作为一个基本组成部分,RS码由于具有强有力的纠错功能,已经被NASA、ESA、CCSDS等空间组织接受,用于空间信道纠错。RS 循环码在车载无线通信、M元扩频通信系统中的应用以及QAM系统等方面都有很广泛的应用,可以说它已经成为无线通信系统中不可或缺的一部分。

实验过程遇到的问题及解决方法

本次实验让我感觉非常棘手,一方面的原因是自己对信道编码的不熟悉,之前做的实验都是对信源进行编码,现在是对信道进行编码;另一方面是书本对于此部分的介绍内容相对较少,要自己在网上找资料学习,网上知识点太泛滥而且很多都是太学术化,不容易理解,因此要自己编程那是难上加难。此次实验的C程序我也是参考网上其中的一份并在其基础上根据自己的需要加上了自己的部分代码,网上对于这方面的资源真的蛮少,也许是自己找的还不够彻底吧,总的来说,这次实验收获不多,对于这方面还没掌握,我会继续努力。

参考文献

[1]潘新民主编.《计算机通信技术》 (第2版).北京.电子工业出版社.2006

[2]孙丽华谢仲华陈荣伶编《信息论与纠错编码》.北京.电子工业出版

社.2005

[3]樊昌信著.《通信原理》[M].国防工业出版社.1999.10

[4]宋祖顺著。《现代通信原理》[M].电子工业出版社.2001.2

[5]黄新亚米央编著《信息编码技术及其应运大全》[M] 电子工业出版社

1994.8

附录

/*(7,4)循环码的编译及纠检错实现*/

#include

#include

#include

/*函数声明*/

void Begin();

void Code();

void Decoding();

/*主函数*/

main()

{

printf("\nThis software main function is carries on the code and the decoding to (7,3) cyclic code.\n ");

Begin();

}

/*进行编码*/

void Code()

{

int Input[4];

int Output[7];

int reg[3]={0,0,0};

int temp,i,j,t;

printf("Please input the information code :");

for(i=0;i<4;i++)

scanf(" %d",&Input[i]); /*输入4位信息码*/

for(i=0;i<4;i++) /*进行除法操作*/

{temp=reg[2]+Input[i]; /*生成多项式为g(x)=x^3+x^2+1*/ if(temp==2) temp=0;

reg[2]=reg[1]+temp;

if(reg[2]==2)reg[2]=0;

reg[1]=reg[0];

reg[0]=temp;

}

for(i=0;i<4;i++) Output[i]=Input[i];

/*进行编码操作*/

for(i=4;i<7;i++)

{

temp=reg[2];

for(j=2;j>0;j--)

reg[j]=reg[j-1];

reg[0]=0;

Output[i]=temp;

}

printf("________________________________________");

printf("\n");

printf(" The information code output is: \n");

for(i=0;i<7;i++)

printf( " %d ",Output[i]); /*输出编码结果*/ printf("\n");

printf("________________________________________");

printf("\n");

Begin();

}

/*译码并进行纠检错*/

void Decoding()

{ int Input[7],Output[7];

int reg[3]={0,0,0};

int temp,i,d,x,p;

printf("\ninput the information code of bit7:");

for(i=0;i<7;i++)

scanf(" %d",&Input[i]); /*输入接受码组*/

for(i=0;i<7;i++) /*进入除法电路*/

{temp=reg[2]; /*计算伴随式S(x)*/

reg[2]=reg[1]+temp;

if(reg[2]==2)reg[2]=0;

reg[1]=reg[0];

reg[0]=temp+Input[i];

if(reg[0]==2)reg[0]=0;

}

p=reg[2]+2*reg[1]+4*reg[0];

if(p!=1&&p!=2&&p!=3&&p!=7&&p!=8&&p!=13&&p!=14&&p!=0)

{ /*输入错误位数大于2位*/

printf(" \"The error >=2\" \n");

getchar();

exit(0);

}

printf("___________________________________________\n");

printf("s(x)=");

for(i=2;i>=0;i--)

printf(" %d",reg[i]);

printf("\n");

for(i=0;i<7;i++) /*纠正一位错误*/

{d=reg[2]*reg[1]*(!reg[0]);

Output[i]=d+Input[i];

if(Output[i]==2) Output[i]=0;

temp=reg[2];

x=0; /*S(x)进行自发运算以求得错误位数*/

reg[2]=temp+reg[1];

if(reg[2]==2)reg[2]=0;

reg[1]=reg[0];

reg[0]=temp+x;

} /*输出4位信息源*/

printf("The decoding bit4 is:");

for(i=0;i<4;i++)

printf(" %d ",Output[i]);

printf("\n");

printf("The Decoding bit7 is:"); /*输出7位译码结果*/ for(i=0;i<7;i++)

printf(" %d ",Output[i]);

printf("\n");

printf("___________________________________________\n");

Begin();

}

/*选择操作*/

void Begin()

{

fflush(stdin);

char ch;

printf(" -----------------------------------------------------------------");

printf("\n");

printf(" -- input 'c' to carry on the code --"); printf("\n");

printf(" -- input 'd' to carry on the decoding code --"); printf("\n");

printf(" -- input 'e' to exit please to --"); printf("\n");

printf(" ----------------------------------------------------

-------------");

printf("\n");

ch=getchar();

if(ch=='c') Code();

else if(ch=='d') Decoding();

else if(ch=='\n') Begin();

else if(ch=='e') exit(0);

else {printf("\"input error\"\n"); fflush(stdin);Begin();} /*输入错误提示*/

}

基于MATLAB的循环码实验报告

课程名称:信息论与编码 课程设计题目:循环码的编码和译码程序设计指导教师: 系别:专业: 学号:姓名: 合作者 完成时间: 成绩:评阅人:

一、实验目的: 1、通过实验了解循环码的工作原理。 2、深刻理解RS 码构造、RS 编译码等相关概念和算法。 二、实验原理 1、RS 循环码编译码原理与特点 设C 使某 线性分组码的码字集合,如果对任C c c c C n n ∈=--),,,(021 ,它的循环 移位),,,(1032)1(---=n n n c c c c C 也属于C ,则称该 码为循环码。 该码在结构上有另外的限制,即一个码字任意循环移位的结果仍是一个有效码字。其特点是:(1)可以用反馈移位寄存器很容易实现编码和伴随式的计算;(2)由于循环码有很多固有的代数结构,从而可以找到各种简单使用的译码办法。 如果一个 线性码具有以下的属性,则称为循环码:如果n 元组 },,,{110-=n c c c c 是子空间S 的一个码字,则经过循环移位得到的},,,{201)1(--=n n c c c c 也 同样是S 中的一个码字;或者,一般来说,经过j 次循环移位后得到的 },,,,,,,{11011)(---+--=j n n j n j n j c c c c c c c 也是S 中的一个码字。 RS 码的编码系统是建立在比特组基础上的,即字节,而不是单个的0和1,因此它是非二进制BCH 码,这使得它处理突发错误的能力特别强。 码长:12-=m n 信息段:t n k 2-= (t 为纠错符号数) 监督段:k n t -=2 最小码段:12+=t d 最小距离为d 的本原RS 码的生成多项式为:g(x)=(x-α)(x -α2)(x -α3)…(x -αd -2) 信息元多项式为::m(x)=m0+m1x+m2x2+…+mk -1xk-1 循环码特点有: 1)循环码是线性分组码的一种,所以它具有线性分组的码的一般特性,且具有循环性,纠错能力强。 2)循环码是一种无权码,循环码编排的特点为相邻的两个数码之间符合卡诺中的邻接条件,即相邻数码间只有一位码元不同,因此它具有一个很好的优点是它满足邻接条件,没有瞬时错误(在数码变换过程中,在速度上会有快有慢,中间经过其他一些数码形式,即为瞬时错误)。 3)码字的循环特性,循环码中任一许用码经过牡环移位后,所得到的码组仍然是许用码组。

实验6 BCH循环码的编码与译码的matlab实现

实验6 BCH循环码的编码与译码 一、实验内容 用VC或Matlab软件编写循环BCH码的编码与译码程序。利用程序对教科书的例题做一个测试。 二、实验环境 1.计算机 2.Windows 2000 或以上 3.Microsoft Visual C++ 6.0 或以上 4.Matlab 6.0或以上 三、实验目的 1.通过BCH循环码的编码与译码程序的编写,彻底了解并掌握循环BCH的编码与译码原理 2.通过循环BCH码的编码与译码程序的编写,提高编程能力。 四、实验要求 1.提前预习实验,认真阅读实验原理以及相应的参考书。 2.对不同信道的进行误码率分析。特别是对称信道,画出误码性能图。即信道误码率与循环汉明码 之间的关系。 3.认真填写实验报告。 五、实验原理 1.循环BCH的编码与译码原理(略) 2.循环BCH的程序实现。 六、实验步骤 bch_en_decode.m文件 function bch_en_decode() code=bch155 code=code+randerr(5,15,1:3); code=rem(code,2); code=gf(code) %随机产生1-3位错误 decode=debch155(code) end function decode=debch155(code) code=gf(code); M=4; code = gf(code.x,M); [m , n]=size(code);decode=[]; code1=[]; for i=1:m ;code1=code(i,:); M=code1.m;T2=6;N=15; S = code1* ((gf(2,M,code1.prim_poly)).^([N-1:-1:0]'*([1:T2]))); LambdaX = gf([1 zeros(1,T2)],M,code1.prim_poly);

信息论实验报告-

信息论实验报告 学生: 班级: 学号:

实验一香农编码一、程序设计的流程图 二、程序清单 #include

#include #include using namespace std; void swap(double *x,double *y); int main() { int N; cout<<"输入信源个数"<>N; double S[N]; //注意变量在数组中的影响cout<<"输入信源概率"<>S[i]; for(int i=0;i1) { MM[i]+='1';

aa=tem-1; } else { MM[i]+='0'; aa=tem; } } } string BB[N]; for(int i=0;i

信息论实验报告2

实验课程:信息论与编码理论专业:信息与计算科学班级:09070241 学号:0907024101 姓名:孙秋月 中北大学理学院

实验二 哈夫曼编码 一、实验目的 1. 掌握哈夫曼编码的原理及编码步骤 2. 练习matlab 中哈夫曼编码函数的调用及通信工具箱的使用 二、实验原理 哈夫曼编码的具体步骤归纳如下: 1. 统计n 个信源消息符号,得到n 个不同概率的信息符号。 2. 将这n 个信源信息符号按其概率大小依次排序: p (x 1) ≥ p (x 2)≥ …≥ p (x n ) 3. 取两个概率最小的信息符号分别配以0和1两个码元,并将这两个概率相加作为一个新的信息符号的概率,和未分配的信息符号构成新的信息符号序列。 4. 将剩余的信息符号,按概率大小重新进行排序。 5. 重复步骤3,将排序后的最后两个小概论相加,相加和与其他概率再排序。 6. 如此反复重复n-2次,最后只剩下两个概率。 7. 从最后一级开始,向前返回得到各个信源符号所对应的码元序列,即相应的码字,构成霍夫曼编码字。编码结束。 三、实验内容 为某一信源进行哈夫曼编码。该信源的字符集为X={x 1, x 2, … x 6 },相应的概率矢量为:P =(0.30,0.25,0.21,0.10,0.09,0.05),即X ,P 的概率空间为: 123456 0.300.250.210.100.090.05X x x x x x x P ????=???????? 根据哈夫曼编码算法对该信源进行哈夫曼编码。并计算其平均码长和编码效率。 调用matlab 哈夫曼编码函数进行哈夫曼编码,与人工编码结果做比较。 1. huffmandict 函数: 为已知概率分布的信源模型生成哈夫曼编解码索引表。

实验6 循环码的软件编、译码实验

实验六循环码的软件编、译码实验 一、实验目的 (1)通过实验了解循环码的工作原理。 (2)了解生成多项式g(x)与编码、译码的关系。 (3)了解码距d与纠、检错能力之间的关系。 (4)分析(7.3)循环码的纠错能力。 二、实验要求 用你熟悉的某种计算机高级语言或单片机汇编语言,编制一(7,3)循环码的编、译码程序,并改变接受序列R(x)和错误图样E(x),考查纠错能力情况。 设(7,3)循环码的生成多项式为:g(x)=x4+x3+x2+1 对应(11101)(1)按编、译码计算程序框图编写编、译码程序 (2)计算出所有的码字集合,可纠的错误图样E(x)表和对应的错误伴随式表。 (3)考查和分析该码检、纠一、二位错误的能力情况。 (4)整理好所有的程序清单,变量名尽量用程序框图所给名称,并作注释。 (5) 出示软件报告. 三、实验设计原理 循环码是一类很重要的线性分组码纠错码类,循环码的主要优点是编、译码器较简单,编码和译码能用同样的反馈移存器重构,在多余度相同的条件下检测能力较强,不检测的错误概率随多余度增加按指数下降。另外由于循环码具有特殊的代数结构,使得循环码的编、译码电路易于在微机上通过算法软件实现。 1、循环码编码原理 设有一(n,k)循环码,码字C=[C n-1…C r C r-1…C0],其中r=n-k。码字多项式为: C (x ) = C n-1x n-1+ C n-2x n-2+… +C1x+C0。 码字的生成多项式为: g(x)= g r-1x r-1+g r-2x r-2+…+g1x+g0 待编码的信息多项式为:m(x)=m K-1x K-1+…+m0 x n-k.m(x)=C n-1x n-1+…+C n-K x n-K

信息论课程设计报告

成绩: 2016-2017学年第1学期 《信息论》课程设计 学院名称: 班级学号: 学生姓名: 教师姓名: 2016年12月 一、判定唯一可译码 1. 任务说明

输入:任意的一个码(即已知码字个数及每个具体的码字) 输出:判决结果(是/不是) 输入文件:in1.txt ,含至少2组码,每组的结尾为”$”符 输出文件:out1.txt ,对每组码的判断结果 说明:为了简化设计,可以假定码字为0,1串 2. 实现原理 判断方法:将码C 中所有码字可能的尾随后缀组成一个集合F ,当且仅当集合F 中没有 包含任一码字,则可判断此码C 为唯一可译变长码。 构成集合F :首先观察码C 中最短的码字是否是其他码字的前缀。若是,将其所有可能 的尾随后缀排列出。就是将其他码字序列中截去与其最短码字相同的前缀 部分,将余下的序列为尾随后缀。而这些尾随后缀又可能是某些码字的前 缀,或者最短码字又仍是这些尾随后缀的前缀,再将由这些尾随后缀产生 的新的尾随后缀列出。然后再观察这些新的尾随后缀是否是某些码字的前 缀,或观察有否其他码字是这些新的尾随后缀的前缀,再将产生的尾随后 缀列出,依次下去,直至没有一个尾随后缀是码字的前缀或没有新的尾随 后缀产生为止。这样,首先获得的是由最短码字能引起的所有尾随后缀。 接着,按照上述步骤将次短的码字、......所有码字可能产生的尾随后缀前部 列出。由此得到由码C 的所有可能的尾随后缀组成的集合F 。 参考算法伪代码: For all ,i j W W C ∈ do if i W 是j W 的前缀 then 将相应的后缀作为一个尾随后缀放入集合0F 中 End if End for Loop For all i W C ∈ do For all j n W F ∈ do if i W 是j W 的前缀 then 将相应的后缀作为一个尾随后缀放入集合1n F +中 Else if j W 是i W 的前缀 then 将相应的后缀作为一个尾随后缀放入集合1n F +中 End if End for End for i i F F ← If ,i i W F W C ?∈∈ then Return false Else if F 中未出现新的元素 then Return true End if //能走到这里,说明F 中有新的元素出现,需继续 End loop

信息论应用调研报告

信息论基础调研报告 一.信息论的起源: 信息论理论基础的建立,一般来说开始于1948年美国数学家香农在《贝尔系统电话杂志》发表题为“通信的数学理论”的长篇论文。这篇论文以概率论为工具,深刻阐释了通信工程的一系列基本理论问题,给出了计算信源信息量和信道容量的方法和一般公式,得出了一组表征信息传递重要关系的编码定理,从而创立了信息论。 信息论自诞生到现在不过60多年,在人类科学史上是相当短暂的。但它的发展对学术界以及人类社会的影响是相当广泛和深刻的。信息作为一种资源,如何开发、利用、共享,是人们普遍关心的问题。 信息论是研究信息的传输、存储和处理的学科,亦称“信息论”为“通信的数学理论”。它主要研究在通信系统设计中如何实现信息传输的有效性和可靠性。 因此,信息论与通信技术、统计数学信号处理等密切相关。 二.信息技术的发展: 现代信息论其实是从上世纪二十年代奈奎斯特和哈特莱的研究开始的,他们最早开始研究了通信系统传输信息的能力,并且试图度量系统的信道容量。 香农于1940年在普林斯顿高级研究所期间开始思考信息论与有效通信系统的问题。经过8年的努力,1948年,来自贝尔研究所的Claude Shannon(克劳德·香农)的《通信的数学理论》论文公诸于世,从此宣告了崭新的一门关于信息发面的学科──信息论的诞生。1949年,香农又在该杂志上发表了另一著名论文《噪声下的通信》。在这两篇论文中,香农阐明了通信的基本问题,给出了通信系统的模型,提出了信息量的数学表达式,并解决了信道容量、信源统计特性、信源编码、信道编码等一系列基本技术问题。两篇论文成为了信息论的奠基性著作。这两篇论文一起阐述了现代信息论的基础。并且香农开始创造性的定义了“信息”。 信息论自从二十世纪四十年代中叶到二十一世纪初期,现已成为一门独立的理论科学,他给出一切传输、存储、处理信息系统的一般理论,并指出,实现有效、可靠地传输和存储信息的途径是走数字化的道路。这是通信技术领域数字化革命的数学或理论基础。1946年的计算机和1947年晶体管的诞生和相应技术的发展,是这一革命的物理或物质基础。信息论是在长期的通信工程实践和理论研究的基础上发展起来的。 20世纪50年代,包括香农在内的一些科学家做了大量的工作,发表了许多重要文章,将香农的科学论断进一步推广,同时信道编码理论有了较大的发展。20世纪60年代,信道编码技术已经成为信息论的又一重要分支。它把代数方法引入到纠错码的研究,使分组码技术达到了高峰,找到了可纠正多个错误的码,并提出了可实现的译码方法。其次是卷积码和概率译码有了重大突破,提出了序列译码和维特比译码方法。 1961年,香农的重要论文“双路通信信道”开拓了多用户信息理论的研究。到70年代,由于数字计算机的广泛应用,通讯系统的能力也有很大提高,如何

(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 [Qx,Rx]=deconv(Data,Gx); 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 -+-----++++0112211 (011) 1...p x p x p k n k n +++----0 111...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 ++

信息论与编码第五章答案

设信源1 234567()0.20.190.180.170.150.10.01X a a a a a a a p X ????=???? ???? (1) 求信源熵H(X); (2) 编二进制香农码; (3) 计算平均码长和编码效率. 解: (1) 7 21222222()()log () 0.2log 0.20.19log 0.19 0.18log 0.180.17log 0.170.15log 0.150.1log 0.10.01log 0.012.609/i i i H X p a p a bit symbol ==-=-?-?-?-?-?-?-?=∑ (2) (3) 7 1 ()0.230.1930.1830.1730.153 0.140.0173.141 ()()/ 2.609 3.14183.1% i i i K k p x H X H X K R η===?+?+?+?+?+?+?====÷=∑ 对习题的信源编二进制费诺码,计算编码效率. 解:

a i p(a i )编码码字k i a1 0002 a2 1 00103 a310113 a4 1 0102 a5 1 01103 a6 1 011104 a7111114 对信源编二进制和三进制哈夫 曼码,计算各自的平均码长和编码效率. 解: 二进制哈夫曼码: x i p(x i)编码码字k i s61 s50 s41 s30 s21 x10102 x21112 x300003

x410013 x500103 s11 x6001104 x7101114 三进制哈夫曼码: x i p(x i)编码码字k i s31 s20 s11 x1221 x20002 x31012 x42022 x50102 x61112 x72122

信息论报告

联合信源各种熵的计算 一、摘要: 在人类社会中,人与人之间要经常互通情报,交换消息,从一般意义上讲这就是通信。因此传递信息就是通信的根本目的。信源需要传递的事情一般是属于随机事件,也就是其状态是随机的。源熵是信息论中用来衡量信源信息量有序化程度的一个概念。信源熵值与信源有序化程度成反比;有序度越高,信源熵值越低,反之亦成立。信源各个离散消息的自信息量的数学期望(即概率加权的统计平均值)。本文主要研究了联合信源的各种伤的计算。 关键词: 条件熵 非条件熵 共熵 联合信源 二、问题分析: 由这两个信源构成了联合信源的各种概率空间: 联合概率空间——{,()}i j XY p x y 条件概率空间——{/,(/)}j i Y X p y x ,{/,(/)}i j X Y p x y 以下分别对二元联合信源的共熵,条件熵,非条件熵和最大熵进行求解。 1、二元联合信源的共熵:

共熵反映的是每当两个信源同时发送一对消息时,所提供的平均信息量。 二元联合信源的共熵(或联合熵)的定义: ,,1 ()()log ()log ()()i j i j i j i j i j i j H XY p x y p x y p x y p x y ==-∑∑ 2、二元联合信源的条件熵: (1).X 给定的情况下Y 的条件熵: ,,1(/)()log ()log (/)(/) i j i j j i i j i j j i H Y X p x y p x y p y x p y x ==-∑∑ 条件熵H(X/Y)所反映的是信源X 给定的条件下,信源Y 所提供的平均信息量。 (2).Y 给定的情况下X 的条件熵: ,,1 (/)()log ()log (/)(/)i j i j i j i j i j i j H X Y p x y p x y p x y p x y ==-∑∑ 条件熵H(Y/X)所反映的是信源Y 给定的条件下,信源X 所提供的平均信息量。 3、最大熵: 当X,Y 相互独立时,()()()()MAX H XY H X H Y H XY =+-- 三。、程序代码: %---------输入先验概率 转移矩阵 fprintf('\n 请输入先验概率P_x 和状态转移概率P_y_x\n'); eps=1e-8; P_x=input('P_x=')+eps; %+eps 是为了防止概率为0使,对数无意义 P_y_x=input('P_y_x=')+eps; if (min(P_x(:))<0 | max(P_x(:)>1))|(min(P_y_x(:))<0|max(P_x(:)>1)) error('The data shoud be any numbers between 0 and 1.'); end ; eps=1e-10; if min(sum(P_y_x')-1)

信息论与编码实验报告

实验一 绘制二进熵函数曲线(2个学时) 一、实验目的: 1. 掌握Excel 的数据填充、公式运算和图表制作 2. 掌握Matlab 绘图函数 3. 掌握、理解熵函数表达式及其性质 二、实验要求: 1. 提前预习实验,认真阅读实验原理以及相应的参考书。 2. 在实验报告中给出二进制熵函数曲线图 三、实验原理: 1. Excel 的图表功能 2. 信源熵的概念及性质 ()()[] ()[]())(1)(1 .log )( .) ( 1log 1log ) (log )()(10 , 110)(21Q H P H Q P H b n X H a p H p p p p x p x p X H p p p x x X P X i i i λλλλ-+≥-+≤=--+-=-=≤≤? ?????-===??????∑ 单位为 比特/符号 或 比特/符号序列。 当某一符号xi 的概率p(xi)为零时,p(xi)log p(xi) 在熵公式中无意义,为此规定这时的 p(xi)log p(xi) 也为零。当信源X 中只含有一个符号x 时,必有p(x)=1,此时信源熵H (X )为零。 四、实验内容: 用Excel 和Matlab 软件制作二进熵函数曲线。根据曲线说明信源熵的物理意义。 (一) Excel 具体步骤如下: 1、启动Excel 应用程序。 2、准备一组数据p 。在Excel 的一个工作表的A 列(或其它列)输入一组p ,取步长为0.01,从0至100产生101个p (利用Excel 填充功能)。

3、取定对数底c,在B列计算H(x) ,注意对p=0与p=1两处,在B列对应位置直接输入0。Excel中提供了三种对数函数LN(x),LOG10(x)和LOG(x,c),其中LN(x)是求自然对数,LOG10(x)是求以10为底的对数,LOG(x,c)表示求对数。选用c=2,则应用函数LOG(x,2)。 在单元格B2中输入公式:=-A2*LOG(A2,2)-(1-A2)*LOG(1-A2,2) 双击B2的填充柄,即可完成H(p)的计算。 4、使用Excel的图表向导,图表类型选“XY散点图”,子图表类型选“无数据点平滑散点图”,数据区域用计算出的H(p)数据所在列范围,即$B$1:$B$101。在“系列”中输入X值(即p值)范围,即$A$1:$A$101。在X轴输入标题概率,在Y轴输入标题信源熵。 (二)用matlab软件绘制二源信源熵函数曲线 p = 0.0001:0.0001:0.9999; h = -p.*log2(p)-(1-p).*log2(1-p); plot(p,h) 五、实验结果

信息论课程设计报告

xx大学 信息论课程设计 姓名: 学号: 学院: 指导老师: 完成日期:2015.01.04 一、判定唯一可译码

1.任务说明: 输入:任意的一个码(即已知码字个数及每个具体的码字) 输出:判决结果(是/不是) 输入文件:in1.txt,含至少2组码,每组的结尾为”$”符 输出文件:out1.txt,对每组码的判断结果 说明:为了简化设计,可以假定码字为0,1串 2.问题分析、实现原理 判定唯一可译码根据唯一可译码的判别方法,利用数据结构所学的知识,定义字符串数据类型并利用指针进行编程来实现算法。 算法: 1、考察C 中所有的码字,若Wi是Wj的前缀,则将对应的后缀作为一个尾随后缀码放入集合Fi+1中; 2、考察C和Fi俩个集合,若Wi ∈C是Wj∈F的前缀或Wi ∈F是Wj∈C的前缀,则将相应的后缀作为尾随后缀码放入集合Fi+1中; 3、F=∪Fi即为码C的尾随后缀集合; 4、若F中出现了C中的元素,算法终止,返回假(C不是唯一可译码);否则若F中没有出现新的元素则返回真。 3.源代码: #include #include stdlib.h #include using namespace std; struct strings { char *string; struct strings *next; }; struct strings Fstr, *Fh, *FP; //输出当前集合 void outputstr(strings *str) { do { cout<string<next; }while(str); cout<b?b:a;

最新——循环码(9,3)码

目录 目录 (1) 一、摘要: (2) 二、关键字: (2) 三、基本概念: (2) 四、循环码的多项式描述: (3) 4.1 生成多项式g(x)及生成矩阵G (3) 4.2 系统循环码 (4) 4.3 循环码的编码: (5) 4.4 检错纠错能力 (6) 五、编码器.译码器原理图: (6) 5.1 编码器原理图 (6) 5.2 译码器原理图 (8) 六、循环码和线性分组码、Hamming码的区别、联系: (12) 6.1 线性分组码 (12) 6.2 循环码 (12) 6.3 汉明码hamming (13) 七、循环码的MATLAB仿真: (13) 八、参考文献: (16) 九、参与人员: (16)

循环码(9,3)码课程设计 一、摘要: 本报告详细给出了循环码的定义以及由生成多项式求解生成矩阵和系统生成矩阵的过程,并在Matlab 环境下写出了循环码的编码器和解码器代码,实现了编码和译码功能。分析和讨论了此码发现错误、纠正错误的能力,并讨论了其与线性分组码、Hamming 码等信道编码的区别与联系。 二、关键字: 循环码 编码 译码 检错 纠错 Matlab 三、基本概念: 更好的设计和实现线性分组码的方法是引入特定的数学结构来界定某一类线性分组码。循环码即是采用循环移位特性界定的一类线性分组码。 循环码定义:设C 使某(n,k)线性分组码的码字集合,如果对任何 C c c c C n n ∈=--),,,(021 ,它的循环移位),,,(1032)1(---=n n n c c c c C 也属于C ,则称该(n,k )码为循环码。 该码在结构上有另外的限制,即一个码字任意循环移位的结果仍是一个有效码字。其特点是:(1)可以用反馈移位寄存器很容易实现编码和伴随式的计算;(2)由于循环码有很多固有的代数结构,从而可以找

卷积码实验报告

卷积码实验报告 篇一:卷积码实验报告 实验五信道编解码() 本章目标 掌握数字频带传输系统调制解调的仿真过程掌握数字频带传输系统误码率仿真分析方法 5.1实验目的 1. 使用MATLAB进行卷积码编/译码器的仿真。 2. 熟练掌握MATLAB软件、语句。 3. 了解卷积码编/译码器的原理、知识。 5.2实验要求 1. 编写源程序、准备测试数据。 2. 在 MATLAB环境下完成程序的编辑、编译、运行,获得程序结果。如果结果有误, 应找出原因,并设法更正之。 5.3 实验原理 (一)卷积码编码器 1. 连接表示 卷积码由3个整数n,k,N描述。k/n也表示编码效率(每编码比特所含的信 N称为约束长度,息量);但n与线性分组码中的含义不同,不再表示分组或码子长度; 表示在编码移位寄存器中k元组的级数。卷积码不同于分组码的一个重要特征就是编码器的记忆性,即卷积码编码过程中产生的n元组,不仅是当前输入k元组的函数,而且

还是前面N?1个输入k元组的函数。实际情况下,n和k经常取较小的值,而通过N的变化来控制编码的能力和复杂性。 下面以图1中的卷积码编码器为例介绍卷积码编码器。该图表示一个约束长度 K?3的(2,1)卷积译码器,模2加法器的数目为n?2,因此,编码效率k/n?1/2。 在每个输入比特时间上,1位信息比特移入寄存器最左端的一级,同时将寄存器中原有比特均右移一级,接着便交替采样两个模2加法器,得到的码元就是与该输入比特相对应的分支字。对每一个输入信号比特都重复上述采样过程。 图1卷积码编码器(编码效率1/2,K?3) 用于描述反馈移位寄存器实现循环码时所使用的生成多项式也可用户描述卷积码编码器的连接。应用n个生成多项式描述编码的移位寄存器与模2加法器的连接方式,n个生成多项式分别对应n个模2加法器,每个生成多项式不超过K?1阶。仍以图 1中的编码器为例,用生成多项式g1(X)代表上方连接,g2(X)代表下方连接,则有: g1(X)?1?X?X2g2(X)?1?X 2 多项式中的最低阶项对应于寄存器的输入级。输出序

信息论实验报告李红莲实验一

信息论基础 实验报告 专业:电子信息工程 姓名: 班级/学号:电信1002/ 指导老师:李红莲 实验一:信息熵、信道容量的计算 一、实验目的 掌握使用计算机计算信息熵、信道容量的方法。 二、实验原理 1.参照教材(焦瑞莉等编著《信息论基础教程》)第14页式(2-16)理解信息熵的定义 2.参照教材(焦瑞莉等编著《信息论基础教程》)第68页式(3-15)理解信道容量的定义 三、实验方法与实验步骤 (一)参照教材第215页信源熵程序建立文件entropy.m (二)建立文件exercise2_3_1.m通过调用entropy.m计算教材第69页练习2.3(1)(参考答案:0.81比特) (三)参照教材第215页离散无记忆信道容量的迭代计算程序建立文件channelcap.m (四)建立文件exercise3_2_b.m通过调用channelcap.m计算教材第92页练习3.2(b)(参考答案:0.0817比特) 四.源程序代码 1)function H=entropy(P,r) if(~isempty(find(P<=0))) error('Not a prob.Vector,negative component'); end if(abs(sum(P)-1)>10e-10) error('Not aprob vetor,component do not add up to 1'); end H=(sum(-P.*log2(P)))/(log2(r)+eps); clc; H=entropy([1/4,3/4],2 2)function [CC,Paa]=channelcap(P,k)

信息论与编码自学报告09266

《信息论与编码》课程自学报告 题目:《信息论与编码》自学报告 学号: 姓名: 任课教师:黄素娟 联系方式: 二零17年 1月 10日

第一部分 阐述“第四章 信息率失真函数”主要内容 1、基本概念 失真函数与平均失真度 平均失真度 在离散情况下,信源X ={a1,a2,…ar} ,其概率分布p(x)=[p(a1),p(a2),…,p(ar)] ,信宿Y = {b1,b2,…bs} 。若已知试验信道的传递概率为p(bj/ai)时,则平均失真度为: 1 1 ()(,)()(/)(,) r s i j i i j XY i j D p ab d a b p a p b a d a b === =∑∑∑ 凡满足保真度准则---平均失真度D D0的试验信通称D 失真许可的试验信道。 失真函数 假如某一信源X ,输出样值为xi ,xi {a1,…an},经过有失真的信源编码器,输出Y ,样值为yj ,yj {b1,…bm}。如果xi =yj ,则认为没有失真;如果xi yj ,那么就产生了失真。失真的大小,用一个量来表示,即失真函数d(xi ,yj),以衡量用yj 代替xi 所引

起的失真程度。一般失真函数定义为 最常用的失真函数 前三种失真函数适用于连续信源,后一种适用于离散信源。 信息率失真函数的定义 互信息取决于信源分布和信道转移概率分布。当p(xi)一定时,互信息I是关于p(yj/xi) 的U型凸函数,存在极小值。在上述允许信道PD中,可以寻找一种信道pij,使给定的信源p(xi)经过此信道传输后,互信息I(X;Y)达到最小。该最小的互信息就称为信息率失真函数R(D),即 单位:bit/信源符号 对于离散无记忆信源,R(D)函数可写成

最新信息论与编码第五章答案

5.1 设信源1 234567()0.20.190.180.170.150.10.01X a a a a a a a p X ????=???? ???? (1) 求信源熵H(X); (2) 编二进制香农码; (3) 计算平均码长和编码效率. 解: (1) 7 21222222()()log () 0.2log 0.20.19log 0.19 0.18log 0.180.17log 0.170.15log 0.150.1log 0.10.01log 0.012.609/i i i H X p a p a bit symbol ==-=-?-?-?-?-?-?-?=∑ (3) 7 1 ()0.230.1930.1830.1730.153 0.140.0173.141 ()()/ 2.609 3.14183.1% i i i K k p x H X H X K R η===?+?+?+?+?+?+?====÷=∑ 5.2 对习题5.1的信源编二进制费诺码,计算编码效率. 解:

5.3对信源编二进制和三进制 哈夫曼码,计算各自的平均码长和编码效率. 解: 二进制哈夫曼码: x i p(x i)编码码字k i s61 s50.610 s40.391 s30.350 s20.261 x10.20102 x20.191112 x30.1800003 x40.1710013 x50.1500103 s10.111 x60.1001104 x70.01101114 三进制哈夫曼码: x i p(x i)编码码字k i s31 s20.540 s10.261 x10.2221 x20.190002 x30.181012 x40.172022

信息论报告

马尔科夫信源熵的研究

第1章引言 第1章引言 信息论是20世纪40年代后期从长期通讯实践中总结出来的一门学科,是专门研究信息的有效处理和可靠传输的一般规律的科学。信息是系统传输和处理的对象,它载荷于语言、文字、数据、图像、影视、信号等之中,是研究信息处理和传输的规律,首先要对信息进行定量的描述,即信息的度量,这是信息论研究的出发点。但要对通常含义下的信息(如知识、情报、消息等)给出一个统一的度量是困难的,因为它涉及主观和客观两个标准,而迄今为止最成功、应用最广泛的是建立在概率模型基础上的信息度量,进而建立在此种信息量基础上的信息论成功的解决了信息处理和可靠传输中的一系列理论问题。信息论也是马尔科夫链的一个很重要的应用领域。 在信息论的发展过程中,Shannon作了很大贡献,他于1948年发表了一篇具有里程碑性质的论文——“通信的数学理论",这是世界上首次将通讯过程建立了数学模型的论文,这篇论文和他于1949年发表的另一篇论文一起,奠定了现代信息论的基础。熵是信息论的基本概念之一,它表示信源的平均不确定,有些物理学家甚至认为信息论就是熵的理论,熵率是一种极限熵,它描述了信源平均不确定性的一种变化趋势,在此基础上,许多科学家又采取了不同的研究途径进一步发展了信息论。 1

马尔科夫信源熵的研究 2 第2章 马尔科夫信源及其熵的求解 2.1 马尔科夫过程概述 马尔科夫过程是一类常见的,重要的随机过程,它有着极为深厚的理论基础,如拓扑学、函数论、泛函分析、近世代数和几何学。又有着广泛的应用空间,其主要应用于排队论,存储模型,更新模型,信息理论和数学计算等方面。由于马尔科夫过程在物理学、生物科学、信息理论、自动控制、工程技术及数值计算等方面起到的异乎寻常的作用,使得人们越来越重视马尔科夫过程的理论及其应用的研究。这一类随机过程的特点是:当过程在时刻靠所处的状态已知,则过程在靠以后所处状态与过程“以前所处状态无关,这个特性叫无后效性,也叫做马尔科夫性。通俗地说,就是“已知现在,将来和过去无关”。若马尔科夫过程(){},X t t T ∈的状态空间S 为R 中的可列集,则称(){},X t t T ∈为马尔科夫链。若T 为可列离散集,则称(){},X t t T ∈为离散参数马尔科夫链;若T 为连续的,则称(){},X t t T ∈为连续参数马尔科夫链。本文主要研究离散参数马尔科夫链,其严格数学定义将在后文给出。 自1907年苏联数学家A .A .Markov 引出马尔科夫链的概念,并开始研究以来,世界各国数学家对马尔科夫链的研究可以说盛久不衰。如研究有限或可数马尔科夫链,研究马尔科夫链及随机稳定性,以及对马尔科夫链基础知识的研究。 熵定理是信息论中最基本的定理,也称为Shannon .McMillan .Breiman 定理,亦称作渐近均分割性(AEP)。渐近均分割性首先是由Shannon 在1948年的开创性论文中进行了论述,他证明了有限齐次遍历马氏信源熵密度依概率收敛于常数,随后,就有许多数学家将此定理做了推广,McMillan 证明了有限平稳遍历信源的相对熵密度平均收敛于常数,其实这个常数就是熵率。Chuang .K .L 将定理推广到可数字母表情形,证明了平稳遍历信源几乎处处收敛于其熵率,Mayml ,Perez 和Kieffer 证明了当序列连续取值且遍历时的1L 收敛性,Barron 和Orey 证明了实值遍历过程的几乎处处收敛性,Algoet 和Cover 给出了Shannon .McMillan .Breiman 定理的三明治证法。

信息论实验报告

实验报告 学院:专业:班级: 姓名:学号:实验日期: 实验名称: 实验一:唯一可译码判别准则的代码实现 实验二:霍夫曼编码的代码实现 实验目的: 实验一: 1.进一步熟悉唯一可译码判别准则; 2.掌握C 语言字符串处理程序的设计和调试技术。 实验二: 1.进一步熟悉Huffman 编码过程; 2.掌握C 语言递归程序的设计和调试技术。 实验仪器: 装有visual studio 2010 的电脑一台 实验原理: 实验一: 根据唯一可译码的判别方法,利用数据结构所学的知识,定义字符串数据类型并利用指针进行编程来实现算法。 算法:1、考察 C 中所有的码字,若Wi 是Wj 的前缀,则将对应的后缀作为一个尾随后缀码放入集合Fi+1 中; 2、考察C 和Fi 俩个集合,若Wi ∈C 是Wj∈F 的前缀或Wi ∈F 是Wj∈C 的前缀,则将相应的后缀作为尾随后缀码放入集合Fi+1 中; 3、F=∪Fi 即为码C 的尾随后缀集合; 4、若F 中出现了C 中的元素,算法终止,返回假(C 不是唯一可译码);否

则若F 中没有出现新的元素,则返回真。 实验二: 1.将q 个信源符合按概率大小递减排列; 2.用“0,1”码符号分别代表概率最小的两个信源符号,并将这两个概率最小的信源符号合并成一个,从而得到只包含q-1 个符号的新信源,称为缩减信源s 1; 3.把缩减信源s1的符号仍按概率大小递减次序排列,再将其最后两个概率最小的信源符号分别用“0”和“1”码符号表示,并且合并成一个符号,这样又形成了q-2 个信源符号的缩减信源s 2; 4.依次继续下去,直至信源符号最后只剩下两个信源符号为止,将这最后两个信源符号分别用二元码符号“0”和“1”表示; 5.然后从最后一级缩减信源开始,进行回溯,就得到各信源符号所对应的码符号序列,即对应的码字。 实验内容与步骤: 实验一: 1.已知:信源符号数和码字集合C; 2.输入:任意的一个码,码字的个数和每个具体的码字在运行时从键盘输入; 3.输出:判决(是唯一可译码/不是唯一可译码);循环(若继续判决则输入1 循环判决,否则输入0 结束运行)。 实验二: 1. 输入:信源符号个数r、信源的概率分布P; 2. 输出:每个信源符号对应的Huffman 编码的码字。 实验数据: 实验一源代码: #include #include char c[100][50]; char f[300][50]; int N,sum=0; int flag; void patterson(char c[],char d[]) { int i,j,k; for(i=0;;i++)

信息论与编码习题与答案第五章

5-10 设有离散无记忆信源}03.0,07.0,10.0,18.0,25.0,37.0{)(=X P 。 (1)求该信源符号熵H(X)。 (2)用哈夫曼编码编成二元变长码,计算其编码效率。 (3)要求译码错误小于3 10-,采用定长二元码达到(2)中的哈夫曼编码效率,问需要多少个信源符号连在一起编? 解:(1)信源符号熵为 symbol bit x p x p X H i i i /23.203.0log 03.007.0log 07.010.0log 10.018.0log 18.025.0log 25.037.0log 37.0) (log )()(222222=------=-=∑ (2) 1 x 3x 2x 6 x 5x 4x 0.370.250.180.100.070.03 01 1 1 1 1 0.10 0.20 0.38 0.62 1.00 000111 10110001001 符号概率 编码 该哈夫曼码的平均码长为 符号 码元/3.2403.0407.0310.0218.0225.0237.0)(=?+?+?+?+?+?==∑i i i K x p K 编码效率为9696.03.223 .2)(=== K X H η (3)信源序列的自信息方差为 2 2 22) (792.0)]([)]()[log ()(bit X H x p x p X i i i =-=∑σ 7.00696.90)() (==+= εε η得,由X H X H

5 3 22210 2.6110)7.00(92.70)(?=?=≥-δεσX L 由切比雪夫不等式可得 所以,至少需要1.62×105个信源符号一起编码才能满足要求。 5-12 已知一信源包含8个消息符号,其出现的概率 }04.0,07.0,1.0,06.0,05.0,4.0,18.0,1.0{)(=X P ,则求: (1)该信源在每秒内发出1个符号,求该信源的熵及信息传输速率。 (2)对这8个符号作哈夫曼编码,写出相应码字,并求出编码效率。 (3)采用香农编码,写出相应码字,求出编码效率。 (4)进行费诺编码,写出相应码字,求出编码效率。 解:(1)信源熵 symbol bit x p x p X H i i i /55.204.0log 04.007.0log 07.01.0log 1.006.0log 06.005.0log 05.04.0log 4.018.0log 18.01.0log 1.0) (log )()(22222222=--------=-=∑ 信息传输速率为 s b i t R /55.2= (2)哈夫曼编码: 2 x 8 x 6 x 5x 4x 3x 1x 7x 0.40.180.10.10.070.060.05 0.04符号概率 码字 1 0.09 1 0.130.19 1 0.23 1 0.37 0 10.6 1 1.001 001 01100000100 0101 0001000011 信源各符号的对应哈夫曼曼码字如下: 0.1 0.18 0.4 0.05 0.06 0.1 0.07 0.04 011 001 1 00010 0101 0000 0100 00011 平均码长为

相关文档