信息论霍夫曼编码

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

信息论与编码实验报告

课程名称:信息论与编码

实验名称:霍夫曼编码

班级:

学号:

姓名:

实验目的

1、熟练掌握Huffman编码的原理及过程,并熟练运用;

2、熟练运用MATLAB应用软件,并实现Huffman编码过程。

一、实验设备

装有MATLAB应用软件的PC计算机。

二、实验原理及过程

原理:

1、将信源符号按概率从大到小的排列,令P (X1)>=P(X2)>=P(X3)......P(Xn)

2、给两个概率最小的信源符号P(Xn-1)和P(Xn)各分配一个码位“0”和“1”,将这两个信源符号合并成一个新符号,并用这两个最小的概率之和作为新符号的概率,结果得到一个只包含(n-1)个信源符号的新信源。称为信源的第一次缩减信源,用S1表示。

3、将缩减信源S1的符号仍按概率从大到小顺序排列,重复步骤2,得到只含(n-2)个符号的缩减信源S2.

4、重复上述步骤,直至缩减信源只剩两个符号为止,此时所剩两个符号的概率之和必为1。然后从最后一级缩减信源开始,依编码路径向前返回,就得到各信源符号所对应的码字。

过程:

用MATLAB编写代码实现Huffman编码其程序为:

%哈夫曼编码的MA TLAB实现(基于0、1编码):

clc;

clear;

A=[0.3,0.2,0.1,0.2,0.2];信源消息的概率序列

A=fliplr(sort(A));%按降序排列

T=A;

[m,n]=size(A);

B=zeros(n,n-1);%空的编码表(矩阵)

for i=1:n

B(i,1)=T(i);%生成编码表的第一列

end

r=B(i,1)+B(i-1,1);%最后两个元素相加

T(n-1)=r;

T(n)=0;

T=fliplr(sort(T));

t=n-1;

for j=2:n-1%生成编码表的其他各列

for i=1:t

B(i,j)=T(i);

end

K=find(T==r);

B(n,j)=K(end);%从第二列开始,每列的最后一个元素记录特征元素在

%该列的位置

r=(B(t-1,j)+B(t,j));%最后两个元素相加

T(t-1)=r;

T(t)=0;

T=fliplr(sort(T));

t=t-1;

end

B;%输出编码表

END1=sym('[0,1]');%给最后一列的元素编码

END=END1;

t=3;

d=1;

for j=n-2:-1:1%从倒数第二列开始依次对各列元素编码for i=1:t-2

if i>1 & B(i,j)==B(i-1,j)

d=d+1;

else

d=1;

end

B(B(n,j+1),j+1)=-1;

temp=B(:,j+1);

x=find(temp==B(i,j));

END(i)=END1(x(d));

end

y=B(n,j+1);

END(t-1)=[char(END1(y)),'0'];

END(t)=[char(END1(y)),'1'];

t=t+1;

END1=END;

end

A%排序后的原概率序列

END%编码结果

for i=1:n

[a,b]=size(char(END(i)));

L(i)=b;

end

avlen=sum(L.*A)%平均码长

H1=log2(A);

H=-A*(H1')%熵

P=H/avlen%编码效率

四、实验现象

相关文档
最新文档