实验三香农代码
信息论与编码实验报告
系:哈尔滨理工大学荣成校区
专业:电子信息工程
学号:
名称:
日期: 2015年6月16日
香农码
信息论与编码第三次实验报告
一、实验的目的和任务?
1、 理解源代码的意思吗?
2、 你熟悉吗? MATLAB编程;
3、 掌握香农代码的方法和计算机的实现?
4、 对给定的源进行香农编码,计算编码效率;
二、实验原理介绍?
给出某个源符号的概率分布,按以下顺序进行香农编码
? 1、源符号概率从大到小排列;
?
2、满足以下不等式的整数值的长度是多少?
?
3、计算第I条消息的累积概率,以创建唯一可读消息:
?
? 4、将累积概率转换为二进制数;
如果取二进制小数点后的位数,则成为该消息符号的二进制码字。
三.实验设备
电脑
Matlab2014
四.编码程序
n=input(n=); %输入源符号的数量
s=0; 初始化%行的概率
l=0; 初始化%列的概率
H=0; %初始化信息熵
for i=1:N
p(I )=input('p=' ); %输入源符号概率分布向量
p(I ) 1; %输入概率小于1
s=sp(I ); %行的概率总和
h=h(-p ) I ) *log2 ) p ) I ); %计算源信息熵
结束
ifabs(s-1 )0 %报告行概率和1时的错误
错误(不符合概率分布) ) ) )。
结束
for i=1:N-1 %for按循环概率分布大小对源进行排序
for j=i 1:N
IFP(I ) )。
m=p(j;
p(j )=p ) I;
p(I )=m;
结束
结束
结束
for i=1:N
a=-log2(p ) I ); 决定满足%不等式的整数a,将a作为第I个码字的长度
ifmod(a,1 )==0 %a对1取馀数后代入a
w=a;
else
w=fix(a1; %计算每个源符号的代码长度
结束
L=LP(I ) *w; %计算平均代码长度
结束
r=l; %香农编码的消息率(此处为L=1、m=2) ) ) ) ) ) ) ) )。
n=H/r; %编码效率计算
p(1)=0; %初期1列为0;
for i=2:N
p(I )=0; %初期1列为0; 累计加法
for j=1:i-1
p(I )=p ) I ) p ) j; %从两列开始累计
结束
结束
计算%累积概率
for i=1:N
for j=1:w
w(I,j )=福克斯(p ) I ) *2; %每次对p(I )取码字,长度与a相同
p(I )=p(I ) *2-fix ) p (I ) *2); 将%累积概率转换为l(I )位的二进制码字
结束
结束
W %显示码字
r %表示平均代码长度
n %表示编码效率
H %表示信息熵h
实验结果
香农
N=6
p=0.25
p=0.25
p=0.20
p=0.15
p=0.10
p=0.05
W=
0 0 0 0 0
0 1 0 0 0
1 0 0 0 0
1 0 1 1 0
1 1 0 1 1
1 1 1 1 0
r=
2.7000
n=
0.8975
H=
2.4232
六、实验心得
在这次实验中,我们首先进行了需求分析,制定了流程图,了解到需要根据流程图完成各个模块,然后进行调试和编辑,从而提高了我要做的事情