当前位置:文档之家› 信息论哈夫曼编码算术编码lz编码

信息论哈夫曼编码算术编码lz编码

信息论哈夫曼编码算术编码lz编码
信息论哈夫曼编码算术编码lz编码

信息论实验报告

实验人:邓放

学号:2012302257

2014年11月21日

一、实验目的

1、掌握哈夫曼编码算法的基本原理;要求对图片进行哈夫曼编码。

2、掌握算术编码算法的基本原理;要求对图片进行算术编码。

3、掌握LZ算法的基本原理;要求对图片进行LZ编码。

二、实验原理

1、哈夫曼编码

l)将信号源的符号按照出现概率递减的顺序排列。(注意,一定要递减)2)将最下面的两个最小出现概率进行合并相加,得到的结果作为新符号的出现的概率。

3)重复进行步骤1和2直到概率相加的结果等于1为止。

4)在合并运算时,概率大的符号用编码0表示,概率小的符号用编码1表示。

5)记录下概率为1处到当前信号源符号之间的0,l序列,从而得到每个符号的编码。

下面我举个简单例子:

一串信号源S={s1,s2,s3,s4,s5}对应概率为p={40,30,15,10,5},(百分率)

按照递减的格式排列概率后,根据第二步,会得到一个新的概率列表,依然按照递减排列,注意:如果遇到相同概率,合并后的概率放在下面!

最后概率最大的编码为0,最小的编码为1。如图所示:

所以,编码结果为

s1=1

s2=00

s3=010

s4=0110

s5=0111

霍夫曼编码具有如下特点:

1)编出来的码都是异字头码,保证了码的唯一可译性。

2)由于编码长度可变。因此译码时间较长,使得霍夫曼编码的压缩与还原相当费时。

3)编码长度不统一,硬件实现有难度。

4)对不同信号源的编码效率不同,当信号源的符号概率为2的负幂次方时,达到100%的编码效率;若信号源符号的概率相等,则编码效率最低。

5)由于0与1的指定是任意的,故由上述过程编出的最佳码不是唯一的,但其平均码长是一样的,故不影响编码效率与数据压缩性能。

2、算术编码

根据信源可能发现的不同符号序列的概率,把[0,1]区间划分为互不重叠的子区间,子区间的宽度恰好是各符号序列的概率。这样信源发出的不同符号序列将与各子区间一一对应,因此每个子区间内的任意一个实数都可以用来表示对应的符号序列,这个数就是该符号序列所对应的码字。显然,一串符号序列发生的概率越大,对应的子区间就越宽,要表达它所用的比特数就减少,因而相应的码字就越短。3、LZ 编码

设信源符号集A={a1,a2,…,aK}共K 个符号,设输入信源符号序列为u =(u1,u2,…,uL)编码是将此序列分成不同的段。分段的规范为:尽可能取最少个相连的信源符号,并保证各段都不相同。

开始时,先取一个符号作为第一段,然后继续分段。若出现与前面相同的符号时,就再取紧跟后面的一个符号一起组成一个段,使之与前面的段不同。这些分段构成字典。当字典达到一定大小后,再分段时就应查看有否与字典中的短语相同,若有重复就添加符号,以便与字典中短语不同,直至信源序列结束。

编码的码字由段号加一个符号组成。设u 构成的字典中的短语共有M (u )个。若编码为二元码,段号所需码长n=「log M (u )「(注:代表上取整符号),每个符号需要的码长为log [M (u)]。单符号的码字段号为0,非单字符的码字段号为除最后一个符号外字典中相同短语的段号。

例如,设U={a1,a2,a3,a4},信源序列为a1,a3,a2,a3,a2,a4,a3,a2,a1,a4,a3,a2,a1,共13位,字典如表所示:

r

r P S p S P a S P )()(),(+=??

????=)(1log S p L

三、实验结果

1.哈夫曼

2.算术编码

Gui界面

3.Lz编码

四.代码

哈夫曼:

clc

clear

close all;

%定义HufData/Len为全局变量的结构体

global HufData;

global Len

disp('计算机正在准备输出哈夫曼编码结果,请耐心等待……'); %原始码字的灰度

I_rgb=imread('3.jpg');

a=rgb2gray(I_rgb);

%图像的灰度统计

GrayStatistics=imhist(a);

GrayStatistics=GrayStatistics';

GrayRatioo=GrayStatistics/sum(GrayStatistics); GrayRatioNO=find(GrayRatioo~=0);

Len=length(GrayRatioNO);

%初始化灰度集,防止系统随即赋予其垃圾值

GrayRatio=ones(1,Len);

for i=1:Len

GrayRatio(i)=GrayRatioo(i);

end

GrayRatio=abs(sort(-GrayRatio));

%将图像灰度概率赋予结构体

for i=1:Len

HufData(i).value=GrayRatio(i);

end

%哈夫曼编码/霍夫曼编码

HuffmanCode(Len);

%输出码字

zippedHuffman=1;

for i=1:Len

tmpData=HufData(i).code;

str='';

for j=1:length(tmpData)

str=strcat(str,num2str(tmpData(j)));

zippedHuffman=zippedHuffman+1;

end

disp(strcat(str))

end

i;

%计算计算机一共输出多少个霍夫曼编码zippedHuffman;

%计算在删去0灰度级压缩之前的原始图像字节容量unzipped_delete=i*8;

%计算压缩比率

ratio_delete=zippedHuffman\unzipped_delete;

ad=num2str(ratio_delete*100);

str2=strcat(ad,'%');

disp(strcat('哈夫曼编码压缩比率','=',str2))

算术

A=imread('t01db9375674cc395c6.jpg');

for k=1:length(A)

if(A(k)==0)A(k)=1;

elseif(A(k)==255)A(k)=254;

end

end

[M,N]=size(A);

temp=zeros(1,256);

for m=1:M;

for n=1:N;

if A(m,n)==0;

i=1;

else

i=A(m,n);

end

temp(i)=temp(i)+1;

end

end

temp=temp/(M*N);

p=temp;

[i,j,v]=find(p);

pp=[j'

v'];

h=[];

h=j';

w=[];

w=v';

P=1;

for k=1:length(A)

P=(w(find((h<(A(k)+1))&(h>(A(k)-1)))))*P;

end

L=ceil(log2(1/P));

g=[];

g(1)=w(find((h<(A(1)+1))&(h>(A(1)-1))));

ppp=[];

ppp(1)=g(1);

for k=2:length(A)

g(k)=g(k-1)+g(k-1)*ppp(k-1);

ppp(k)=ppp(k-1)*w(find((h<(A(k)+1))&(h>(A(k)-1))));

t=g(k);

end

t

L

innum=t;

N=L-1;

%输入为非整数的情况

nint=floor(innum);%整数部分

nf=innum-nint;%小数部分

res_nint=dec2bin(nint);

res_nint=double(res_nint)-48;

count=0;

tempnum=nf;

record=zeros(1,N);

while(N)

count=count+1;%长度小于N

if(count>N)

N=0;

%return;

end

tempnum=tempnum*2;%小数转换为二进制,乘2取整

if tempnum>1

record(count)=1;

tempnum=tempnum-1;

elseif(tempnum==1)

record(count)=1;

N=0;%stop loop

else

record(count)=0;

end

end

res_nf=record;

numint=res_nint;

numf=res_nf;

num=[numint,numf]

%ss=dec2bin(t*2^7)

%ss=[ss(1:L)];%

Lz

unction LZmain()

%LZ encode main function

clc;

%open the source file to get the content

fid=fopen('1.jpeg','r');

seq=fread(fid);

fclose(fid);

seq=reshape(seq,1,length(seq));

if~isempty(seq)

%call the Entropy function to calculate the source entropy

[entropy]=Entropy(seq);

%call the LZcode function to encode the symbol

[dictionary codelength]=LZcode(seq);

%calculate the efficiency,and display the entropy,average length %as well as efficiency

avglength=((codelength*length(dictionary))/length(seq));

%efficiency=(length(seq)/(codelength*length(dictionary)));

disp(strcat('Entropy=',num2str(entropy)));

disp(strcat('Code length=',num2str(codelength)));

disp(strcat('Average length=',num2str(avglength)));

%disp(strcat('Efficiency=',num2str(efficiency)));

display('Dictionary content:Look dictionary.m.');

fiddic=fopen('dictionary.m','w');

fprintf(fiddic,'The content of the dictionary is:\n');

for i=1:length(dictionary)

dic=fwrite(fiddic,[''''dictionary(i).sym''':'dictionary(i).code setstr(10)]);

end

fclose(fiddic);

%encode the source file,and write the enseq into the file--encode.txt

display('Encoded Sequence:Look encode.txt.');

enseq=LZencode(dictionary);

fiden=fopen('encode.txt','w');

en=fwrite(fiden,enseq);

fclose(fiden);

%decode the encode file,and write the deseq into the file--decode.txt

display('Decoded Sequence:Look decode.txt.');

deseq=LZdecode(dictionary);

fidde=fopen('decode.txt','w');

de=fwrite(fidde,deseq);

fclose(fiden);

else

display('Empty Sequence....');

end

end

哈夫曼编码与译码报告

一、设计思想 程序要求: 利用哈夫曼树对字符串进行编码,要求每个字符有自己唯一的编码。将得到的一串字串译成0、1编码后存到一个文件夹中,然后再从这个文件夹中读出这串编码进行解码。 实现方法: 输入一串字符,要求字符的区间为大写的26个英文字母,将获得的串字符用计算权值的函数(jsquanzhi())进行字符统计,统计出现的字符种数以及每种字符出现的次数,将该种字符出现的次数作为它的权值。将出现的字符的权值和该字符依次分别赋给两个结构体HT和HC,利用HT(节点)权值的大小建立哈夫曼树,首先用选择函数select()函数选择两个权值最小的字符作为叶子节点,创建一个新的节点作为这两个叶节点的父节点,被选中的节点给他的HT[i].parent赋值是他下次不再被选中,父节点的权值为,子节点的权值之和。然后将该将父节点放入筛选区中,再进行选择(被选过的不再被使用),直到所有的节点都被使用,这样一个哈夫曼树就被建立了。根据每个字符在哈夫曼书中的位置来编译每个字符的0、1密文代码,从叶节点判断该叶节点是其父节点的左右字左字为‘0’,右子为‘1’,在判断父节点是上级父节点的左右子直至根节点,将生成的0、1字符串按所表示的字符倒序存入HC相应的字符的bins[]数组。 重新一个一个字符的读取输入的字符串,按照字符出现的顺序将它转为0、1代码并存到一个txt文件夹中去。解码时从文件夹中,一个一个字符的读出那串0、1代码赋给一个临时字符串cd[],用该字符串与每个字符的HC[i].bins密文比较,直到与一个字符的密文相同时,译出该字符,将字符存放在临时字符数组tempstr[]中,清空临时字符串继续读取0、1代码进行翻译,直至文件密文结束为止。于是就得到了原先被加密的那串字符串。

答案~信息论与编码练习

1、有一个二元对称信道,其信道矩阵如下图所示。设该信道以1500个二元符号/秒的速度传输输入符号。现有一消息序列共有14000个二元符号,并设在这消息中P(0)=P(1)=1/2。问从信息传输的角度来考虑,10秒钟内能否将这消息序列无失真地传送完? 解答:消息是一个二元序列,且为等概率分布,即P(0)=P(1)=1/2,故信源的熵为H(X)=1(bit/symbol)。则该消息序列含有的信息量=14000(bit/symbol)。 下面计算该二元对称信道能传输的最大的信息传输速率: 信道传递矩阵为: 信道容量(最大信息传输率)为: C=1-H(P)=1-H(0.98)≈0.8586bit/symbol 得最大信息传输速率为: Rt ≈1500符号/秒× 0.8586比特/符号 ≈1287.9比特/秒 ≈1.288×103比特/秒 此信道10秒钟内能无失真传输得最大信息量=10× Rt ≈ 1.288×104比特 可见,此信道10秒内能无失真传输得最大信息量小于这消息序列所含有的信息量,故从信息传输的角度来考虑,不可能在10秒钟内将这消息无失真的传送完。 2、若已知信道输入分布为等概率分布,且有如下两个信道,其转移概率矩阵分别为: 试求这两个信道的信道容量,并问这两个信道是否有噪声? 3 、已知随即变量X 和Y 的联合分布如下所示: 01 100.980.020.020.98P ?? =?? ??11112222 1111222212111122221111222200000000000000000000000000000000P P ????????????==????????????11 222 2111 2222 2 log 4(00)1/()log 42/log 8(000000)2/(),H bit symbol H X bit symbol C C H bit symbol H X C =-===>=-==1解答:(1)由信道1的信道矩阵可知为对称信道故C 有熵损失,有噪声。(2)为对称信道,输入为等概率分布时达到信道容量无噪声

《信息论与编码》课后答案

第二章课后习题 【2.1】设有12 枚同值硬币,其中有一枚为假币。只知道假币的重量与真币的重量不同,但不知究竟是重还是轻。现用比较天平左右两边轻重的方法来测量。为了在天平上称出哪一枚是假币,试问至少必须称多少次? 解:从信息论的角度看, “12 枚硬币中,某一枚为假币”该事件发生的概率为P = 1 12 ; “假币的重量比真的轻,或重”该事件发生的概率为P = 1 2 ; 为确定哪一枚是假币,即要消除上述两事件的联合不确定性,由于二者是独立的,因此有 I = log12 + log 2 = log 24 比特 而用天平称时,有三种可能性:重、轻、相等,三者是等概率的,均为P = 平每一次消除的不确定性为I = log 3 比特 因此,必须称的次数为1 3 ,因此天 I 1 I 2 log 24 log 3 H 2.9 次 因此,至少需称3 次。 【延伸】如何测量?分 3 堆,每堆4 枚,经过 3 次测量能否测出哪一枚为假币。【2.2】同时扔一对均匀的骰子,当得知“两骰子面朝上点数之和为2”或“面朝上点数之和为8”或“两骰子面朝上点数是 3 和4”时,试问这三种情况分别获得多少信息量?解: “两骰子总点数之和为2”有一种可能,即两骰子的点数各为1,由于二者是独立的, 因此该种情况发生的概率为P = 1 1 6 6 1 36 ,该事件的信息量为: ?

? ? 5 = ? ? 2 = I = log 36 H 5.17 比特 “两骰子总点数之和为 8”共有如下可能:2 和 6、3 和 5、4 和 4、5 和 3、6 和 2,概 率为 P = 1 1 6 6 5 36 ,因此该事件的信息量为: 36 I = log H 2.85 比特 5 “两骰子面朝上点数是 3 和 4”的可能性有两种:3 和 4、4 和 3,概率为 P = 1 1 6 6 1 18 , 因此该事件的信息量为: I = log18 H 4.17 比特 【2.3】如果你在不知道今天是星期几的情况下问你的朋友“明天星期几?”则答案中含有 多少信息量?如果你在已知今天是星期四的情况下提出同样的问题,则答案中你能获得多 少信息量(假设已知星期一至星期日的顺序)? 解: 如果不知今天星期几时问的话,答案可能有七种可能性,每一种都是等概率的,均为 P = 1 7 ,因此此时从答案中获得的信息量为 I = log 7 = 2.807 比特 而当已知今天星期几时问同样的问题,其可能性只有一种,即发生的概率为 1,此时获得 的信息量为 0 比特。 【2.4】居住某地区的女孩中有 25%是大学生,在女大学生中有 75%是身高 1.6 米以上的, 而女孩中身高 1.6 米以上的占总数一半。假如我们得知“身高 1.6 米以上的某女孩是大学 生”的消息,问获得多少信息量? 解: 设 A 表示女孩是大学生, P ( A ) = 0.25 ; B 表示女孩身高 1.6 米以上, P ( B | A ) = 0.75 , P ( B ) = 0.5 “身高 1.6 米以上的某女孩是大学生”的发生概率为

信息论与编码试题集与答案(2014)

一填空题 1、平均自信息为 表示信源的平均不确定度,也表示平均每个信源消息所提供的信息量。 平均互信息 表示从Y 获得的关于每个X 的平均信息量,也表示发X 前后Y 的平均不确定性减少的量,还表示通信前 后整个系统不确定性减少的量。 2、最大离散熵定理为:离散无记忆信源,等概率分布时熵最大,最大熵值为。 3、香农公式为 为保证足够大的信道容量,可采用(1)用频带换信噪比; (2)用信噪比换频带。 4、只要,当N 足够长时,一定存在一种无失真编码。 5、当R <C 时,只要码长足够长,一定能找到一种编码方法和译码规则,使译码错误概率无穷小。 6、1948年,美国数学家 香农 发表了题为“通信的数学理论”的长篇论文,从而创立了信息论。 7.人们研究信息论的目的是为了 高效、可靠、安全 地交换和利用各种各样的信息。 8.信息的 可度量性 是建立信息论的基础。 9.统计度量 是信息度量最常用的方法。 10、单符号离散信源一般用随机变量描述,而多符号离散信源一般用 随机矢量 描述。 11、一个随机事件发生某一结果后所带来的信息量称为自信息量,定义为 其发生概率对数的负值 。 12、自信息量的单位一般有 比特、奈特和哈特 。 13、必然事件的自信息是 0 。 14、不可能事件的自信息量是 ∞ 。 15、两个相互独立的随机变量的联合自信息量等于 两个自信息量之和 。 16、数据处理定理:当消息经过多级处理后,随着处理器数目的增多,输入消息与输出消息之间的平均互信息量 趋于变小 。 17、离散平稳无记忆信源X 的N 次扩展信源的熵等于离散信源X 的熵的 N 倍 。 18、离散平稳有记忆信源的极限熵,=∞H )/(lim 121-∞→N N N X X X X H 。 19、对于n 元m 阶马尔可夫信源,其状态空间共有 n m 个不同的状态。 20、一维连续随即变量X 在[a ,b]区间内均匀分布时,其信源熵为 log2(b-a ) 。

信息论与编码问题详解

《信息论与编码(第二版)》雪虹答案 第二章 2.1一个马尔可夫信源有3个符号{}1,23,u u u ,转移概率为:()11|1/2p u u =,()21|1/2p u u =,()31|0p u u =,()12|1/3p u u =,()22|0p u u =,()32|2/3p u u =,()13|1/3p u u =,()23|2/3p u u =,()33|0p u u =,画出状态图并求出各符号稳态概率。 解:状态图如下 状态转移矩阵为: 1/21/201/302/31/32/30p ?? ?= ? ??? 设状态u 1,u 2,u 3稳定后的概率分别为W 1,W 2、W 3 由1231WP W W W W =??++=?得1231132231231112331223231W W W W W W W W W W W W ?++=???+=???=???++=?计算可得1231025925625W W W ?=???=???=?? 2.2 由符号集{0,1}组成的二阶马尔可夫链,其转移概率为:(0|00)p =0.8,(0|11)p =0.2,(1|00)p =0.2,(1|11)p =0.8,(0|01)p =0.5,(0|10)p =0.5,(1|01)p =0.5,(1|10)p =0.5。画出状态图,并计算各状态的稳态概率。 解:(0|00)(00|00)0.8p p == (0|01)(10|01)0.5p p == (0|11)(10|11)0.2p p == (0|10)(00|10)0.5p p == (1|00)(01|00)0.2p p == (1|01)(11|01)0.5p p == (1|11)(11|11)0.8p p == (1|10)(01|10)0.5p p ==

哈夫曼编码的方法

1.哈夫曼编码的方法 编码过程如下: (1) 将信源符号按概率递减顺序排列; (2) 把两个最小的概率加起来, 作为新符号的概率; (3) 重复步骤(1) 、(2), 直到概率和达到1 为止; (4) 在每次合并消息时,将被合并的消息赋以1和0或0和1; (5) 寻找从每个信源符号到概率为1处的路径,记录下路径上的1和0; (6) 对每个符号写出"1"、"0"序列(从码数的根到终节点)。 2.哈夫曼编码的特点 ①哈夫曼方法构造出来的码不是唯一的。 原因 ·在给两个分支赋值时, 可以是左支( 或上支) 为0, 也可以是右支( 或下支) 为0, 造成编码的不唯一。 ·当两个消息的概率相等时, 谁前谁后也是随机的, 构造出来的码字就不是唯一的。 ②哈夫曼编码码字字长参差不齐, 因此硬件实现起来不大方便。 ③哈夫曼编码对不同的信源的编码效率是不同的。 ·当信源概率是2 的负幂时, 哈夫曼码的编码效率达到100%; ·当信源概率相等时, 其编码效率最低。 ·只有在概率分布很不均匀时, 哈夫曼编码才会收到显著的效果, 而在信源分布均匀的情况下, 一般不使用哈夫曼编码。 ④对信源进行哈夫曼编码后, 形成了一个哈夫曼编码表。解码时, 必须参照这一哈夫编码表才能正确译码。 ·在信源的存储与传输过程中必须首先存储或传输这一哈夫曼编码表在实际计算压缩效果时, 必须考虑哈夫曼编码表占有的比特数。在某些应用场合, 信源概率服从于某一分布或存在一定规律

使用缺省的哈夫曼编码表有

解:为了进行哈夫曼编码, 先把这组数据由大到小排列, 再按上方法处理 (1)将信源符号按概率递减顺序排列。 (2)首先将概率最小的两个符号的概率相加,合成一个新的数值。 (3)把合成的数值看成是一个新的组合符号概率,重复上述操作,直到剩下最后两个符号。 5.4.2 Shannon-Famo编码 Shannon-Famo(S-F) 编码方法与Huffman 的编码方法略有区别, 但有时也能编 出最佳码。 1.S-F码主要准则 符合即时码条件; 在码字中,1 和0 是独立的, 而且是( 或差不多是)等概率的。 这样的准则一方面能保证无需用间隔区分码字,同时又保证每一位码字几乎有 1位的信息量。 2.S-F码的编码过程 信源符号按概率递减顺序排列; 把符号集分成两个子集, 每个子集的概率和相等或近似相等;

哈夫曼编码步骤

哈夫曼编码步骤: 一、对给定的n个权值{W1,W2,W3,...,Wi,...,Wn}构成n棵二叉树的初始集合F= {T1,T2,T3,...,Ti,...,Tn},其中每棵二叉树Ti中只有一个权值为Wi的根结点,它的左右子树均为空。(为方便在计算机上实现算法,一般还要求以Ti的权值Wi的升序排列。) 二、在F中选取两棵根结点权值最小的树作为新构造的二叉树的左右子树,新二叉树的根结点的权值为其左右子树的根结点的权值之和。 三、从F中删除这两棵树,并把这棵新的二叉树同样以升序排列加入到集合F中。 四、重复二和三两步,直到集合F中只有一棵二叉树为止。 /*------------------------------------------------------------------------- * Name: 哈夫曼编码源代码。 * Date: 2011.04.16 * Author: Jeffrey Hill+Jezze(解码部分) * 在Win-TC 下测试通过 * 实现过程:着先通过HuffmanTree() 函数构造哈夫曼树,然后在主函数main()中 * 自底向上开始(也就是从数组序号为零的结点开始)向上层层判断,若在 * 父结点左侧,则置码为0,若在右侧,则置码为1。最后输出生成的编码。*------------------------------------------------------------------------*/ #include #include #define MAXBIT 100 #define MAXVALUE 10000 #define MAXLEAF 30 #define MAXNODE MAXLEAF*2 -1 typedef struct { int bit[MAXBIT]; int start;} HCodeType; /* 编码结构体*/ typedef struct{ int weight; int parent; int lchild; int rchild; int value;} HNodeType; /* 结点结构体*/ /* 构造一颗哈夫曼树*/ void HuffmanTree (HNodeType HuffNode[MAXNODE], int n){ /* i、j:循环变量,m1、m2:构造哈夫曼树不同过程中两个最小权值结点的权值,x1、x2:构造哈夫曼树不同过程中两个最小权值结点在数组中的序号。*/ int i, j, m1, m2, x1, x2; /* 初始化存放哈夫曼树数组HuffNode[] 中的结点*/ for (i=0; i<2*n-1; i++)

信息论与编码课后习题答案

1. 有一个马尔可夫信源,已知p(x 1|x 1)=2/3,p(x 2|x 1)=1/3,p(x 1|x 2)=1,p(x 2|x 2)=0,试画出该信源的香农线图,并求出信源熵。 解:该信源的香农线图为: 1/3 ○ ○ 2/3 (x 1) 1 (x 2) 在计算信源熵之前,先用转移概率求稳定状态下二个状态x 1和 x 2 的概率)(1x p 和)(2x p 立方程:)()()(1111x p x x p x p =+)()(221x p x x p =)()(2132x p x p + )()()(1122x p x x p x p =+)()(222x p x x p =)(0)(2131x p x p + )()(21x p x p +=1 得4 3 1)(=x p 4 12)(=x p 马尔可夫信源熵H = ∑∑- I J i j i j i x x p x x p x p )(log )()( 得 H=0.689bit/符号 2.设有一个无记忆信源发出符号A 和B ,已知4 341)(.)(= =B p A p 。求: ①计算该信源熵; ②设该信源改为发出二重符号序列消息的信源,采用费诺编码方法,求其平均信息传输速率; ③又设该信源改为发三重序列消息的信源,采用霍夫曼编码方法,求其平均信息传输速率。 解:①∑- =X i i x p x p X H )(log )()( =0.812 bit/符号 ②发出二重符号序列消息的信源,发出四种消息的概率分别为 用费诺编码方法 代码组 b i BB 0 1 BA 10 2 AB 110 3 AA 111 3 无记忆信源 624.1)(2)(2 ==X H X H bit/双符号 平均代码组长度 2B =1.687 bit/双符号 B X H R )(22==0.963 bit/码元时间 ③三重符号序列消息有8个,它们的概率分别为 用霍夫曼编码方法 代码组 b i BBB 64 27 0 0 1 BBA 64 9 0 )(6419 1 110 3

算术编码与哈夫曼编码

安徽大学 本科毕业论文(设计、创作)题目:哈夫曼编码与算术编码压缩效率比较 学生姓名:李伟学号:E20714134 院(系):计算机科学与技术专业:软件工程 入学时间:2007年9月 导师姓名:韩莉职称/学位:讲师/硕士 导师所在单位:安徽大学计算机科学与技术学院 完成时间:2011年5月

哈夫曼编码与算术编码压缩效率比较 摘要 算术编码和哈夫曼编码都利用信源符号的概率分布特性进行编码,使平均码长逼近信息熵是压缩编码算法的第一要求,算术编码比哈夫曼编码逼近信息熵的能力要强,但是编码效率和实现往往是一对矛盾,编码效率的提高,往往要在实现上付出代价,所以,选择压缩算要权衡这两点。本论文开篇先引入了信息论的一些概念,因为编码理论发源于信息论,是各种编码算法的数学基础。然后在第2章分析了算术编码原理,并从无限精度的算术编码原理过渡到在计算机上能够实现的二进制编码原理。在第3章紧接着介绍了哈夫曼编码原理,并讨论了怎样把信源符号映射为对应的码字,过程中用到的哈夫曼编码表是编码与解码的关键。在第4章对两者的编码效率作了比较,主要是结合信息论中的一些概念从微观上对两者逼近信息熵的能力作了比较,并在这章最后对两者在文本文件的压缩效果的表现上给出了一些实验结果。最后,在5章,主要是对前面内容做了些补充和总结。 关键词:信息熵;算术编码;哈夫曼编码;编码效率

The comparison of Huffman Coding and Arithmetic Coding in File Compression Abstract Full use of the probability distribution of source symbols is the feature of the arithmetic encoding and Huffman encoding. Approaching the average code length to the information entropy come first when designing a compression algorithm. To the capacity of closing to information entropy, arithmetic encoding is stronger than Huffman encoding. However, the coding efficiency and implementation is often a contradiction: to improve coding efficiency, which means the algorithm implementation process needs to pay a higher price. Therefore, you need to weigh both when choosing a compression algorithm. In the beginning of this thesis, it first introduced some of the concepts of information theory. Because encoding algorithms are derived from information theory and information theory is the mathematical foundation of various coding algorithms. Then in Chapter 2, it introduces the principle of arithmetic coding. For better to understand the binary arithmetic coding principle, it first introduces the unlimited precision arithmetic coding. In Chapter 3, it describes the Huffman coding theory, and discusses how to map source symbol to the corresponding code word, among which Huffman coding and decoding table is the key. In Chapter 4, the coding efficiency of the two algorithms is compared. Mainly compare the capacities to approximate information entropy with some of the concepts in information theory. And the final part in this chapter, some experimental results are given to show the compression effect to compress a text file. Finally, in Chapter 5, it gives some additions and summary. Keywords:Information Entropy; Arithmetic Coding; Huffman Coding;Coding Efficiency

信息论与编码试卷及答案

一、概念简答题(每题5分,共40分) 1.什么是平均自信息量与平均互信息,比较一下这两个概念的异同? 平均自信息为:表示信源的平均不确定度,表示平均每个信源消息所提供的信息量。 平均互信息:表示从Y获得的关于每个X的平均信息量;表示发X前后Y的平均不确定性减少的量;表示通信前后整个系统不确定性减少的量。 2.简述最大离散熵定理。对于一个有m个符号的离散信源,其最大熵是多少? 最大离散熵定理为:离散无记忆信源,等概率分布时熵最大。 最大熵值为 3.解释信息传输率、信道容量、最佳输入分布的概念,说明平均互信息与信源的概率分布、信道的传递概率间分别是什么关系? 信息传输率R指信道中平均每个符号所能传送的信息量。信道容量是一个信道所能达到的最大信息传输率。信息传输率达到信道容量时所对应的输入概率分布称为最佳输入概率分布。 平均互信息是信源概率分布的∩型凸函数,是信道传递概率的U型凸函数。 4.对于一个一般的通信系统,试给出其系统模型框图,并结合此图,解释数据处理定理。 数据处理定理为:串联信道的输入输出X、Y、Z组成一个马尔可夫链,且有, 。说明经数据处理后,一般只会增加信息的损失。

5.写出香农公式,并说明其物理意义。当信道带宽为5000Hz,信噪比为30dB时求信道容量。香农公式为 ,它是高斯加性白噪声信道在单位时间内的信道容量,其值取决于信噪比和带宽。 由得,则 6.解释无失真变长信源编码定理。只要,当N足够长时,一定存在一种无失真编码。 7.解释有噪信道编码定理。答:当R<C时,只要码长足够长,一定能找到一种编码方法和译码规则,使译码错误概率无穷小。 8.什么是保真度准则?对二元信源,其失真矩阵,求a>0时率失真函数的和?答:1)保真度准则为:平均失真度不大于允许的失真度。 2)因为失真矩阵中每行都有一个0,所以有,而。 二、综合题(每题10分,共60分) 1.黑白气象传真图的消息只有黑色和白色两种,求: 1)黑色出现的概率为0.3,白色出现的概率为0.7。给出这个只有两个符号的信源X的数学模型。假设图上黑白消息出现前后没有关联,求熵;

信息论与编码理论习题答案

第二章 信息量和熵 2.2 八元编码系统,码长为3,第一个符号用于同步,每秒1000个码字,求它的 信息速率。 解:同步信息均相同,不含信息,因此 每个码字的信息量为 2?8log =2?3=6 bit 因此,信息速率为 6?1000=6000 bit/s 2.3 掷一对无偏骰子,告诉你得到的总的点数为:(a) 7; (b) 12。问各得到多少信 息量。 解:(1) 可能的组合为 {1,6},{2,5},{3,4},{4,3},{5,2},{6,1} )(a p =366=6 1 得到的信息量 =) (1 log a p =6log =2.585 bit (2) 可能的唯一,为 {6,6} )(b p =361 得到的信息量=) (1 log b p =36log =5.17 bit 2.4 经过充分洗牌后的一副扑克(52张),问: (a) 任何一种特定的排列所给出的信息量是多少? (b) 若从中抽取13张牌,所给出的点数都不相同时得到多少信息量? 解:(a) )(a p =! 521 信息量=) (1 log a p =!52log =225.58 bit (b) ???????花色任选 种点数任意排列 13413!13 )(b p =13 52134!13A ?=1352 13 4C 信息量=1313 52 4log log -C =13.208 bit

2.9 随机掷3颗骰子,X 表示第一颗骰子的结果,Y 表示第一和第二颗骰子的 点数之和,Z 表示3颗骰子的点数之和,试求)|(Y Z H 、)|(Y X H 、 ),|(Y X Z H 、)|,(Y Z X H 、)|(X Z H 。 解:令第一第二第三颗骰子的结果分别为321,,x x x ,1x ,2x ,3x 相互独立, 则1x X =,21x x Y +=,321x x x Z ++= )|(Y Z H =)(3x H =log 6=2.585 bit )|(X Z H =)(32x x H +=)(Y H =2?( 361log 36+362log 18+363log 12+364log 9+365log 536)+36 6 log 6 =3.2744 bit )|(Y X H =)(X H -);(Y X I =)(X H -[)(Y H -)|(X Y H ] 而)|(X Y H =)(X H ,所以)|(Y X H = 2)(X H -)(Y H =1.8955 bit 或)|(Y X H =)(XY H -)(Y H =)(X H +)|(X Y H -)(Y H 而)|(X Y H =)(X H ,所以)|(Y X H =2)(X H -)(Y H =1.8955 bit ),|(Y X Z H =)|(Y Z H =)(X H =2.585 bit )|,(Y Z X H =)|(Y X H +)|(XY Z H =1.8955+2.585=4.4805 bit 2.10 设一个系统传送10个数字,0,1,…,9。奇数在传送过程中以0.5的概 率错成另外一个奇数,其余正确接收,求收到一个数字平均得到的信息量。 解: 8,6,4,2,0=i √ );(Y X I =)(Y H -)|(X Y H 因为输入等概,由信道条件可知,

信息论与编码习题参考答案(全)

信息论与编码习题参考答案 第一章 单符号离散信源 同时掷一对均匀的子,试求: (1)“2和6同时出现”这一事件的自信息量; (2)“两个5同时出现”这一事件的自信息量; (3)两个点数的各种组合的熵; (4)两个点数之和的熵; (5)“两个点数中至少有一个是1”的自信息量。 解: bit P a I N n P bit P a I N n P c c N 17.536log log )(36 1 )2(17.418log log )(362)1(36 662221111 616==-=∴====-=∴== =?==样本空间: * (3)信源空间: bit x H 32.436log 36 16236log 36215)(=??+?? =∴

bit x H 71.3636 log 366536log 3610 436log 368336log 366236log 36436log 362)(=??+?+?+??= ∴++ (5) bit P a I N n P 17.111 36 log log )(3611333==-=∴== ? 如有6行、8列的棋型方格,若有两个质点A 和B ,分别以等概落入任一方格内,且它们的坐标分别为(Xa ,Ya ), (Xb ,Yb ),但A ,B 不能同时落入同一方格内。 (1) 若仅有质点A ,求A 落入任一方格的平均信息量; (2) 若已知A 已落入,求B 落入的平均信息量; (3) 若A ,B 是可辨认的,求A ,B 落入的平均信息量。 解: ! bit a P a P a a P a I a P A i 58.548log )(log )()(H 48log )(log )(481 )(:)1(48 1 i i i i i ==-=∴=-=∴= ∑=落入任一格的概率 bit b P b P b b P b I b P A i 55.547log )(log )()(H 47 log )(log )(47 1 )(:B ,)2(48 1i i i i i ==-=∴=-=∴=∑=落入任一格的概率是落入任一格的情况下在已知 bit AB P AB P AB H AB P AB I AB P AB i i i i i i i 14.11)4748log()(log )()() (log )(47 1 481)()3(47481 =?=-=-=∴?=∑?=是同时落入某两格的概率 从大量统计资料知道,男性中红绿色盲的发病率为7%,女性发病率为%.如果你问一位男士:“你是否是红绿色盲”他的回答可能是:“是”,也可能“不是”。问这两个回答中各含有多少信息量平均每个回答中各含有多少信息量如果你问一位女士,则她的答案中含有多少平均信息量 解:

算术编码工作原理.(优选)

算术编码工作原理 在给定符号集和符号概率的情况下,算术编码可以给出接近最优的编码结果。使用算术编码的压缩算法通常先要对输入符号的概率进行估计,然后再编码。这个估计越准,编码结果就越接近最优的结果。 例: 对一个简单的信号源进行观察,得到的统计模型如下: ?60% 的机会出现符号中性 ?20% 的机会出现符号阳性 ?10% 的机会出现符号阴性 ?10% 的机会出现符号数据结束符. (出现这个符号的意思是该信号源'内部中止',在进行数据压缩时这样的情况是很常见的。当第一次也是唯一的一次看到这个符号时,解码器就知道整个信号流都被解码完成了。) 算术编码可以处理的例子不止是这种只有四种符号的情况,更复杂的情况也可以处理,包括高阶的情况。所谓高阶的情况是指当前符号出现的概率受之前出现符号的影响,这时候之前出现的符号,也被称为上下文。比如在英文文档编码的时候,例如,在字母Q 或者q出现之后,字母u出现的概率就大大提高了。这种模型还可以进行自适应的变化,即在某种上下文下出现的概率分布的估计随着每次这种上下文出现时的符号而自适应 更新,从而更加符合实际的概率分布。不管编码器使用怎样的模型,解码器也必须使用同样的模型。 一个简单的例子以下用一个符号串行怎样被编码来作一个例子:假如有一个以A、B、C三个出现机会均等的符号组成的串行。若以简单的分组编码会十分浪费地用2 bits 来表示一个符号:其中一个符号是可以不用传的(下面可以见到符号B正是如此)。为此,这个串行可以三进制的0和2之间的有理数表示,而且每位数表示一个符号。例如,“ABBCAB”这个串行可以变成0.011201(base3)(即0为A, 1为B, 2为C)。用一个定点二进制数字去对这个数编码使之在恢复符号表示时有足够的精度,譬如 0.001011001(base2) –只用了9个bit,比起简单的分组编码少(1 – 9/12)x100% = 25%。这对于长串行是可行的因为有高效的、适当的算法去精确地转换任意进制的数字。 编码过程的每一步,除了最后一步,都是相同的。编码器通常需要考虑下面三种数据: ?下一个要编码的符号 ?当前的区间(在编第一个符号之前,这个区间是[0,1), 但是之后每次编码区间都会变化) ?模型中在这一步可能出现的各个符号的概率分布(像前面提到的一样,高阶或者自适应的模型中,每一步的概率并不必须一样) 编码其将当前的区间分成若干子区间,每个子区间的长度与当前上下文下可能出现的对应符号的概率成正比。当前要编码的符号对应的子区间成为在下一步编码中的初始区间。

信息论与编码理论课后习题答案高等教育出版社

信息论与编码理论习题解 第二章-信息量和熵 解: 平均每个符号长为:154 4.0312.032= ?+?秒 每个符号的熵为9183.03log 3 1 23log 32=?+?比特/符号 所以信息速率为444.34 15 9183.0=?比特/秒 解: 同步信号均相同不含信息,其余认为等概, 每个码字的信息量为 3*2=6 比特; 所以信息速率为600010006=?比特/秒 解:(a)一对骰子总点数为7的概率是 36 6 所以得到的信息量为 585.2)366(log 2= 比特 (b) 一对骰子总点数为12的概率是36 1 所以得到的信息量为 17.536 1 log 2= 比特 解: (a)任一特定排列的概率为 ! 521 ,所以给出的信息量为 58.225! 521 log 2 =- 比特 (b) 从中任取13张牌,所给出的点数都不相同的概率为 1352 13 13 521344!13C A =? 所以得到的信息量为 21.134 log 1313 52 2=C 比特. 解:易证每次出现i 点的概率为 21 i ,所以

比特比特比特比特比特比特比特398.221 log 21)(807.1)6(070.2)5(392.2)4(807.2)3(392.3)2(392.4)1(6,5,4,3,2,1,21 log )(26 12=-==============-==∑ =i i X H x I x I x I x I x I x I i i i x I i 解: 可能有的排列总数为 27720! 5!4!3! 12= 没有两棵梧桐树相邻的排列数可如下图求得, Y X Y X Y X Y X Y X Y X Y X Y 图中X 表示白杨或白桦,它有???? ??37种排法,Y 表示梧桐树可以栽 种的位置,它有???? ??58种排法,所以共有???? ??58*???? ??37=1960种排法保证没有 两棵梧桐树相邻,因此若告诉你没有两棵梧桐树相邻时,得到关于树排列的信息为1960log 27720log 22-= 比特 解: X=0表示未录取,X=1表示录取; Y=0表示本市,Y=1表示外地; Z=0表示学过英语,Z=1表示未学过英语,由此得

信息论与编码(曹雪虹_张宗橙)第二、三章答案

2-1.解:该一阶马尔可夫信源,由转移概率构成的转移矩阵为: 对应的状态图如右图所示。设各符号稳定概率为:1p ,2p ,3p 则可得方程组: 1p = 211p +312p +313p 2p =211p +323p 3p =3 22p 1p +2p +3p =1 解得各符号稳态概率为: 1p = 2510,2p =259,3p =25 6 2-2.解:该马尔可夫信源的符号条件概率矩阵为: 状态转移概率矩阵为: 对应的状态图如右图所示。

设各状态的稳态分布概率为1W ,2W ,3W ,4W ,则可得方程组为: 1W =0.81W +0.53W 2W =0.21W +0.53W 3W =0.52W +0.24W 4W =0.52W +0.84W 1W +2W +3W +4W =1 解得稳定分布的概率为: 1W = 145,2W =142,3W =142,4W =14 5 2-3.解:(1)“3和5同时出现”事件的概率为: p(3,5)= 18 1 故其自信息量为: I(3,5)=-㏒2 18 1 =4.17bit (2)“两个1同时出现”事件的概率为: p(1,1)= 36 1 故其自信息量为: I(1,1)=- ㏒2 36 1 =5.17bit (3)两个点数的各种组合构成的信源,其概率空间为: 则该信源熵为: H(x 1)=6× 36 1 lb36+15×181lb18=4.337bit/事件 (4)两个点数之和构成的信源,其概率空间为:

则该信源的熵为: H(x 2)=2× 361 lb36+2×181lb18+2×121lb12+2×91lb9+2×365lb 536+6 1lb6 =3.274bit/事件 (5)两个点数中至少有一个是1的概率为: p(1)= 36 11 故其自信息量为: I(1)= -㏒2 36 11 =1.7105bit 2-7.解:(1)离散无记忆信源的每个符号的自信息量为 I(x 1)= -㏒2 83 =1.415bit I(x 2)= -㏒241 =2bit I(x 3)= -㏒241 =2bit I(x 4)= -㏒28 1 =3bit (2)由于信源发出消息符号序列有12个2,14个0,13个1,6个3,故该消息符 号序列的自信息量为: I(x)= -㏒2( 8 3)14 (41)25 (81)6 =87.81bit 平均每个符号携带的信息量为: L H (x)= 45 ) (x I =1.95bit/符号 2-10 解:用1x 表示第一次摸出的球为黑色,用2x 表示第一次摸出的球为白色,用1y 表示第二次摸出的球为黑色,用2y 表示第二次摸出的球为白色,则 (1)一次实验包含的不确定度为: H(X)=-p(1x )lbp(1x )-p(2x )lbp(2x )=- 13lb 13-23lb 2 3 =0.92 bit (2)第一次实验X 摸出的球是黑色,第二次实验Y 给出的不确定度: H(Y|1x )=-p(1y |1x )lb p(1y |1x )-p(2y |1x )lb p(2y |1x ) = - 27lb 27-57lb 57 = 0.86 bit (3)第一次实验X 摸出的球是白色,第二次实验Y 给出的不确定度:

算术编码

实验三算术编码 一、实验目的 1、复习C++语言基本编写方法,熟悉VC编程环境。 2、复习算术编码基本流程, 学会调试算术编码编码程序。 3、根据给出资料,自学自适应0阶算术编、解码方法。 二、实验内容 1.复习C++代码基本语法(类和虚函数等面向对象数据结构定义) 2.根据实验提供的源代码,学习算术编码实现流程,培养实际动手调试能力和 相应的编程技巧。 三、实验仪器、设备 1.计算机-系统最低配置256M 内存、P4 CPU。 2.C++ 编程软件-Visual C++ 7.0 (Microsoft Visual Studio 2003) Visual C++ 8.0 (Microsoft Visual Studio 2005) 四、实验原理 1.算术编码基本原理是将编码消息表示成实数0 和1 之间的一个间隔,消息 越长,编码表示它的间隔就越小,表示这一间隔所需的二进制位就越多。算术编码用到两个基本的参数:符号的概率和它的编码间隔。信源符号的概率决定压缩编码 的效率,也决定编码过程中信源符号的间隔,而这些间隔包含在0 到1 之间。编码 过程中的间隔决定了符号压缩后的输出。如何解压缩呢?那就更简单了。解压缩之前仍然假定三个字符的概率相等。解压缩时面对的是二进制流 1010001111,先在前面加上 0 和小数点把它变成小数0.1010001111,也就是十进制 0.64。这时我们发现 0.64 在分布图中落入字符 b 的区间内,立即输出字符 b,并得出三个字符新的概率分布。类似压缩时采用的方法,我们按照新的概率分布划分字符 b 的区间。在新的划分中,我们发现 0.64 落入了字符c 的区间,我们可以输出字符 c。同理,我们可以继续输出所有的字符,完成全部解压缩过程。 2.小数存储方法 如果信息内容特别丰富,我们要输出的小数将会很长很长,该如何在内存中表 示如此长的小数呢?其实,没有任何必要在内存中存储要输出的整个小数。从上面 的例子可以知道,在编码的进行中,会不断地得到有关要输出小数的各种信息。具 体地讲,当我们将区间限定在 0.6390 - 0.6501 之间时,我们已经知道要输出的小数第一位(十进制)一定是 6,那么我们完全可以将 6 从内存中拿掉,接着在区间 0.390 - 0.501 之间继续我们的压缩进程。内存中始终不会有非常长的小数存在。 使用二进制时也是一样的,我们会随着压缩的进行不断决定下一个要输出的二进制 位是 0 还是 1,然后输出该位并减小内存中小数的长度,具体可以参考E1/E2/E3 放大原理,及它们之间关系的描述。 3.静态模型与自适应模型 1)静态模型 对信息 bccb 我们统计出其中只有两个字符,概率分布为 Pb = 0.5,Pc = 0.5。在压缩过程中不必再更新此概率分布,每次对区间的划分都依照此分布即可,对上例 也就是每次都平分区间。这样,压缩过程可以简单表示为: 输出区间的下限输出区间的上限 ------------------------------------------------------------------------ 压缩前 0.0 1.0 输入 b 0.0 0.5 输入 c 0.25 0.5 输入 c 0.375 0.5 输入 b 0.375 0.4375

相关主题
文本预览
相关文档 最新文档