信息论与编码实验报告院系:哈尔滨理工大学荣成校区专业:电子信息工程学号:姓名:日期:2015年6月16日香农编码信息论与编码第三次实验报告一、实验目的和任务1、理解信源编码的意义;2、熟悉MATLAB程序设计;3、掌握香农编码的方法及计算机实现;4、对给定信源进行香农编码,并计算编码效率;二、实验原理介绍给定某个信源符号的概率分布,通过以下的步骤进行香农编码1、信源符号按概率从大到小排列;nppp......212、确定满足下列不等式的整数码长iK为1)(K)lb(p-iiiplb3、为了编成唯一可译码,计算第i个消息的累加概率:11)(lKKiapp4、将累加概率iP变换成二进制数;5、取iP二进制数的小数点后iK位即为该消息符号的二进制码字。三、实验设备1、计算机2、Matlab2014四、编码程序N=input('N=');%输入信源符号的个数s=0;%对行的概率进行初始化l=0;%对列的概率初始化H=0;%对信息熵初始化fori=1:Np(i)=input('p=');%输入信源符号概率分布矢量p(i)1;%输入概率小于1s=s+p(i);%行概率求和H=H+(-p(i)*log2(p(i)));%计算信源信息熵endifabs(s-1)0%若行概率和1则报错error('不符合概率分布')endfori=1:N-1%for循环按概率分布大小对信源排序forj=i+1:Nifp(i)p(j)%冒泡排序m=p(j);p(j)=p(i);p(i)=m;endendendfori=1:Na=-log2(p(i));%确定满足不等式的整数a,并领a为第i个码字的长度ifmod(a,1)==0%a对1取余后赋值给aw=a;elsew=fix(a+1);%计算各信源符号的码长endl=l+p(i)*w;%计算平均码长endr=l;%香农编码的信息率(这里L=1,m=2)n=H/r;%计算编码效率P(1)=0;%初始1列为0;fori=2:NP(i)=0;%初始1列为0;累加forj=1:i-1P(i)=P(i)+p(j);%从2列开始累加endend%计算累加概率fori=1:Nforj=1:wW(i,j)=fix(P(i)*2);%对每次的P(i)取码字,长度与a相同P(i)=P(i)*2-fix(P(i)*2);%将累加概率转化为L(i)位二进制码字endendW%显示码字r%显示平均码长n%显示编码效率H%显示信息熵H五、实验结果xiangnongN=6p=0.25p=0.25p=0.20p=0.15p=0.10p=0.05W=000000100010000101101101111110r=2.7000n=0.8975H=2.4232六、实验心得此次实验让我明白了做程序需要先进行需求分析,然后画出流程图,根据流程图把每部分模块完成,然后再进行调试和编辑,提高了我做编程的能力