信息论 实验四 香农编码

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

实验四 香农编码

一、实验目的:

掌握香农编码的方法

二、实验内容:

对信源123456,,,,,()0.250.250.020.150.10.05a a a a a a X P X ⎧⎫⎛⎫=⎨⎬ ⎪⎝⎭⎩⎭

进行二进制香农编码。并计算其平均码长,信源熵,和编码效率。

三、实验步骤

(1)将信源符号按概率从大到小的顺序排列。

(2)用Pa (i )表示第i 个码字的累加概率

(3)确定满足下列不等式的整数K (i ),并令K (i )为第i 个码字的长度

22log ()()1log ()Pa i K i Pa i -≤<-

(4)将Pa (i )用二进制表示,并取小数点后K (i )位最为a (i )的编码

四、实验数据及结果分析

(1)将信源符号按概率从大到小的顺序排列。

P=(0.25 0.25 0.2 0.15 0.1 0.05);

(2)用Pa (i )表示第i 个码字的累加概率。

Pa=(0 0.2500 0.5000 0.7000 0.8500 0.9500)

(3)确定满足下列不等式的整数K (i )。

K=(2 2 3 3 4 5)

(4)将Pa (i )用二进制表示,并取小数点后K (i )位最为a (i )的编码

00

01

100

101

1101

11110

(5)计算其平均码长,信源熵,和编码效率

平均码长 L=2.7

信源熵H=2.4232

编码效率xiaolv=0.89749

五、代码附录

N=input('N='); %输入信源符号的个数

s=0;L=0;H=0;

Pa=zeros(1,6);

for i=1:N

P(i)=input('P=');%输入信源符号概率分布

s=s+P(i);

end

if s~=1

error('不符合概率分布');

end

P=sort(P,'descend');

Pa(1)=0;

for i=2:N

Pa(i)=Pa(i-1)+P(i-1);

end

disp(Pa);

for i=1:N

a=-log2(P(i));

if mod(a,1)==0 %计算第i个码字的长度

K(i)=a;

else

K(i)=fix(a+1);

end

L=L+P(i)*K(i); %计算平均码长

H=H-P(i)*log2(P(i));%计算信源熵

End

xiaolv=H/L; %计算编码效率

for i=1:N

for j=1:K(i)

W(i,j)=fix(Pa(i)*2);

Pa(i)=Pa(i)*2-fix(Pa(i)*2);

fprintf('%d',W(i,j));

end

fprintf('\n');

end

六,实验总结:

通过该实验,掌握了香农编码。其中对于小数二进制的转换更是有了深刻的

了解。由编码效率的值可知,其编码效率并不是很高,当不等式

22log ()()1log ()Pa i K i Pa i -≤<-左边的等号成立时,

香农编码有很高的编码效率。

相关文档
最新文档