1、香农编码方法

香农第一定理指出了平均码长与信源之间的关系,同时也指出了可以通过编码使平均码长达到极限值,这是一个很重要的极限定理。

香农第一定理指出,选择每个码字的长度Ki满足下式:

Ki= []——取整

即:-log2pi≤Ki≤1-log2pi

就可以得到这种码。这种编码方法称为香农编码。

例:设无记忆信源的概率空间为:

计算各符号的码字长度:

K1= log2=1

K2= log4=2

K3= K4 =log8=3

用图示码树,可得各自的码字:

u1:(0),u2:(10),u3:(110),u4:(111)

信息熵H(U):

信源符号的平均码长:

编码效率

对于这种信源,香农编码是最佳编码。码树达到满树。

l香农编码法多余度稍大,实用性不大,但有重要的理论意义。

编码方法如下:

将信源消息符号按其出现的概率大小依次排列

p(u1)≥p(u2)≥…≥p(un)

确定码长Ki(整数):

Ki= []——取整

为了编成唯一可译码,计算第i个消息的累加概率

将累加概率Pi变换成二进制数。

取pi二进制数的小数点后Ki位即为该消息符号的二进制数。

例:

信源符号ui

符号概率p(ui)

累加概率Pi

-log p(ui)

码字长度Ki

码字

u1

0.4

0

1.32

2

00

u2

0.3

0.4

1.73

2

01

u3

0.2

0.7

2.32

3

101

u4

0.05

0.9

4.3

5

11100

u5

0.05

0.95

4.3

5

11101

以i= 3为例,计算各符号的码字长度:

K3 =

[-log0.2] = 3

累加概率P4= 0.7——0.10110… ——101

由图,这些码字没有占满所有树叶,所以是非最佳码。

平均码长:

编码效率:

为了提高编码效率,首先应达到满树;例如把u4u5换成A、B这些前面的节点,就可减小平均码长。所以不应先规定码长,而是由码树来规定码字,可得更好的结果。

2、费诺编码方法

费诺编码属于概率匹配编码,但它不是最佳的编码方法。编码过程如下:

⑴将信源符号接概率值分为两大组,使两个组的概率之和近于相同,并对各组赋予一个二进制码元“0”和“1”。

⑵将每一大组的信源符号进一步再分成两组,使划分后的两个组的概率之和近于相同,并又赋予两个组一个二进制符号“0”和“1”。

⑶如此重复,直至每个组只剩下一个信源符号为止。

信源符号所对应的码字即为费诺码。

例:

信源符号

ui

符号概率

p(ui)

第1次

分组

第2次

分组

第3次

分组

码字

码长

u 1

0.4

0

0

00

2

u 4

0.05

1

0

010

3

u5

0.05

1

011

3

u 2

0.3

1

0

10

2

u 3

0.2

1

11

2

该费诺码的平均码长

编码效率:

显然,费诺码比香农码的平均码长小,编码效率高。其实这样编码的效率还不是最高的,现用另一种分割方法:

信源符号

ui

符号概率

p(ui)

第1次

分组

第2次

分组

第3次

分组

第4次

分组

码字

码长

u 1

0.4

0

0

1

u 2

0.3

1

0

10

2

u 3

0.2

1

0

110

3

u 4

0.05

1

0

1110

4

u5

0.05

1

1111

4

该费诺码的平均码长

编码效率:

可见编码效率又有所提高。事实上这已是最佳编码,就是说编码效率已不能再提高。但这样试探寻找分割方法总不是办法,因而赫夫曼提出一种编码方法,并证明这种编码在块码中已是最佳的。

3、哈夫曼编码方法

哈夫曼编码也是用码树来分配各符号的码字。费诺码是从树根开始,把各节点分给某子集;若子集已是单点集,它就是一片叶而作为码字。而赫夫曼编码是先给每一符号一片树叶,逐步合并成节点直到树根。

哈夫曼编码的步骤如下:

将信源消息符号按其出现的概率大小依次排列

p(u1)≥p(u2)≥…≥p(un)

⑵取两个概率最小的字母分别配以0和1两码元,并将这两个概率相加作为一个新字母的概率,与未分配的二进符号的字母重新排队。

对重排后的两个概率最小符号重复步骤⑵的过程。

⑷不断继续上述过程,直到最后两个符号配以0和1为止。

从最后一级开始,向前返回得到各个信源符号所对应的码元序列,即相应的码字。

例:

给定离散信源如下:

平均码长:

编码效率

哈夫曼编码方法得到的码并非是唯一的。非唯一的原因:

·每次对信源缩减时,赋予信源最后两个概率最小的符号,用0和1是可以任意意的,所以可以得到不同的哈夫曼码,但不会影响码字的长度。

·对信源进行缩减时两个概率最小的符号合并后的概率与其它信源符号的概率相同时,这两者在缩减信源中进行概率排序,其位置放置次序是可以任意的,故会得到不同的哈夫曼码。此时将影响码字的长度,一般将合并的概率放在上面,这样可获得较小的码方差。

例:给定离散信源如下:

有两种哈夫曼编码方法如下图所示:

平均码长:

因为这两种码有相同的平均码长,所以有相同的编码效率,但每个信源符号的码长却不相同。

在这两种不同的码中,选择哪个码好呢?我们引进码字任度Ki偏离平均码长K的方差σ2,即

分别计算上例中两种码的方差

可见,第一种编码方法的方差要小许多。所以,对于有限长的不同信源序列,用第一种方法所编得的码序列长度变化较小。因此相对来说选择第一种编码方法要更好些。

由此得出,在哈夫曼编码过程中,当缩减信源的概率分布重新排列时,应使合并得来的概率和尽量处于是高的位置。这样可使合并的元素重复编码次数减少,使短码得到充分利用

从以上实例中可以看出,哈夫曼码具有以下三个特点:

⑴哈夫曼码的编码方法保证了概率大的符号对应于短码,概率小的符号对应于长码,即pi>pj有Ki<Kj,充分利用了短码。

⑵缩减信源的最后二个码字总是最后一位码元不同,前面各位码元相同(二元编码情况),从而保证了哈夫曼是即时码。

⑶每次缩减信源的最长两个码字有相同的码长。

这三个特点保证了所得的哈夫曼码一定是最佳码。

香农编码的gui编码_1、香农编码方法相关推荐

  1. 数据处理方法-算术编码(香农算法、java编码实现)

    一.算术编码起源 早在1948年,香农就提出将信源符号依美出现的概率降序排序,用符号序列累计概率的二进值作为对信源的编码,并从理论上论证了它的优越性.1960年,Peter Elias 发现无需排序, ...

  2. 图像压缩编码——香农/哈夫曼编码

    图像压缩编码--香农/哈夫曼编码 一.信息熵 二.香农-范诺编码 2.1 香农-范诺编码简述 2.2 特例详解 三.哈夫曼编码 3.1 哈夫曼编码简述 3.2 特例详解 四.RGB图像压缩 Endin ...

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

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

  4. 天津理工大学 信息论与编码实验3 离散信源编码-香农编码

    一.实验目的 离散无记忆信源是一种最简单且最重要的信源,可以用完备的离散型概率空间来描述.本实验通过对给定的信源的进行相应的编码,加深对离散无记忆信源的无失真编码的理解. 掌握香农编码原理: 二.实验 ...

  5. 香农编码 哈夫曼编码 费诺编码的比较

    香农编码 哈夫曼编码 费诺编码的比较 文章目录 哈夫曼编码 编码步骤 例子 优点 缺点 费诺编码 编码步骤 例子 优点 缺点 香农编码 编码步骤 例子 优点 缺点 参考 备注:本文除了例子与数据,其他 ...

  6. 香农编码与Huffman编码之间的对比

    目录 一.[上机目的] 二.[环境] 三.[上机原理] 四.[上机内容] 五.设计思路 5.1霍夫曼编码特点 5.2霍夫曼编码原理 5.3二进制哈夫曼编码过程 5.4计算结果 5.5霍夫曼编码的MAT ...

  7. CN_@物理层@信噪比@分贝单位@奈奎斯特定理@香农公式@常用编码方式(曼彻斯特编码/差分曼彻斯特编码)波形图

    文章目录 CN_@信噪比@分贝单位@奈奎斯特定理@香农公式@常用编码方式(曼彻斯特编码/差分曼彻斯特编码)波形图 通信基础概念 数据 (data) 信号 (signal) 基带信号 模拟信号 (ana ...

  8. Huffman编码、Shannon编码、Fano编码——《小王子》文本压缩与解压

    一.实验要求: 1 采用熵编码对<小王子>文本进行压缩,生成压缩文件: 2 将压缩文件解压,并与源文件比较: 3 从香农编码.Huffman编码.Fano编码中选择一种: 4 计算编码效率 ...

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

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

  10. 详解34家银行对公账号编码规则及其编码分析

    1.工商银行 账号位数19位: 地区代码4位(13为安徽)+网点号4位+账户性质应用号2位(09基本户,19一般户,29专户,39临时户)+账号顺序号7位+校验码2位 编码分析攻略: 中国工商银行对公 ...

最新文章

  1. 【LintCode: 3. 统计数字】算法题解析
  2. 软件开发有多少种方式
  3. 消息称微软计划收购GitHub,估值超50亿美元
  4. 【渝粤教育】电大中专药物化学基础_1作业 题库
  5. Java 中 finally 与 return 的执行顺序详解
  6. evil twin_Evil-Twin框架:用于测试WiFi安全性的工具
  7. Java Servlet JSP
  8. 缓存 ASP.NET 页
  9. 公安部:正研究出台***犯罪司法解释
  10. 客户端浏览器Chrome过早断开连接导致Nginx报400错误的解决办法
  11. ASP.NET之MVC 微信公众号授权给第三方平台的技术实现流程一(获取第三方平台access_token)...
  12. iOS开发之Xcode开发快捷键大全
  13. javascript怎么判断对象为空
  14. 吾以为,最适合入门的语言是Java
  15. Httpx:针对HTTP的安全研究工具
  16. 读取JPG图片的Exif属性(三) - Exif属性读取GPS信息代码(C/C++实现)
  17. win11彻底删除hao123的方法
  18. 计算机超级工作站,【八核高性能计算超级计算机CAECADCAM有限元超级工作站】.docx...
  19. java 删除本地文件夹或文件
  20. 50岁程序员还奋战在一线,软件测试能干到多少岁?有年龄限制吗?

热门文章

  1. 性能测试专项 - 屏幕绘制性能-帧率测试 FPS测试
  2. OPPOR9m官方固件刷机教程
  3. 人工智能项目案例:AI+企业智能化管理
  4. 华为认证HCDA免费公开课课表及其交流群公告
  5. 小学计算机说课稿,小学计算机说课稿_相关文章专题_写写帮文库
  6. PHP刷步数,微信支付宝修改步数刷步源码/带卡密功能PHP程序
  7. TwinCAT 3 系统程序
  8. 夏普SHARP AR-2818 一体机驱动
  9. java自定义对象集合排序
  10. SQL注入之注入检测总结