信息论霍夫曼香农费诺编码.docx

上传人:b****6 文档编号:3413730 上传时间:2022-11-22 格式:DOCX 页数:8 大小:25.38KB
下载 相关 举报
信息论霍夫曼香农费诺编码.docx_第1页
第1页 / 共8页
信息论霍夫曼香农费诺编码.docx_第2页
第2页 / 共8页
信息论霍夫曼香农费诺编码.docx_第3页
第3页 / 共8页
信息论霍夫曼香农费诺编码.docx_第4页
第4页 / 共8页
信息论霍夫曼香农费诺编码.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

信息论霍夫曼香农费诺编码.docx

《信息论霍夫曼香农费诺编码.docx》由会员分享,可在线阅读,更多相关《信息论霍夫曼香农费诺编码.docx(8页珍藏版)》请在冰豆网上搜索。

信息论霍夫曼香农费诺编码.docx

信息论霍夫曼香农费诺编码

信息论霍夫曼、香农-费诺编码

LT

二、实验原理:

1、香农-费诺编码

首先,将信源符号以概率递减的次序排列进来,将排列好的信源符号划分为两大组,使第组的概率和近于相同,并各赋于一个二元码符号”0”和”1”.然后,将每一大组的信源符号再分成两组,使同一组的两个小组的概率和近于相同,并又分别赋予一个二元码符号。

依次下去,直至每一个小组只剩下一个信源符号为止。

这样,信源符号所对应的码符号序列则为编得的码字。

译码原理,按照编码的二叉树从树根开始,按译码序列进行逐个的向其叶子结点走,直到找到相应的信源符号为止。

之后再把指示标记回调到树根,按照同样的方式进行下一序列的译码到序列结束。

如果整个译码序列能够完整的译出则返回成功,否则则返回译码失败。

2、霍夫曼编码

霍夫曼编码属于码词长度可变的编码类,是霍夫曼在1952年提出的一种编码方法,即从下到上的编码方法。

同其他码词长度可变的编码一样,可区别的不同码词的生成是基于不同符号出现的不同概率。

生成霍夫曼编码算法基于一种称为“编码树”(coding tree)的技术。

算法步骤如下:

(1)初始化,根据符号概率的大小按由大到小顺序对符号进行排序。

(2)把概率最小的两个符号组成一个新符号(节点),即新符号的概率等

于这两个符号概率之和。

(3)重复第2步,直到形成一个符号为止(树),其概率最后等于1。

(4)从编码树的根开始回溯到原始的符号,并将每一下分枝赋值为1,上

分枝赋值为0。

三、实验环境

matlab7.1

四、实验内容

1、对于给定的信源的概率分布,用香农-费诺编码实现图像压缩

2、对于给定的信源的概率分布,用霍夫曼编码实现图像压缩

五、实验过程

1.香农-费诺编码

编码1

functionc=shannon(p)

%p=[0.20.150.150.10.10.10.10.1]

%shannon(p)

[p,index]=sort(p)

p=fliplr(p)

n=length(p)

pa=0

fori=2:

n

pa(i)=pa(i-1)+p(i-1)

end

k=ceil(-log2(p))

c=cell(1,n)

fori=1:

n

c{i}=”

tmp=pa(i)

forj=1:

k(i)

tmp=tmp*2

iftmp>=1

tmp=tmp-1

c{i(j)='1'

else

c{i}(j)='0'

end

end

end

c=fliplr(c)

c(index)=c  

 

编码2

clc;

clear;

A=[0.4,0.3,0.1,0.09,0.07,0.04];

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

[m,n]=size(A);

fori=1:

n

B(i,1)=A(i);%生成B的第1列

end

%生成B第2列的元素

a=sum(B(:

1))/2;

fork=1:

n-1

ifabs(sum(B(1:

k,1))-a)<=abs(sum(B(1:

k+1,1))-a)

break;

end

end

fori=1:

n%生成B第2列的元素

ifi<=k

B(i,2)=0;

else

B(i,2)=1;

end

end

%生成第一次编码的结果

END=B(:

2)';

END=sym(END);

%生成第3列及以后几列的各元素

j=3;

while(j~=0)

p=1;

while(p<=n)

x=B(p,j-1);

forq=p:

n

ifx==-1

break;

else

ifB(q,j-1)==x

y=1;

continue;

else

y=0;

break;

end

end

end

ify==1

q=q+1;

end

ifq==p|q-p==1

B(p,j)=-1;

else

ifq-p==2

B(p,j)=0;

END(p)=[char(END(p)),'0'];

B(q-1,j)=1;

END(q-1)=[char(END(q-1)),'1'];

else

a=sum(B(p:

q-1,1))/2;

fork=p:

q-2

ifabs(sum(B(p:

k,1))-a)<=abs(sum(B(p:

k+1,1))-a);

break;

end

end

fori=p:

q-1

ifi<=k

B(i,j)=0;

END(i)=[char(END(i)),'0'];

else

B(i,j)=1;

END(i)=[char(END(i)),'1'];

end

end

end

end

p=q;

end

C=B(:

j);

D=find(C==-1);

[e,f]=size(D);

ife==n

j=0;

else

j=j+1;

end

end

B

A

END

fori=1:

n

[u,v]=size(char(END(i)));

L(i)=v;

end

avlen=sum(L.*A)

 

2. 霍夫曼编码

function c=huffman(p) 

n=size(p,2)  

ifn==1  

 c=cell(1,1)      

c{1}=''      

return      

end 

[p1,i1]=min(p)  

index=[(1:

i1-1),(i1+1:

n)]  

p=p(index)  

n=n-1  

[p2,i2]=min(p)  

index2=[(1:

i2-1),(i2+1:

n)]  

p=p(index2); 

i2=index(i2)   

index=index(index2)   

p(n)=p1+p2   

c=huffman(p)   

c{n+1}=strcat(c{n},'1')   

c{n}=strcat(c{n},'0')   

index=[index,i1,i2]  

c(index)=c 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1