- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
编码理论实验报告实验一霍夫曼编码中信息熵和编码效率的实验
实验名称 实验一 霍夫曼编码中信息熵及编码效率的实验
一、 实验目的
1. 掌握霍夫曼编码中信息熵的定义、性质和计算;
2. 掌握霍夫曼编码中平均码字长度的定义和计算;
3. 掌握霍夫曼编码中编码效率的定义和计算;
4. 正确使用C语言实现霍夫曼编码中信息熵、平均码长和编码效率的求取。
二、实验内容
1. 熟练列出霍夫曼编码中信息熵、平均码长和编码效率各自的计算公式;
2. 正确使用C语言实现计算霍夫曼编码中信息熵、平均码长和编码效率的程序,并在Visual C++环境中验证。
三、 实验原理
1. 霍夫曼编码的基本原理
按照概率大小顺序排列信源符号,并设法按逆顺序分配码字字长,使编码的码字为可辨识的。
2. 平均码长:L=∑p(si)*li (单位为:码符号/信源符号)
其中,p(si)为信源si在q个信源中出现的概率,li为信源si的二进制霍夫曼编码。
3. 信息熵:H(S)=- ∑p(si) *log2 p(si) (单位为:比特/信源符号)
其中,p(si)为信源si在q个信源中出现的概率。
4. 编码效率:η= H(S)/ L
其中,H(S)为信息熵,L为平均码长。
四、 实验步骤:
1. Huffman编码示例如下图:
2. 根据Huffman编码的例子,用C语言完成计算霍夫曼编码中信息熵的程序的编写,并在Visual C++环境中验证;
3. 根据Huffman编码的例子,用C语言完成计算霍夫曼编码中平均码长的程序的编写,并在Visual C++环境中验证;
4. 根据Huffman编码的例子,用C语言完成计算霍夫曼编码中编码效率的程序的编写,并在Visual C++环境中验证;
实验程序:
/*********** 霍夫曼编码信息熵、平均码长及编码效率的计算 ************
//按照实验步骤的要求完成程序,正确计算霍夫曼编码的信息熵、
//平均码长以及编码效率,并通过printf函数将三者的计算结果
//打印出来
#includestdio.h
#includestring.h
#includemath.h
#define CH_Num 5 //信源符号个数
//主函数
void main()
{
//编程1:定义double型数组gailv存放各信源符号出现的概率
double gailv[CH_Num]={0.4,0.2,0.2,0.15,0.05};
//编程2:定义int型数组code_len存放各信源符号的霍夫曼编码
int code_len[CH_Num]={2,2,2,3,3};
//编程3:定义double型变量aver_Len、Hs和code_ratio,分别
//对应信息熵、平均码长及编码效率,并初始化为0
double aver_Len=0,Hs=0,code_ratio=0;
int i;
//编程4:利用for循环计算平均码长aver_Len
for(i=0;iCH_Num;i++)
aver_Len+=gailv[i]*code_len[i];
//编程5:利用for循环计算信息熵Hs
for(i=0;iCH_Num;++i)
Hs+=-(gailv[i]*(log(gailv[i])/log(2)));
//编程6:计算编码效率code_ratio
code_ratio=Hs/aver_Len;
//编程7:利用三条printf语句分别打印平均码长、信息熵和编码效率
printf(平均码长=%lf 比特/信源符号\n,aver_Len);
printf(信源熵=%lf 码符号/信源符号\n,Hs);
printf(编码效率=%lf\n,code_ratio);
}
运行结果如下图:
实验心得:通过本次试验加深了对霍夫曼编码的基本原理的理解以及计算公式的记忆。并使用C语言实现计算霍夫曼编码中信息熵、平均码长和编码效率的程
序,并在Visual C++环境中验证,且结果正确。
信源符号
S1
S2
S3
S4
S5
概率
0.05
0.4
0.2
0.2
0.15
信源缩减过程
0.4
0.2
0.2
0.2
0.4
0.4
0.2
0.6
0.4
编码
011
00
10
11
010
码长
3
2
2
2
3
00
10
11
010
011
10
11
01
00
01
00
1
1
0
您可能关注的文档
最近下载
- 第四章战国、秦、汉、三国时期的建筑详解.ppt VIP
- T_HAEPCI 55—2023(有色冶炼场地土壤-地下水重金属污染协同修复与管控技术指南).pdf VIP
- 青春筑梦婴幼儿托育服务与管理专业启航未来职业生涯.pptx VIP
- 【新教材】2025-2026学年统编版(2024)三年级道德与法治上册第1课《学习伴我成长》课件.pptx
- T ACEF 111—2023 焦化污染土壤多环芳烃生物修复智能监测预警技术指南.pdf VIP
- MTT 114-2005 煤矿用多级离心泵.pdf VIP
- TACEF 112-2023 焦化污染土壤多环芳烃生物修复智能监测设备配置技术指南.pdf VIP
- GBT18479-2001 地面用光伏(PV)发电系统 概述和导则.pdf
- 低血容量性休克的护理.pptx VIP
- 2《住宅项目规范》宣贯培训-第3章.pdf
文档评论(0)