信息论与编码课程设计报告,统计信源熵与香农编码

合集下载

信息论与编码课程设计--统计信源熵与哈夫曼编码

信息论与编码课程设计--统计信源熵与哈夫曼编码

信息论与编码课程设计--统计信源熵与哈夫曼编码信息论与编码课程设计信息论与编码课程设计报告设计题目:统计信源熵与哈夫曼编码专业班级学号学生姓名指导教师教师评分2015年 3 月 25 日1信息论与编码课程设计目录一、设计任务与要求...................................................................... ...........................................3 二、设计思路...................................................................... .......................................................3 三、设计流程图...................................................................... (5)四、程序运行及结果...................................................................... ...........................................6 五、心得体会...................................................................... . (8)参考文献...................................................................... (9)附录:源程序...................................................................... .. (10)2信息论与编码课程设计一、设计任务与要求1.1设计目的信息论与编码是信息、通信、电子工程专业的基础,对理论研究和工程应用均有重要的作用。

2024版信息论与编码教案

2024版信息论与编码教案

应用:算术编码在图像、视频和音频压 缩等领域具有广泛应用,如JPEG 2000、 H.264等标准中采用了算术编码技术。 与霍夫曼编码相比,算术编码具有更高 的压缩比和更好的性能表现。
06
多媒体信息压缩编码
多媒体信息压缩编码的基本概念与原理
压缩编码的必要性
多媒体数据量大,存储和传输成本高,需通过压缩编码降低数据 量。
典型编码方法
03
详细介绍几种典型的编码方法,如香农编码、哈夫曼编码、算
术编码等。
教学目标与要求
掌握信息论与编码的基本理论
通过学习,使学生能够深入理解信息论与编 码的基本概念和原理。
培养编码实践能力
通过案例分析、实验等环节,提高学生的编 码实践能力。
培养创新能力
鼓励学生探索新的编码方法,培养创新思维 和解决问题的能力。
编码分类
包括无损编码和有损编码,前者 可以完全恢复原始信息,后者则 会损失部分信息以换取更高的压 缩比。
霍夫曼编码的原理与应用
• 原理:霍夫曼编码是一种可变长度编码方法,根据信源符 号出现的概率来构造最优编码。它利用概率大的符号用较 短的码字表示,概率小的符号用较长的码字表示,从而实 现平均码长最短。
信息论的基本概念
信息
信息是事物运动状态或存在方式的不确定性的描述。
信息系统
由信源、信道、信宿等组成的传输和处理信息的系统。
信息论
研究信息的传输、处理、存储和检索等过程中的基本 理论和方法。
信息的度量与性质
信息的度量
用概率和统计的方法对信息进行量化,如香农 信息熵、互信息等。
信息的性质
包括普遍性、客观性、可传递性、可共享性、 可压缩性等。
压缩编码的可能性

信息论与编码实验报告

信息论与编码实验报告

NANCHANG UNIVERSITY信息论与编码实验报告(2018年11月27日)学院:信息工程学院系电子信息工程系专业班级:学生姓名:学号:指导教师:目录实验一自信息量和熵源.............................................................................................. 实验二准对称信道容量.............................................................................................. 实验三费诺不等式...................................................................................................... 实验四香农编码.......................................................................................................... 实验五费诺编码.......................................................................................................... 实验六霍夫曼编码......................................................................................................实验一自信息量和熵源一、实验要求1、画出I=-的函数图;2、画出H(p)=-p-(1-p)函数图。

二、实验原理及理论分析自信息量:一个事件的自信息量就是对其不确定性的度量。

信息论与编码2-信源及信源熵1

信息论与编码2-信源及信源熵1
9
信息论与编码-信源及信源熵
又例如对离散化的平面图像来说,从 空间上来看是一系列离散的符号,而空间 每一点的符号(灰度)又都是随机的,由此 形成了不同的图像.所以我们可以把一般 信源输出的消息看作为时间或空间上离 散的一系列随机变量,即随机矢量.这样,信 源 描的述输,其出中可N可用为N维有随限机正矢整量数(或x1,可x2,数…的xN)无来 限值.
25
信息论与编码-信源及信源熵
2.2.2 离散信源熵
前面定义的自信息是指某一信源发出某一消 息所含有的信息量.所发出的消息不同,它们所含 有的信息量也就不同.所以自信息I(ai) 是一个 随机变量,不能用它来作为整个信源的信息测度.
我们定义自信息的数学期望为信源的平均信 息量,即
H ( X ) E [ I ( X ) ]p ( x i) I ( x i) p ( x i) lo p ( x i) g
7
信息论与编码-信源及信源熵
离散信源的数学模型就是离散型的概率空间:
X P
x1
p(x1)
x2
xn

p(x2) p(xn)
其中概率p(xi)(i=1,2,…,n)称为符号xi的先验概 率,应满足∑p(xi)=1
它表示信源可能取的消息(符号)只有n 个:x1,x2,…xn,而且每次必定取其中一个.
当xi和yj相互独立时,有p(xi,yj)=p(xi)p(yj) 于是有
I(xi,yj)= I(xi)+ I(yj)
24
信息论与编码-信源及信源熵
条件自信息量: 当xi和yj相互联系时,在事件yj 出现的条件下,xi 的
自信息量称为条件自信息量,定义为 I(xi|yj)=-logp(xi|yj)

信息论与编码实验报告

信息论与编码实验报告

实验一 绘制二进熵函数曲线(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 nX 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)的计算。

信息论与编码课程设计

信息论与编码课程设计

信息论与编码课程设计报告设计题目:统计信源熵、香农编码与费诺编码专业班级:XXXXXXXXXXXX姓名:XXXXXXXXXXXX学号:XXXXXXXXXXXX指导老师:XXXXXXXXXXXX成绩:时间:2015年3月31日目录一、设计任务与要求 (2)二、设计思路 (2)三、设计流程图 (5)四、程序及结果 (7)五、心得体会 (11)六、参考文献 (12)附录 (13)一、 设计任务与要求1. 统计信源熵要求:统计任意文本文件中各字符(不区分大小写)数量,计算字符概率,并计算信源熵。

2. 香农编码要求:任意输入消息概率,利用香农编码方法进行编码,并计算信源熵和编码效率。

3. 费诺编码要求:任意输入消息概率,利用费诺编码方法进行编码,并计算信源熵和编码效率。

二、 设计思路1、统计信源熵:统计信源熵就是对一篇英文文章中的i 种字符(包括标点符号及空格,英文字母不区分大小写)统计其出现的次数count i (),然后计算其出现的概率()p i ,最后由信源熵计算公式:1()()log ()ni i n H x p x p x ==-∑算出信源熵()H x 。

所以整体步骤就是先统计出文章中总的字符数,然后统计每种字符的数目,直到算出所有种类的字符的个数,进而算出每种字符的概率,再由信源熵计算公式计算出信源熵。

在这里我选择用Matlab 来计算信源熵,因为Matlab 中系统自带了许多文件操作和字符串操作函数,其计算功能强大,所以计算信源熵很是简单。

2、香农编码信源编码模型:信源编码就是从信源符号到码符号的一种映射f ,它把信源输出的符号i a 变换成码元序列i x 。

1,2,...,,i i N f a i q x =→:1:{,...,}q S s a a ∈ 信源 12{,...,}li i i i i X x x x = 码元1{,...,}1,2,...,i q S a a i N ∈=1,2,...,N i q =1:{,...,}r X x x x ∈ 码符号N 次扩展信源无失真编码器凡是能载荷一定的信息量,且码字的平均长度最短,可分离的变长码的码字集合都可以称为最佳码。

信息论与编码课程设计 河南理工大学

一设计目的信息论与编码是我们电子信息工程的一门重要的专业课,通过对本次课程设计,学习将学到的理论知识用于实践,同时也学习了用软件编写程序,进一步对本课程知识的巩固和理解。

学习分析问题,解决问题的方法和途径,提高对本专业的学习兴趣。

二设计任务与要求(1)统计信源熵要求:统计任意文本文件中各字符(不区分大小写)数量,计算字符概率,并计算信源熵。

(2)哈夫曼编码要求:任意输入消息概率,利用哈夫曼编码方法进行编码,并计算信源熵和编码效率。

三理论简介3.1通信系统的模型通信系统的模型通信系统的性能指标主要是有效性、可靠性、安全性和经济性,通信系统优化就是使这些指标达到最佳,除了经济性,这些指标正是信息论的研究对象,可以通过各种编码处理来使通信系统的性能最优化。

根据信息论的各种编码定理和上述通信系统的指标,编码问题可以分为3类:信源编码、信道编码和加密编码。

3.1.1 信源编码由于信源符号之间存在分布不均匀和相关性,使得信源存在冗余度,信源编码的主要任务就是减少冗余度,提高编码效率。

信源编码的基础是信息论中的两个编码定理:无失真编码定理和限失真编码定理。

前者适用于离散信源或数字信号;后者主要用于连续信源或模拟信号。

本次课程设计就是利用的无失真信源编码。

3.1.2 信道编码信源编码器的作用:把信源发出的消息变换成由二进制码元(或多进制码元)组成的代码组,这种代码组就是基带信号。

同时通过信源编码可以压缩信源的冗余度,以提高通信系统传输消息的效率。

信源译码器的作用:把信道译码器输出的代码组变换成信宿所需要的消息形式,它的作用相当于信源编码器的逆过程。

3.1.3 加密编码加密编码是研究如何隐蔽消息中的信息内容,以便在传输过程中不被窃听,提高通信系统的安全性。

3.2 信源熵3.2.1 信源的描述和分类& 按信源在时间和幅度上的分布情况离散信源:文字、数据、电报连续信源:语音、图像& 按发出符号的数量单个符号信源:指信源每次只发出一个符号代表一个消息符号序列信源:指信源每次发出一组含二个以上符号的符号序列代表一个消息 & 按符号间的关系无记忆信源有记忆信源3.2.2 离散信源熵& 自信息量:随机事件的自信息量定义为其概率对数的负值,即在信息论中常用的对数底是2,信息量的单位为比特(bit);& 联合自信息量两个消息xi ,yj 同时出现的联合自信息量:& 条件自信息量在事件yj 出现的条件下,随机事件xi 发生的条件概率为p(xi / yj) ,则它的条件自信息量定义为条件概率对数的负值:& 离散信源熵为信源中各个符号不确定度的数学期望,即单位为:比特/符号 或者 比特/符号序列。

信息论与编码课程实验报告

福建农林大学计算机与信息学院信息工程类信息论与编码课程实验报告实验项目列表实验名称1:信源建模一、实验目的和要求(1)进一步熟悉信源建模;(2)掌握MATLAB程序设计和调试过程中数值的进制转换、数值与字符串之间的转换等技术。

二、实验内容(1)假设在一个通信过程中主要传递的对象以数字文本的方式呈现。

(2)我们用统计的方式,发现这八个消息分别是由N1,N2,…,N8个符号组成的。

在这些消息是中出现了以下符号(符号1,符号2,…,符号M)每个符号总共现了(次数1,次数2,…,次数M)我们认为,传递对象的信源模型可表示为:X为随机变量(即每次一个字符);取值空间为:(符号1,符号2,…,符号M);其概率分布列为:(次数1/(N1+…+N8),…,次数M/( N1+…+N8))三、实验环境硬件:计算机软件:MATLAB四、实验原理图像和语声是最常用的两类主要信源。

要充分描述一幅活动的立体彩色图像,须用一个四元的随机矢量场X(x,y,z,t),其中x,y,z为空间坐标;t 为时间坐标;而X是六维矢量,即表示左、右眼的亮度、色度和饱和度。

然而通常的黑白电视信号是对平面图像经过线性扫描而形成。

这样,上述四元随机矢量场可简化为一个随机过程X(t)。

图像信源的最主要客观统计特性是信源的幅度概率分布、自相关函数或功率谱。

关于图像信源的幅度概率分布,虽然人们已经作了大量的统计和分析,但尚未得出比较一致的结论。

至于图像的自相关函数,实验证明它大体上遵从负指数型分布。

其指数的衰减速度完全取决于图像类型与图像的细节结构。

实际上,由于信源的信号处理往往是在频域上进行,这时可以通过傅里叶变换将信源的自相关函数转换为功率谱密度。

功率谱密度也可以直接测试。

语声信号一般也可以用一个随机过程X(t)来表示。

语声信源的统计特性主要有语声的幅度概率分布、自相关函数、语声平均功率谱以及语声共振峰频率分布等。

实验结果表明语声的幅度概率分布可用伽玛(γ)分布或拉普拉斯分布来近似。

《信息论与编码》课程教学大纲

《信息论与编码》课程教学大纲一、课程基本信息课程代码:16052603课程名称:信息论与编码英文名称:Information Theory and Coding课程类别:专业课学时:48学分:3适用对象:信息与计算科学考核方式:考试先修课程:数学分析、高等代数、概率论二、课程简介《信息论与编码》是信息科学类专业本科生必修的专业理论课程。

通过本课程的学习,学生将了解和掌握信息度量和信道容量的基本概念、信源和信道特性、编码理论等,为以后深入学习信息与通信类课程、为将来从事信息处理方面的实际工作打下基础。

本课程的主要内容包括:信息的度量、信源和信源熵、信道及信道容量、无失真信源编码、有噪信道编码等。

Information Theory and Coding is a compulsory professional theory course for undergraduates in information science. Through this course, students will understand and master the basic concepts of information measurement and channel capacity, source and channel characteristics, coding theory, etc., lay the foundation for the future in-depth study of information and communication courses, for the future to engage in information processing in the actual work.The main contents of this course include: information measurement, source and source entropy, channel and channel capacity, distortion-free source coding, noisy channel coding, etc。

信息论与编码课程设计报告统计信源熵与香农编码

信息论与编码课程设计报告统计信源熵与香农编码信息论与编码课程设计报告设计题目:统计信源熵与香农编码专业班级电信 12-06学号学生姓名指导教师教师评分3 月 30日目录一、设计任务与要求 (2)二、设计思路 (2)三、设计流程图 (3)四、程序运行及结果 (4)五、心得体会 (6)参考文献 (7)附录:源程序 (8)一、设计任务与要求1.统计信源熵要求:统计任意文本文件中各字符(不区分大小写)数量,计算字符概率,并计算信源熵。

2.香农编码要求:任意输入消息概率,利用香农编码方法进行编码,并计算信源熵和编码效率。

二、设计思路本次课程设计中主要运用C 语言编程以实现任务要求,分析所需要的统计量以及相关变量,依据具体公式和计算步骤编写语句,组成完整C 程序。

1、信源熵定义:信源各个离散消息的自信息量的数学期望为信源的平均信息量,一般称为信源的信息熵,也叫信源熵或香农熵,有时称为无条件熵或熵函数,简称熵,记为H ()。

计算公式:)(log )(-)x (i i i x p x p H ∑=2、香农编码过程:(1)将信源消息符号按其出现的概率大小依次排列为n p p ≥⋅⋅⋅≥≥21p(2)确定满足下列不等式的整数码长i K 为1)()(+-<≤-i i i p lb K p lb(3)为了编成唯一可译码,计算第i 个消息的累加概率∑-==11)(i k k i a p P(4)将累计概率i P 变换成二进制数。

(5)取i P 二进制数的小数点后i K 位即为该消息符号的二进制码字。

三、设计流程图1、统计信源熵开始计算字符概率输出结束2、香农编码开始计算信源熵计算编码效率输出结束四、程序运行及结果1、统计信源熵2、香农编码五、心得体会经过这次课程设计明显的体会到知识匮乏所带来的种种问题,首先是对C语言编程的不熟练,课程知识在与C语言的结合中没有清晰的思路,具体实现程序语言的编写较为困难。

在程序的调试中出现的问题无法及时快速的解决,有些错误甚至无法找到合适的解决方法,以至于不断的修改程序,浪费了大量的时间。

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

信息论与编码课程设计报告设计题目:统计信源熵与香农编码专业班级电信 12-06学号学生姓名指导教师教师评分2015年 3 月 30日目录一、设计任务与要求 (2)二、设计思路 (2)三、设计流程图 (3)四、程序运行及结果 (4)五、心得体会 (6)参考文献 (7)附录:源程序 (8)一、设计任务与要求1.统计信源熵要求:统计任意文本文件中各字符(不区分大小写)数量,计算字符概率,并计算信源熵。

2.香农编码要求:任意输入消息概率,利用香农编码方法进行编码,并计算信源熵和编码效率。

二、设计思路本次课程设计中主要运用C 语言编程以实现任务要求,分析所需要的统计量以及相关变量,依据具体公式和计算步骤编写语句,组成完整C 程序。

1、信源熵定义:信源各个离散消息的自信息量的数学期望为信源的平均信息量,一般称为信源的信息熵,也叫信源熵或香农熵,有时称为无条件熵或熵函数,简称熵,记为H ()。

计算公式:)(log )(-)x (i i i x p x p H ∑=2、香农编码过程:(1)将信源消息符号按其出现的概率大小依次排列为n p p ≥⋅⋅⋅≥≥21p(2)确定满足下列不等式的整数码长i K 为1)()(+-<≤-i i i p lb K p lb(3)为了编成唯一可译码,计算第i 个消息的累加概率∑-==11)(i k k i a p P(4)将累计概率i P 变换成二进制数。

(5)取i P 二进制数的小数点后i K 位即为该消息符号的二进制码字。

三、设计流程图1、统计信源熵开始读取给定文件判断文件是否打开否并且不为空是统计文本字符,直关闭文件至文本字符读完。

统计同一字符(不分大小写)出现的次数计算字符概率计算信源熵输出结束2、香农编码开始输入概率计算累加概率计算码字计算码长计算平均码长计算信源熵计算编码效率输出结束四、程序运行及结果1、统计信源熵2、香农编码五、心得体会通过这次课程设计明显的体会到知识匮乏所带来的种种问题,首先是对C 语言编程的不熟练,课程知识在与C语言的结合中没有清晰的思路,具体实现程序语言的编写较为困难。

在程序的调试中出现的问题无法及时快速的解决,有些错误甚至无法找到合适的解决方法,以至于不断的修改程序,浪费了大量的时间。

在设计期间出现的问题还是非常多的,要求熟悉相关软件的操作使用,需要不断的搜集所需的各种资料,及时解决遇到的问题。

课程设计很是考察个人能力和团队合作协调能力,在面对自己所不熟悉甚至不了解的问题时,是怎样一步步的设计完成给定的任务,及时有成效的解决面临的问题的。

从整体的分析设计到后面语句变量的敲定最终完成课题是对自己极其有益的锻炼,从中收获的不仅是知识上的,也是学习经验的积累和思维能力的提升,虽然一次课程设计任务不是那么繁重,可是认真去完成其中的一个个细节也是一种难得的体验。

参考文献[1]曹雪虹,张宗橙.《信息论与编码》清华大学出版社.2009.[2]贾宗璞,许合利.《C语言程序设计》人民邮电出版社.2010.[3]盛骤,谢式千,潘承毅.《概率论与数理统计》[M].高等教育出版.1989.附录:源程序1、统计信源熵#include <stdio.h>#include <math.h>#include <string.h> /*memcpy所需头文件*/#include <stdlib.h>#define N 1000 /*宏定义N,此处N代表读取文本文件最大字符数为1000*/int main(void){char s[N],M[N];int i = 0,j=0,n=0,L=0;int len, num[27] = {0};double result=0,p[27]= {0};FILE *f;char temp[N];/********打开'文件.txt'*******/if(!(f = fopen("D:\\VC++6.0\\text518.txt","rb"))){ printf("文件打开失败!\n");return 0;}while(!feof(f)) /*feof检查文件是否结束。

如结束,否则返回0.*/ {len=fread(temp,1,1000,f);/*fread返回读取的字符个数。

从f锁指定的文件中读取长度为1的1000个数据项,存到temp所指向的内存区。

返回所读取的数据个数。

*/ }fclose(f); /*关闭f所指向的文件*/temp[len]='\0'; /*将temp数组元素清空('\0'空字符)*/memcpy(s,temp,sizeof(temp)); /*从temp中拷贝sizeof个字节到目标s中。

sizeof返回一个对象或者类型所占的内存字节数*//*****计算各个字母、空格出现数目*****/for(i=0; i<strlen(s); i++){if(s[i]==' ')num[26]++;elseif(s[i]>='a'&&s[i]<='z')num[s[i]-97]++;elseif(s[i]>='A'&&s[i]<='Z')num[s[i]-65]++;}printf("文本文件中各字符(不区分大小写)数量:\n");for(j=0; j<26; j++){M[j]=num[j];printf("%4c:%d\t",j+65,M[j]); /*输出格式,%3c在该字符前在空三个空格*/L++;if(L==5) /*输出格式,每行五个字母*/{printf("\n");L=0;}}printf("空格:%d\t",num[26]);/*****计算各个字母、空格出现概率****/printf("\n文本文件中各个字符概率:\n");for(i=0; i<26; i++){p[i]=(double)num[i]/strlen(s); printf("%3c:%f\t",i+65,p[i]);n++;if(n==5) /*输出格式,每行五个字母概率*/{printf("\n");n=0;}}p[26]=(double)num[26]/strlen(s);printf("空格:%f\t",p[26]);printf("\n");/**********计算信源熵**********/for(i=0; i<27; i++){if (p[i]!=0)result=result+p[i]*log(p[i])*1.433;/*信源熵,I(x)=-logp(x)*/}result=-result;printf("信源熵为:%f",result);printf("\n");return 0;}2、香农编码#include <stdio.h>#include <math.h>#include <stdlib.h>#define max_CL 10 /*最大容量的代码的长度*/#define max_PN 6 /*输入序列的个数*/typedef float datatype;typedef struct SHNODE {datatype pb; /*第i个消息符号出现的概率*/datatype p_sum; /*第i个消息符号累加概率*/int kl; /*第i个消息符号对应的码长*/int code[max_CL]; /*第i个消息符号的码字*/struct SHNODE *next;}shnolist;datatype sym_arry[max_PN]; /*序列的概率*/void pb_scan(); /*得到序列概率*/void pb_sort(); /*序列概率排序*/void valuelist(shnolist *L); /**/void codedisp(shnolist *L);void pb_scan(){int i;datatype sum=0;printf("input %d possible!\n",max_PN);for(i=0;i<max_PN;i++){ printf(">>");scanf("%f",&sym_arry[i]);sum=sum+sym_arry[i];}/*判断序列的概率之和是否等于1scanf()对float数的缺足0.99<sum<1.0001出现的误差是允许的*/if(sum>1.0001||sum<0.99){ printf("sum=%f,sum must (<0.999<sum<1.0001)",sum);pb_scan();}}/*选择法排序*/void pb_sort(){int i,j,pos;datatype max;for(i=0;i<max_PN-1;i++){max=sym_arry[i];pos=i;for(j=i+1;j<max_PN;j++)if(sym_arry[j]>max){max=sym_arry[j];pos=j;}sym_arry[pos]=sym_arry[i];sym_arry[i]=max;}}void codedisp(shnolist *L){int i,j;shnolist *p;datatype hx=0,KL=0; /*hx KL存放序列编码后的平均码字的结果*/p=L->next;printf("num\tgailv\tsum\t-lb(p(ai))\tlenth\tcode\n");printf("\n");for(i=0;i<max_PN;i++){printf("a%d\t%1.3f\t%1.3f\t%f\t%d\t",i,p->pb,p->p_sum,-3.332*log10(p->pb),p->kl);j=0;for(j=0;j<p->kl;j++)printf("%d",p->code[j]);printf("\n");hx=hx-p->pb*3.332*log10(p->pb); /*计算消息序列的熵*/KL=KL+p->kl*p->pb; /*计算平均码字*/p=p->next;}printf("H(x)=%f\tKL=%f\nR=%fbit/code",hx,KL,hx/KL); /*计算编码效率*/}shnolist *setnull(){ shnolist *head;head=(shnolist *)malloc(sizeof(shnolist));head->next=NULL;return(head);}shnolist *my_creat(datatype a[],int n){shnolist *head,*p,*r;int i;head=setnull();r=head;//87for(i=0;i<n;i++){ p=(shnolist *)malloc(sizeof(shnolist));p->pb=a[i];p->next=NULL;r->next=p;r=p;}return(head);}void valuelist(shnolist *L){shnolist *head,*p;int j=0;int i;datatype temp,s;head=L;p=head->next;temp=0;while(j<max_PN){p->p_sum=temp;temp=temp+p->pb;p->kl=-3.322*log10(p->pb)+1;/**/{s=p->p_sum;for(i=0;i<p->kl;i++)p->code[i]=0;for(i=0;i<p->kl;i++){p->code[i]=2*s;if(2*s>=1)s=2*s-1;else if(2*s==0)break;else s=2*s;}}j++;p=p->next;}}int main(void){shnolist *head;pb_scan();pb_sort();head=my_creat(sym_arry,max_PN); valuelist(head);codedisp(head);}。

相关文档
最新文档