注:以下三种编码比较都是在二进制下讨论的,其它进制下的编码情况可以与二进制下的情况类比。

1香农编码

概念:
香农编码是是采用信源符号的累计概率分布函数来分配字码的。香农编码是根据香农第一定理直接得出的,指出了平均码长与信息之间的关系,同时也指出了可以通过编码使平均码长达到极限值。香农第一定理是将原始信源符号转化为新的码符号,使码符号尽量服从等概分布,从而每个码符号所携带的信息量达到最大,进而可以用尽量少的码符号传输信源信息。

香农编码属于不等长编码,通常将经常出现的消息变成短码,不经常出现的消息编成长码,从而提高通信效率。 香农编码严格意义上来说不是最佳码,它是采用信源符号的累计概率分布函数来分配码字。

编码过程:

(1)、将m个信源符号按照概率大小来进行递减排序。p1>=p2>=>=pn>=pm

(2)、计算出对应符号在排序下的累加概率

(3)、按照Ki=⌈-logP(ai) ⌉(其中⌈ ⌉表示向上取整)来确定码字长度Ki。

(4)、将累加概率Pi以二进制数的形式表示。

(5)、取对应Pi的二进制数小数点后Ki位来构成对应信源符号的编码。

例如:

信源符号ai

符号概率p(ai)

累加概率Pi

-logp(ai)

码字长度Ki

码字

a1

0.20

0

2.32

3

000

a2

0.19

0.2

2.39

3

001

a3

0.18

0.39

2.47

3

011

a4

0.17

0.57

2.56

3

100

a5

0.15

0.74

2.74

3

1011

a6

0.10

0.89

3.34

4

1110

a7

0.01

0.99

6.64

7

1111110

计算编码效率:

先算出平均码字长度K=∑p(ai)*ki=3.14

可得编码效率为:H(X)/K*100%=83.1%。

可见香农码的编码效率是比较低的、多余度较大且实用性不强。但是它依据编码定理编码,故具有重要的理论意义。

2 费诺编码

概念:
1949年费诺(R.M. Fano)提出了一种编码方法,称之为费诺码或Fano码。它属于概率匹配编码,但一般也不是最佳的编码方法,只有当信源的概率分布呈现

P(ai)=s^li(i=1,2,…,r)

分布形式的条件下,才能达到最佳码的性能 。

编码过程:

(1)、将m个信源符号按照概率大小来进行递减排序。p1>=p2>=>=pn>=pm

(2)、将这一组信源符号分成概率之和尽可能相等的两组(两组的概率差尽可能小)。

(3)、将上面一组编码为0,下面一组编码为1(反之亦可)。

(4)、重复(2)、(3)步骤,直到不能分组。

(5)、依次写出所编的码字。

例如:

信源符号ai

符号概率p(ai)

分组1

分组2

分组3

分组4

码字

码长

a1

0.20

0

0

00

2

a2

0.19

0

1

0

010

3

a3

0.18

0

1

1

011

3

a4

0.17

1

0

10

2

a5

0.15

1

1

0

110

3

a6

0.10

1

1

1

0

1110

4

a7

0.01

1

1

1

1

1111

4

计算编码效率:

先算出平均码字长度K=∑p(ai)*ki=2.74

可得编码效率为:H(X)/K*100%=95.3%。

可见费诺编码比较适合于对分组概率相等或者比较接近的信源编码,此种编码考虑了信源的统计特性 ,使概率较大的信源符号能对应码长较短的码字,较之香农编码一定提升了编码效率。

但它也有一定的缺点。它不一定是最佳码。当信源符号较多时,有一些符号概率比较接近,使分组变多码长也随之增加。

3 哈夫曼编码

概念:
哈夫曼编码(Huffman Coding),又称霍夫曼编码,是一种编码方式,哈夫曼编码是可变字长编码(VLC)的一种。Huffman于1952年提出一种编码方法,该方法完全依据字符出现概率来构造异字头的平均长度最短的码字,有时称之为最佳编码,一般就叫做Huffman编码(有时也称为霍夫曼编码)。

编码过程:

(1)、将m个信源符号按照概率大小来进行递减排序。p1>=p2>=>=pn>=pm

(2)、把概率最小的两个信源符号分为一组上面一个编码0,下面一个编码1,之后将这两个概率相加并且与剩下的概率重新排序。

要注意,在重新排序时,如果已编码的概率相加之后发现与一个或多个未编码概率相等,要将相加以后的概率排在这些相等概率的最上面。这样编码虽然不会改变平均码长,但是可以大大降低编码后的码方差,提升编码质量。

(3)、重复(2)步骤,直到所有的信源符号都已经编码完成。

(4)、按照编码路径由左到右返回,得到各码字。

例如:

信源符号ai

符号概率p(ai)

编码过程

码字

码长

a1

0.20

0.20

0.26

0.35

0.39

0.61}0

1.0

10

2

a2

0.19

0.19

0.20

0.26

0.35}0

0.39}1

11

2

a3

0.18

0.18

0.19

0.20}0

0.26}1

000

3

a4

0.17

0.17

0.18}0

0.19}1

001

3

a5

0.15

0.15}0

0.17}1

010

3

a6

0.10

}0

0.11}1

0110

4

a7

0.01

}1

0111

4

计算编码效率:

先算出平均码字长度K=∑p(ai)*ki=2.72

可得编码效率为:H(X)/K*100%=96.0%。

可见哈夫曼码与香农码相比它的平均码长比较小,编码效率更高,信息传输速率大。并且当信息源各符号出现的概率很不平均的时候,哈夫曼编码的效果才明显。

它也有一定的缺点。当信息源各符号出现的概率较为平均的时候,哈夫曼编码的效果不明显。
并且哈夫曼编码必须精确地统计出原始文件中每个符号的出现频率,如果没有这些精确的统计,将达不到预期的压缩效果。霍夫曼编码通常要经过两遍操作,第一遍进行统计,第二遍产生编码,所以编码速度相对慢。而且由于编码长度不统一,硬件实现有难度。由于编码长度可变。因此译码时间较长,使得霍夫曼编码的压缩与还原相当费时。 哈夫曼所有位都是合在一起的,如果改动其中一位就可以使其数据变得面目全非。

总结

由上述比较可知:

1、香农码的拓展性较好有唯一的编码,虽然效率不高且实用性不大可以对其他编码方法有很好的理论指导意义。

2、费诺码和哈夫曼码的编码方法不唯一。

3、就编码效率而言,哈夫曼码>费诺码>香农码。

4、三种编码都考虑了信源的统计特性,使经常出现的信源符号对应较短的码字,使平均码长缩短,实现了信源压缩。

2022P02014139杨智关于香农编码、哈夫曼编码和费诺编码的比较相关推荐

  1. java实现.费诺编码_使用递归算法编写的费诺编码

    内容与设计思想 按照教材方式建立数据成员变量.设有离散无记忆信源X,P(X).二进制费诺编码为:1.将信源符号按概率从大到小的顺序排列2.将信源分成两组――按两组概率之差为最小分.3.上面一组编码为0 ...

  2. 费诺编码实验报告c语言,信息论编码实验报告费诺编码附源代码..doc

    信息论编码实验报告费诺编码附源代码. 中南大学 信息论与编码实验报告 选 题: 费诺编码 学生姓名: 学 号: 专业班级: 通信工程 指导老师: 学 院: 信息科学与工程学院 时 间: 2015 目录 ...

  3. java实现.费诺编码_信息论编码实验报告费诺编码附源代码

    信息论编码实验报告费诺编码附源代码 中南大学信息论与编码实验报告选 题: 费诺编码 学生姓名: 学 号: 专业班级: 通信工程 指导老师: 学 院: 信息科学与工程学院 时 间: 2015 目录1.实 ...

  4. 信源编码的代码实现 (香农编码、费诺编码、哈夫曼编码、游程编码、算术编码)

    文章目录 香农编码 费诺编码 哈夫曼编码 C++版 C语言版 游程编码 算术编码 香农编码 (1) 将信源消息符号按其出现的概率大小依次排列 p1 ≥ p2 ≥ - ≥ pn (2) 确定满足下列不等 ...

  5. 信息论与编码-python实现三种编码(香农编码,费诺编码,赫夫曼编码)

    香农编码,费诺编码,赫夫曼编码(python实现) 开始参考了网上其他人的代码,但后来都发现要么代码有错误,要么输出结果不符合自己的预期,于是就重新实现了一下,代码仍存在一些小问题,但是能够满足作业要 ...

  6. 香农费诺编码 c语言实现,信息论课程设计(香农、费诺编码)

    <信息论课程设计(香农.费诺编码)>由会员分享,可在线阅读,更多相关<信息论课程设计(香农.费诺编码)(34页珍藏版)>请在人人文库网上搜索. 1.华北科技学院信息论基础课程设 ...

  7. 香农费诺编码 c语言实现,对于香农编码、费诺编码和哈夫曼编码,编码方法惟一的是()。...

    问题标题 对于香农编码.费诺编码和哈夫曼编码,编码方法惟一的是(). 2019-8-15来自ip:15.170.14.227的网友咨询 浏览量:533 手机版 问题补充: 题目类型:[填空题] 对于香 ...

  8. java实现.费诺编码_香农费诺编码的matlab实现.doc

    香农费诺编码的matlab实现.doc 信息论与编码实验香农费诺编码的matlab实现学院班级-姓名学号摘要 用预先规定的方法将文字.数字或其他对象编成数码,或将信息.数据转换成规定的电脉冲信号.编码 ...

  9. 香农码字matlab,香农--费诺编码的matlab实现

    香农--费诺编码的matlab实现 信息论与编码实验香农 --费诺编码的 matlab 实现学院:------班级:-----姓名:----学号:----摘要:用 预 先 规 定 的 方 法 将 文 ...

最新文章

  1. R语言生成数据及其95%置信区间数据(或者其它区间)、使用geom_ribbon函数为ggplot2图像手动添加置信区间的阴影区域using geom_ribbon to create shaded
  2. 数据库分页存储过程(5)
  3. vue垂直布局_vue实现长图垂直居上 vue实现短图垂直居中
  4. java之spring mvc之拦截器
  5. 系统集成资质培训 - 2013下半年系统集成资质申报及集成资质考试
  6. python雷达图怎么做_使用Python绘制雷达图
  7. 计算机组成原理————P1 软硬件发展
  8. android windowsoftinputmode 状态栏冲突,android:windowSoftInputMode属性
  9. javaweb编辑器ckeditor配置_ckeditor编辑器在java项目中配置
  10. VGS--网络三维互动软件技术
  11. sublime text豆沙绿,护眼自制主题
  12. Python123 货币转换Ⅰ
  13. STM32烧写程序:ST-link V2调试下载器实物和连接方式
  14. 使用原型骨架创建Maven项目时遇到Could not transfer metadata org.apache.maven.plugins的解决方案
  15. iOS 自动布局 Autolayout 报错:Unable to simultaneously satisfy constraints.
  16. 谁说chatGPT要取代数据分析师?
  17. 辽宁特色名吃:哈鱼饼子与辣丝驴肉
  18. 新松GCR 系列协作机器人 用户手册 (软件部分)
  19. 在Windows中开启Wifi热点共享,无需第三方工具
  20. 编辑部的故事:后厂村有没有生活?

热门文章

  1. Windows 版本的 B站 开源了?
  2. 【计算机网络】数据链路层精选习题2(含联考真题)
  3. python画图颜色随机_用python画随机颜色随机大小随机位置的正方形
  4. Thales安全解决方案:怎么提高国家网络安全的关键步骤
  5. linux下freerdp编译,linux下安装freerdp连接windows远程桌面的好软件软件
  6. 实记JLink-V8刷固件方法
  7. log4j.properties详解
  8. 特斯拉扔出了一片“二向箔”
  9. linux终端窗口如何切换快捷键,【linux基础】Ubuntu下的终端多标签切换快捷键
  10. IntelliJ IDEA中的disconnect和terminate