信息论霍夫曼香农费诺编码.docx
- 文档编号:27802251
- 上传时间:2023-07-05
- 格式:DOCX
- 页数:9
- 大小:25.31KB
信息论霍夫曼香农费诺编码.docx
《信息论霍夫曼香农费诺编码.docx》由会员分享,可在线阅读,更多相关《信息论霍夫曼香农费诺编码.docx(9页珍藏版)》请在冰豆网上搜索。
信息论霍夫曼香农费诺编码
信息论霍夫曼、香农-费诺编码
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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 信息论 霍夫曼 香农 编码