编码理论实验报告实验一霍夫曼编码中信息熵及编码效率的实验

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验名称实验一霍夫曼编码中信息熵及编码效率的实验
一、实验目的
1. 掌握霍夫曼编码中信息熵的定义、性质和计算;
2. 掌握霍夫曼编码中平均码字长度的定义和计算;
3.掌握霍夫曼编码中编码效率的定义和计算;
4. 正确使用C语言实现霍夫曼编码中信息熵、平均码长和编码效率的求取。

二、实验内容
1. 熟练列出霍夫曼编码中信息熵、平均码长和编码效率各自的计算公式;
2. 正确使用C语言实现计算霍夫曼编码中信息熵、平均码长和编码效率的程序,并在Visual C++环境中验证。

三、实验原理
1. 霍夫曼编码的基本原理
按照概率大小顺序排列信源符号,并设法按逆顺序分配码字字长,使编码的码字为可辨识的。

2. 平均码长:L=∑p(s i)*l i (单位为:码符号/信源符号)
其中,p(s i)为信源s i在q个信源中出现的概率,l i为信源s i的二进制霍夫曼编码。

3. 信息熵:H(S)=- ∑p(s i) *log2 p(s i) (单位为:比特/信源符号)
其中,p(s i)为信源s i在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 函数将三者的计算结果
//打印出来
#include<stdio.h>
#include<string.h>
#include<math.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
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 信源符号
double aver_Len=0,Hs=0,code_ratio=0;
int i;
//编程4:利用for循环计算平均码长aver_Len
for(i=0;i<CH_Num;i++)
aver_Len+=gailv[i]*code_len[i];
//编程5:利用for循环计算信息熵Hs
for(i=0;i<CH_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++环境中验证,且结果正确。

相关文档
最新文档