实验三 哈夫曼编码
更新时间:2023-03-10 11:51:01 阅读量: 教育文库 文档下载
- 实验三中推荐度:
- 相关推荐
实验一 离散信源及其信息测度
一、实验目的
1、理解信源编码的意义; 2、熟悉 MATLAB程序设计;
3、掌握哈夫曼编码的方法及计算机实现;
二、实验原理
通信的根本问题是如何将信源输出的信息在接收端的信宿精确或近似的复制出来。为了有效地复制信号,就通过对信源进行编码,使通信系统与信源的统计特性相匹配。
若接收端要求无失真地精确地复制信源输出的信息,这样的信源编码即为无失真编码。即使对于一个小的时间段内,连续信源输出的信息量也可以是无限大的,所以对其是无法实现无失真编码的;而离散信源输出的信息量却可以看成是有限的,所以只有离散信源才可能实现无失真编码。
凡是能载荷一定的信息量,且码字的平均长度最短,可分离的变长码的码字集合都可以称为最佳码。为此必须将概率大的信息符号编以短的码字,概率小的符号编以长的码字,使得平均码字长度最短。
变字长编码的最佳编码定理:在变字长码中,对于概率大的信息符号编以短字长的码;对于概率小的信息符号编以长字长的码。如果码字长度严格按照符号概率的大小顺序排列,则平均码字长度一定小于俺任何顺序排列方式得到的码字长度。
哈夫曼编码就是利用了这个定理,讲等长分组的信源符号,根据其概率分布采用不等长编码。概率大的分组,使用短的码字编码;概率小的分组,使用长的码字编码。哈夫曼编码把信源按概率大小顺序排列,并设法按逆次序分配码字的长度。在分配码字的长度时,首先将出现概率最小的两个符号相加,合成一个概率;第二步把这个合成的概率看成是一个新组合符号的概率,重复上述做法,直到最后只剩下两个符号的概率为止。完成以上概率相加顺序排列后,再反过来逐步向前进行编码。每一步有两个分支,各赋予一个二进制码,可以对概率大的编为0码,概率小的编为1码。反之亦然。
哈夫曼编码的具体步骤归纳如下:
1. 统计n个信源消息符号,得到n个不同概率的信息符号。 2. 将这n个信源信息符号按其概率大小依次排序:
p(x1) ≥ p(x2)≥ …≥ p(xn)
3. 取两个概率最小的信息符号分别配以0和1两个码元,并将这两个概率
相加作为一个新的信息符号的概率,和未分配的信息符号构成新的信息
符号序列。
4. 将剩余的信息符号,按概率大小重新进行排序。
5. 重复步骤3,将排序后的最后两个小概论相加,相加和与其他概率再排
序。 6. 如此反复重复n-2次,最后只剩下两个概率。
7. 从最后一级开始,向前返回得到各个信源符号所对应的码元序列,即相
应的码字,构成霍夫曼编码字。编码结束。
哈夫曼编码产生最佳整数前缀码,即没有一个码字是另一个码字的前缀,因此哈夫曼编码是唯一码。
编码之后,哈夫曼编码的平均码长为:
K?哈夫曼编码的效率为:
?p(x)Kii?1ni
??信源熵H(x)=
平均码长K三、实验内容
实验一、对信源进行哈夫曼编码,并计算编码效率。
1、按照实验一中的方法生成一10维离散无记忆信源X的概率分布。 2、对信源概率进行排序,(排序可用sort命令)。
3、取两个概率最小的信息符号分别配以0和1两个码元,并将这两个概率相加作为一个新的信息符号的概率,和未分配的信息符号构成新的信息符号序列,(分配的0,1可另建一个向量保存)。
4、将剩余的信息符号,按概率大小重新进行排序。
5、重复步骤3,将排序后的最后两个小概论相加,相加和与其他概率再排
序(利用for循环)。
6、如此反复重复n-2次,最后只剩下两个概率。
7、从最后一级开始,向前返回得到各个信源符号所对应的码元序列,即相
应的码字,构成霍夫曼编码字。编码结束。 8、计算平均码长与编码效率。
实验二、查看huffmandict函数,了解该函数的用途,调用格式,利用该函数
对实验一中的数据进行编码,并比较两者结果。
实 验 三
实验离散信源及其信息测度 名称 课程信息论基础 名称 姓 学 姜圆香 专业、班级 信计11101班 名 号 班内实验地05 实验时间 2014.3.24 序号 点 实验一:对信源进行哈夫曼编码,并计算编码效率。 201106216 10教四楼 1、按照实验一中的方法生成一10维离散无记忆信源X的概率分布。 2、对信源概率进行排序,(排序可用sort命令)。 3、取两个概率最小的信息符号分别配以0和1两个码元,并将这两个概率相加作为一个新的信息符号的概率,和未分配的信息符号构成新的信息符号序列,(分配的0,1可另建一个向量保存)。 实 4、将剩余的信息符号,按概率大小重新进行排序。 验 5、重复步骤3,将排序后的最后两个小概论相加,相加和与其他概率再 。 内 排序(利用for循环) 6、如此反复重复n-2次,最后只剩下两个概率。 容 7、从最后一级开始,向前返回得到各个信源符号所对应的码元序列,即相应的码字,构成霍夫曼编码字。编码结束。 8、计算平均码长与编码效率。 实验二: 查看huffmandict函数,了解该函数的用途,调用格式,利用该函数对实验一中的数据进行编码,并比较两者结果。 实验一:编程实现哈夫曼编码 代码: m=rand(1,10) s=sum(m); p=m/s q=p; n=10; a=zeros(n-1,n); 生成一个n-1行n列的数组 for i=1:n-1 [q,l]=sort(q) ; a(i,:)=[l(1:n-i+1),zeros(1,i-1)] ; q=[q(1)+q(2),q(3:n),1]; end 实 验 过 程 及 结 果 分 析 for i=1:n-1 c(i,1:n*n)=blanks(n*n); end c(n-1,n)='1'; c(n-1,2*n)='0'; for i=2:n-1 c(n-i,1:n-1)=c(n-i+1,n*(find(a(n-i+1,:)==1))-(n-2):n*(find(a(n-i+1,:)==1))) ; c(n-i,n)='1' ; 在分支的第一个元素后补1 c(n-i,n+1:2*n-1)=c(n-i,1:n-1) ; c(n-i,2*n)='0' ; 在分支的第一个元素后补0 for j=1:i-1 c(n-i,(j+1)*n+1:(j+2)*n)=c(n-i+1,n*(find(a(n-i+1,:)==j+1)-1)+1:n*find(a(n-i+1,:)==j+1)); end end 完成Huffman编码 for i=1:n h(i,1:n)=c(1,n*(find(a(1,:)==i)-1)+1:find(a(1,:)==i)*n) ; ll(i)=length(find(abs(h(i,:))~=32)); 计算每一个Huffman码长 end l=sum(p.*ll); 计算平均码长 fprintf('\\n Huffman编码结果为:\\n'); h fprintf('\\n 编码的平均码长为:\\n'); l 实验结果: Huffman编码结果为: H= 1111 000 1010 110 1110 100 1011 011 010 001 编码的平均码长为: l = 3.1834 实验二:利用huffmandict函数实现编码 代码: y=p/sum(p) symbols = [1:10] [dict,avglen] = huffmandict(symbols,y) temp = dict; for i = 1:length(temp) temp{i,2} = num2str(temp{i,2}); end temp 实验结果: symbols = 1 2 3 4 5 6 7 8 9 10 dict = [ 1] [1x4 double] [ 2] [1x3 double] [ 3] [1x4 double] [ 4] [1x3 double] [ 5] [1x4 double] [ 6] [1x3 double] [ 7] [1x4 double] [ 8] [1x3 double] [ 9] [1x3 double] [10] [1x3 double] avglen = 3.1835 temp = [ 1] '1 1 1 1' [ 2] '0 0 0' [ 3] '1 0 1 0' [ 4] '1 1 0' [ 5] '1 1 1 0' [ 6] '1 0 0' [ 7] '1 0 1 1' [ 8] '0 1 1' [ 9] '0 1 0' [10] '0 0 1' 实验小结: 本次实验,在熟练掌握哈弗曼编码的理论知识后,还很大程度考验了我们的编程能力,将树结构的引入以及对树的各结点的赋值实现Huffman编码。虽然自己最后没有独立的把整个过程实现,而是查阅了相关资料,但是,如果遇到需要编码的地方,我完全可以在Matlab里面用Huffman函数来实现编码,同样达到目的。
temp = [ 1] '1 1 1 1' [ 2] '0 0 0' [ 3] '1 0 1 0' [ 4] '1 1 0' [ 5] '1 1 1 0' [ 6] '1 0 0' [ 7] '1 0 1 1' [ 8] '0 1 1' [ 9] '0 1 0' [10] '0 0 1' 实验小结: 本次实验,在熟练掌握哈弗曼编码的理论知识后,还很大程度考验了我们的编程能力,将树结构的引入以及对树的各结点的赋值实现Huffman编码。虽然自己最后没有独立的把整个过程实现,而是查阅了相关资料,但是,如果遇到需要编码的地方,我完全可以在Matlab里面用Huffman函数来实现编码,同样达到目的。
正在阅读:
实验三 哈夫曼编码03-10
川教版信息技术教案五年级上册 - 图文12-18
如何选监控摄像头及安装调试注意事项07-30
人教版小学五年级语文上学期期末试卷04-22
第三部分 简答题答题思路分考点指导06-03
教师改作风抓落实促发展个人自查材料03-08
XX集团《营销战略》03-08
小学教学工作情况汇报材料模板03-08
2015北京大学行政管理考研复习笔记 重点 课后题04-27
【实用】未来的想象作文7篇03-23
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 哈夫曼
- 编码
- 实验
- l论文题目参考题目
- 高三尖子生的地理笔记(值得参考!)
- 吕梁特色农业调研报告
- 企业战略管理
- (文综)揭阳一中2013届高二下学期第一次阶段考试
- 9—地铁行车调度员手册
- 严格执法与热情服务的内在紧密联系
- TS16949试题库(空)
- 检测频率相关规范要求
- 黑龙江省人民政府关于刑满释放解除劳教人员安置问题的若干规定
- 人教版七年级下册(2016部编版)语文11《台阶》教学设计
- 25岁女孩应该掌握的
- 第6章带传动和链传动
- 广东省技工学院和职业培训机构教师教育理论函授培训作业册答案
- 2012年公务员考试行测技巧辅导:特征型图形推理六大常考点
- 预防接种门诊各项制度 - 图文
- 第二届全国印刷行业职业技能大赛制版工题库
- 宽带数据制作流程
- 链条炉排故障排除与防范
- 区县长在区政府机构改革工作会议上的讲话