霍夫曼信源编码实验报告.docx

PAGE

PAGE 7

实验1:霍夫曼信源编码综合设计【实验目的】通过本专题设计,掌握霍夫曼编码的原理和实现方法,并熟悉利用C语言进行程序设计,对典型的文本数据和图像数据进行霍夫曼编解码。

【预备知识】1、熵的概念,霍夫曼编码原则2、数据结构和算法设计3、C(或C++)编程语言

【实验环境】设备:计算机一台软件:C程序编译器

【设计要求】根据霍夫曼编码原则,利用C语言设计并实现霍夫曼编码和解码程序,要求能够对给出的典型文本数据和图像数据进行霍夫曼编解码,并计算相应的熵和压缩比。

【实验原理】Huffman编码属于熵编码的方法之一,是根据信源符号出现概率的分布特性而进行的压缩编码。Huffman编码的主要思想是:出现概率大的符号用长的码字表示;反之,出现概率小的符号用短的码字表示。Huffman编码过程描述:1. 初始化: 将信源符号按出现频率进行递增顺序排列,输入集合L;2. 重复如下操作直至L中只有1个节点:(a) 从L中取得两个具有最低频率的节点,为它们创建一个父节点; (b) 将它们的频率和赋给父结点,并将其插入L;3. 进行编码 : 从根节点开始,左子节点赋予1,右节点赋予0,直到叶子节点。

【基本定义】熵和平均编码符号长度熵是信息量的度量方法,它表示某一事件出现的概率越小,则该事件包含的信息就越多。根据Shannon理论,信源S的熵定义为,其中是符号在S中出现的概率;表示包含在中的信息量,也就是编码所需要的位数假设符号编码后长度为li (i=1,…,n),则平均编码符号长度L为:压缩比设原始字符串的总长度为Lorig位,编码后的总长度为Lcoded位,则压缩比R为 R = (Lorig - Lcoded)/ Lorig

【例子】有一幅40个象素组成的灰度图像,灰度共有5级,分别用符号A、B、C、D和E表示,40个象素中出现灰度A的象素数有15个,出现灰度B的象素数有7个,出现灰度C的象素数有7个等等,如表1所示。如果用3个位表示5个等级的灰度值,也就是每个象素用3位表示,编码这幅图像总共需要120位。表1 符号在图像中出现的数目符 号ABCDE出现的次数157765根据Shannon理论,这幅图像的熵为H(S) = (15/40)?(40/15)+(7/40)?(40/7)+???+(5/40)?(40/5)=2.196平均编码符号长度L为(15/40)*1+(7/40)*3+(7/40)*3+(6/40)*3+(5/40)*3 = 2.25根据霍夫曼编码原则可以得到如下的霍夫曼编码表。表2 霍夫曼编码举例符号出现的次数log2(1/pi)分配的代码所需 位数A15(0.375)1.4150115B7(0.175)2.514501121C7(0.175)2.514501021D6(0.150)2.736900118E5(0.125)3.000000015因而,这副图采用霍夫曼编码的压缩比R为1.3333:1(120:90)。霍夫曼码的码长虽然是可变的,但却不需要另外附加同步代码。例如,码串中的第1位为0,那末肯定是符号A,因为表示其他符号的代码没有一个是以0开始的,因此下一位就表示下一个符号代码的第1位。同样,如果出现“110”,那么它就代表符号D。如果事先编写出一本解释各种代码意义的“词典”,即码簿,那么就可以根据码簿一个码一个码地依次进行译码。

【实验步骤】(16学时)根据提供的示例Huffman编译码器源程序,利用VC++6.0进行编译生成可执行文件,阅读并运行程序。用Microsoft Office Vision分别画出Huffman编码和译码程序流程图,写出用到的主要数据结构并加以说明。在Huffman编码器合适位置加入4个函数:calcProbability,calcEntropy,calcAvgSymbolLength,calcCompressionRatio,分别计算信源各符号出现的概率、信源的熵、平均编码符号长度以及压缩比。(自定义函数的参数)分析霍夫曼编译码码的计算复杂度,定量说明Huffman编码和译码哪种操作更耗时?设计中遇到的问题,怎样解决问题的。在设计过程中的心得体会。

思考题:霍夫曼编码是否具有唯一性?个人对霍夫曼编码方式的不足之处的思考以及怎么样在进行压缩时避免这些问题。分析霍夫曼编码对文本数据以及图象数据的编码效率,观察与对应信源概率分布的关系。参考静止图像压缩编码国际标准JPEG,为了提高对图像编码的效率,通常要在霍夫曼编码之前进行什么操作?。

【实验结果】

信源压缩编码 编程c语言,霍夫曼信源编码实验报告.docx相关推荐

  1. 信息论霍夫曼编码c语言,霍夫曼编码

    <信息论与编码>课程实验报告 姓 名 学 号 单 位 专 业 2014 年 12 月 4 日 实验一 一.实验目的 1.理解信源编码的意义: 2.掌握霍夫曼编码的方法及计算机实现: 二.实 ...

  2. c语言霍夫曼函数,使用C语言详解霍夫曼树数据结构

    1.基本概念 a.路径和路径长度 若在一棵树中存在着一个结点序列 k1,k2,--,kj, 使得 ki是ki+1 的双亲(1<=i 从 k1 到 kj 所经过的分支数称为这两点之间的路径长度,它 ...

  3. c语言图形时钟编程,C语言图形时钟课程设计实验报告.doc

    C语言图形时钟课程设计实验报告.doc 目录 1.系统功能要求 . 2. 数据结构设计及 说明 . 3.程序结构(画流程图) . 4.各模块的功能 . 5.试验结果(包括输入数据和输出结果) . 6. ...

  4. 电力系统matlab实验报告,基于matlab语言计算电力系统暂态稳定仿真程序实验报告.docx...

    基于matlab语言计算电力系统暂态稳定仿真程序实验报告 BeijingJiaotongUniversity 电力系统分析 暂态稳定分析实验 学院:电气工程学院 班级:xxxxxxxx 学号:xxxx ...

  5. C语言霍夫曼编码压缩,数据结构大作业——哈夫曼编码压缩BMP格式文件

    数据结构大作业--哈夫曼编码压缩BMP格式文件 首先需要了解BMP图像格式 BMP图像格式详解 其次需要了解哈夫曼编码如何对BMP文件进行压缩 哈夫曼压缩与解压缩 编程部分 使用的头文件 虽然这里用了 ...

  6. 数据结构哈夫曼树实验报告

    实验目的及要求 目的:熟练掌握二叉树应用(Huffman编码)的基本算法实现:进一步理解哈夫曼树的逻辑结构和存储结构,进一步提高使用理论知识指导解决实际问题的能力 要求:(1).假设文档内容从键盘输入 ...

  7. 定时器计数器实验C语言程序,单片机定时器计数器实验报告.docx

    单片机定时器计数器实验报告 单片机定时器计数器实验报告 篇一:单片机计数器实验报告 计数器实验报告 ㈠ 实验目的 1. 学习单片机内部定时/计数器的使用和编程方法: 2. 进一步掌握中断处理程序的编程 ...

  8. 信息论霍夫曼编码c语言,霍夫曼编码C语言

    编译成功 /* Note:Your choice is C IDE */ #include #include #define N 15 #define M 2*N-1 typedef struct { ...

  9. 霍夫曼编码实验matlab,哈夫曼编码 MATLAB程序

    clc clear fid=fopen( 'C:\Users\yichao\Desktop\新建文本文档.txt');%打开 txt 文件 [zimu]=fscanf(fid, '%c'); %读取二 ...

最新文章

  1. 目标检测算法终结篇:YOLOv7(非正式版)正式开源
  2. Python正则表达式初识(二)
  3. python自带库处理excel-python处理excel之第三方库openpyxl
  4. vmos切换安卓版本_安卓之中还能运行安卓!神奇的安卓虚拟机App
  5. 转:canvas--放大镜效果
  6. 前端切换视图_前端架构 101(五):从 Flux 进化到 Model-View-Presenter
  7. linux下计算目录文件和,统计Linux 中文件和文件夹/目录的数量(示例代码)
  8. 打造专业化FTTD布线产品解决方案
  9. 正交性原理与维纳霍夫(正则)方程
  10. 实现写邮箱html页面,用html写的简单的邮箱登陆界面
  11. 谷歌浏览器截取长图 (不用安装插件)
  12. Flask实现简单搜索功能
  13. Transformer如何用于视频?最新「视频Transformer」2022综述
  14. MySQL高可用安装
  15. 把时间当作朋友 读后感
  16. 4-VIV-Android之PopupWindow
  17. Java --- JUC之CAS
  18. 【HTML5学习笔记】HTML5:生活要对我下手了吗
  19. XMind7主题大变样
  20. User already has more than 'max_user_connections' active connections

热门文章

  1. php中递归怎么用,PHP中递归的实现实例详解
  2. 模板 - 数论 - (新)
  3. basic code
  4. 夺命雷公狗---linux NO:19 linux下的vi交换文件
  5. xtrabackup部分备份数据库 Partial Backups
  6. HttpWebRequest自动登录网站并获取网站内容(不包含验证码的网站)
  7. 腾讯开源大规模X光预训练模型及代码 |MICCAI 2020
  8. 开源/免费数学书大合集:微积分、线代、数分、抽代…数学教授分类整理,精心推荐...
  9. YOLACT++:目前最热门的实时实例分割开源库
  10. OpenARK:惊艳的增强现实、虚实交互开源库