信息论与编码实验程序与结果图(matlab)

合集下载

信息论与编码实习报告

信息论与编码实习报告

信息论与编码实习报告指导老师:姓名:班级:学号:实验一绘制二进制熵函数曲线一、内容用Matlab软件制作二进制熵函数曲线。

二、要求1.掌握Matlab绘图函数2.掌握、理解熵函数表达式及其性质三.Matlab程序及实验结果1.matlab程序:p=0.00001:0.001:1;h=-p.*log2(p)-(1-p).*log2(1-p);plot(p,h);title('二进制熵函数曲线');ylabel('H(P,1-P)')2.运行结果:结果分析:从图中可已看出当p=0.5即信源等概时熵取得最大值。

实验二一般信道容量迭代算法一、内容编程实现一般信道容量迭代算法。

伪代码见教材。

二、要求1.掌握一般信道容量迭代算法的原理2.掌握MA TLAB开发环境的使用(尤其是程序调试技巧),或者使用C语言完成程序设计三.Matlab程序及运行结果1.matlab程序:clc;clear all;N = input('输入信源符号X的个数N=');M = input('输入信源符号Y的个数M=');p_yx=zeros(N,M); %程序设计需要信道矩阵初始化为零fprintf('输入信道矩阵概率\n')for i=1:Nfor j=1:Mp_yx(i,j)=input('p_yx='); %输入信道矩阵概率if p_yx(i)<0error('不符合概率分布')endendEndfor i=1:N %各行概率累加求和s(i)=0;for j=1:Ms(i)=s(i)+p_yx(i,j);endendfor i=1:N %判断是否符合概率分布if (s(i)<=0.999999||s(i)>=1.000001)error('不符合概率分布')endendb=input('输入迭代精度:'); %输入迭代精度for i=1:Np(i)=1.0/N; %取初始概率为均匀分布endfor j=1:M %计算Q(j)Q(j)=0;for i=1:NQ(j)=Q(j)+p(i)*p_yx(i,j);endendfor i=1:N %计算F(i) f(i)=0;for j=1:Mif(p_yx(i,j)==0)f(i)=f(i)+0;elsef(i)=f(i)+p_yx(i,j)*log(p_yx(i,j)/Q(j));endendF(i)=exp(f(i));endx=0;for i=1:N %计算x x=x+p(i)*F(i);endIL=log2(x); %计算ILIU=log2(max(F)); %计算IUn=1;while((IU-IL)>=b) %迭代计算for i=1:Np(i)=p(i)*F(i)/x; %重新赋值p(i) endfor j=1:M %计算Q(j) Q(j)=0;for i=1:NQ(j)=Q(j)+p(i)*p_yx(i,j);endendfor i=1:N %计算F(i) f(i)=0;for j=1:Mif(p_yx(i,j)==0)f(i)=f(i)+0;elsef(i)=f(i)+p_yx(i,j)*log(p_yx(i,j)/Q(j));endEndF(i)=exp(f(i));endx=0;for i=1:N %计算xx=x+p(i)*F(i);endIL=log2(x); %计算ILIU=log2(max(F)); %计算IUn=n+1;endfprintf('信道矩阵为:\n');disp(p_yx);fprintf('迭代次数n=%d\n',n);fprintf('信道容量C=%f比特/符号',IL);2.运行结果为:若输入信道矩阵为:0.8500 0.15000.7500 0.2500则运行结果为:实验四线性分组码的信道编码和译码一、内容编程实现线性分组码(6,2)重复码的信道编码和译码。

信息论与编码实验2-实验报告

信息论与编码实验2-实验报告

信息论与编码实验2-实验报告信息论与编码实验 2 实验报告一、实验目的本次信息论与编码实验 2 的主要目的是深入理解和应用信息论与编码的相关知识,通过实际操作和数据分析,进一步掌握信源编码和信道编码的原理及方法,提高对信息传输效率和可靠性的认识。

二、实验原理(一)信源编码信源编码的目的是减少信源输出符号序列中的冗余度,提高符号的平均信息量。

常见的信源编码方法有香农编码、哈夫曼编码等。

香农编码的基本思想是根据符号出现的概率来分配码字长度,概率越大,码字越短。

哈夫曼编码则通过构建一棵最优二叉树,为出现概率较高的符号分配较短的编码,从而实现平均码长的最小化。

(二)信道编码信道编码用于增加信息传输的可靠性,通过在发送的信息中添加冗余信息,使得在接收端能够检测和纠正传输过程中产生的错误。

常见的信道编码有线性分组码,如汉明码等。

三、实验内容与步骤(一)信源编码实验1、选取一组具有不同概率分布的信源符号,例如:A(02)、B (03)、C(01)、D(04)。

2、分别使用香农编码和哈夫曼编码对信源符号进行编码。

3、计算两种编码方法的平均码长,并与信源熵进行比较。

(二)信道编码实验1、选择一种线性分组码,如(7,4)汉明码。

2、生成一组随机的信息位。

3、对信息位进行编码,得到编码后的码字。

4、在码字中引入随机错误。

5、进行错误检测和纠正,并计算错误纠正的成功率。

四、实验结果与分析(一)信源编码结果1、香农编码的码字为:A(010)、B(001)、C(100)、D (000)。

平均码长为 22 比特,信源熵约为 184 比特,平均码长略大于信源熵。

2、哈夫曼编码的码字为:A(10)、B(01)、C(111)、D (00)。

平均码长为 19 比特,更接近信源熵,编码效率更高。

(二)信道编码结果在引入一定数量的错误后,(7,4)汉明码能够成功检测并纠正大部分错误,错误纠正成功率较高,表明其在提高信息传输可靠性方面具有较好的性能。

《信息论》实验指导书—-应用MATLAB软件实现

《信息论》实验指导书—-应用MATLAB软件实现

《信息论》实验指导书—-应用M A T L A B软件实现-CAL-FENGHAI.-(YICAI)-Company One1《信息与编码理论》上机实验指导书———————应用MATLAB软件实现UPC通信工程系前言本实验系列是采用MATLAB软件,主要针对《信息论基础》课程中的相关内容进行的实验。

MATLAB是一完整的并可扩展的计算机环境,是一种进行科学和工程计算的交互式程序语言。

它的基本数据单元是不需要制定维数的矩阵,它可直接用于表达数学的算式和技术概念,解决同样的数值计算问题,使用MATLAB要比使用Basic、Fortran和C语言等提高效率许多倍。

MATLAB还是一种有利的教学工具,在大学的线性代数课程以及其它领域的高一级课程的教学中,已称为标准的教学工具。

该指导书共安排了4个实验,现就一些情况作简要说明:各实验要求学生在MATLAB系统上尽量独立完成,弄懂。

实验内容紧扣课程教学内容的各主要基本概念,希望同学们在完成每个实验后,对所学的内容起到巩固和加深理解的作用。

每个实验做完后必须交一份实验报告。

恳请各位实验老师和同学在实验中提出宝贵意见,以利于以后改进提高。

目录实验一离散信源及其信息测度 (3)实验二离散信道及其容量 (6)实验三无失真信源编码 (8)实验四有噪信道编码 (10)附录部分常用MATLAB命令 (12)实验一 离散信源及其信息测度一、[实验目的]离散无记忆信源是一种最简单且最重要的信源,可以用完备的离散型概率空间来描述。

本实验通过计算给定的信源的熵,加深对信源及其扩展信源的熵的概念的理解。

二、[实验环境]windows XP,MATLAB三、[实验原理]信源输出的各消息的自信息量的数学期望为信源的信息熵,表达式如下 1()[()]()log ()qi i i H X E I xi p x p x ===-∑信源熵是信源的统计平均不确定性的描述,是概率函数()p x 的函数。

信息论编码实验一MATLAB的基本操作

信息论编码实验一MATLAB的基本操作

实验一 MATLAB 的基本操作一、实验目的1、掌握Matlab 软件使用的基本方法;2、熟悉Matlab 的数据表示、基本运算方法;3、熟悉Matlab 绘图命令及基本绘图控制。

二、实验仪器与软件1、PC 机 1台2、MATLAB7.0环境三、实验原理MATLAB 环境是一种为数值计算、数据分析和图形显示服务的交互式的环境。

MATLAB 有3种窗口,即:命令窗口(The Command Window )、m-文件编辑窗口(The Edit Window )和图形窗口(The Figure Window ),而Simulink 另外又有Simulink 模型编辑窗口。

1、命令窗口(The Command Window )当MATLAB 启动后,出现的最大的窗口就是命令窗口。

用户可以在提示符“>>”后面输入交互的命令,这些命令就立即被执行。

在MATLAB 中,一连串命令可以放置在一个文件中,不必把它们直接在命令窗口内输入。

在命令窗口中输入该文件名,这一连串命令就被执行了。

因为这样的文件都是以“.m ”为后缀,所以称为m-文件。

2、m-文件编辑窗口(The Edit Window )我们可以用m-文件编辑窗口来产生新的m-文件,或者编辑已经存在的m-文件。

在MATLAB 主界面上选择菜单“File/New/M-file ”就打开了一个新的m-文件编辑窗口;选择菜单“File/Open ”就可以打开一个已经存在的m-文件,并且可以在这个窗口中编辑这个m-文件。

如,计算3[(12)34)]2+⨯-÷,只需在提示符“>>”后输入“((1+2)*3-4)/2^3”,然后按Enter 键。

该命令行涉及加、减、乘、除及幂运算符,MATLAB 运算的执行次序遵循的优先规则为:从左到右执行;幂运算具有最高的优先级,乘法和除法具有相同的次优先级,加法和减法有相同的最低优先级;使用括号可以改变前述优先次序,并由最内层括号向外执行。

信息论与编码实验报告

信息论与编码实验报告

信息论与编码实验报告实验一:英文文本信息量的计算一、实验目的及要求a)实验目的1。

通过本实验熟悉MATLAB软件编程环境。

2.编写m文件,实现英文文本信息的统计,掌握信息和源熵的计算方法。

B)实验要求1。

了解m文件在MATLAB中的编辑和调试过程。

2.编写程序实现给定英文文本信息的统计。

3.英语本中字母不区分大小写,考虑空格的信息量,但不考虑标点符号的信息量4、建议英文文本采用txt格式二、实验步骤和操作结果记录a)实验步骤1、查找各个英文字母及空格出现的频率2、在matlab中读取给定的英文文章(该文章为txt格式)3、计算英文文章的长度4、统计在该文章中各个字母及空格出现的次数并放入数组n中5、计算各个字母和空格的信息量及整篇文章的信息量6、计算信源熵b)实验结果sumi=3.0516e+003;h=4.0324三、程序流程图(附件1)IV.程序列表和每个句子的注释(附件2)v.实验总结通过这次实验,我熟悉了MATLAB软件编程环境以及一些函数的功能和用法,掌握了信息熵和源熵的计算方法。

一附一:开始读取英文文章计算文章的长度嵌套的for循环语句假判断是否符合循环条件真如果没有其他选项,则确定单词是否大写。

输入相应的频率否elseif要确定它是否为小写,需要计算每个字母、空格和整篇文章的信息量判断是否为小写字母是计算源熵是非常困难的放入数组n中对应的位置放入数组n中对应的位置放入数组n中对应的位置结论附件二:wenzhang=textread('实验一:englishtext.txt','\');m=尺寸(文章);row=m(1,1);直线=m(1,2);n=零(1,27);fori=1:rowforj=1:line%读取英文文章%文章的长度如果double(wenzhang(i,j))>96&&double(wenzhang(i,j))<=122n(1,double(wenzhang(i,j))-96)=n(1,double(wenzhang(i,j))-96)+1;埃尔塞夫double(wenzhang(i,j))>64&&double(wenzhang(i,j))<=90n(1,双(文章(i,j))-64)=n(1,双(文章(i,j))-64)+1;埃尔塞夫double(wenzhang(i,j))==32n(1,27)=n(1,27)+1;endendend%统计各字母和空格出现的个数并存入n数组中。

信息论与编码实验报告

信息论与编码实验报告

实验一:计算离散信源的熵一、实验设备:1、计算机2、软件:Matlab二、实验目的:1、熟悉离散信源的特点;2、学习仿真离散信源的方法3、学习离散信源平均信息量的计算方法4、熟悉 Matlab 编程;三、实验内容:1、写出计算自信息量的Matlab 程序2、写出计算离散信源平均信息量的Matlab 程序。

3、将程序在计算机上仿真实现,验证程序的正确性并完成习题。

四、求解:1、习题:A 地天气预报构成的信源空间为:()⎥⎦⎤⎢⎣⎡=⎥⎦⎤⎢⎣⎡6/14/14/13/1x p X 大雨小雨多云晴 B 地信源空间为:17(),88Y p y ⎡⎤⎡⎤⎢⎥=⎢⎥⎢⎥⎣⎦⎣⎦ 小雨晴 求各种天气的自信息量和此两个信源的熵。

2、程序代码:p1=[1/3,1/4,1/4,1/6];p2=[7/8,1/8];H1=0.0;H2=0.0;I=[];J=[];for i=1:4H1=H1+p1(i)*log2(1/p1(i));I(i)=log2(1/p1(i));enddisp('自信息I分别为:');Idisp('信息熵H1为:');H1for j=1:2H2=H2+p2(j)*log2(1/p2(j));J(j)=log2(1/p2(j));enddisp('自信息J分别为');Jdisp('信息熵H2为:');H23、运行结果:自信息量I分别为:I = 1.5850 2.0000 2.0000 2.5850信源熵H1为:H1 = 1.9591自信息量J分别为:J =0.1926 3.0000信源熵H2为:H2 =0.54364、分析:答案是:I =1.5850 2.0000 2.0000 2.5850 J =0.1926 3.0000H1 =1.9591; H2 =0.5436实验2:信道容量一、实验设备:1、计算机2、软件:Matlab二、实验目的:1、熟悉离散信源的特点;2、学习仿真离散信源的方法3、学习离散信源平均信息量的计算方法4、熟悉 Matlab 编程;三、实验内容:1、写出计算自信息量的Matlab 程序2、写出计算离散信源平均信息量的Matlab 程序。

信息论与编码实验报告

信息论与编码实验报告

《信息论与编码》实验报告《信息论与编码》实验报告实验序号:02 实验项目名称:离散信道及其信道容量结论:1、当输入和输出符号个数相同,且都等于r 时,则此信道称为强对称信道或均匀信道;2、这类信道中总的错误概率为 p ,对称地平均分配给r-1个输出符号。

实验内容二:平均互信息I (X ;Y )是凸函数的论文一、 问题:由信源的概率分布P (Y )=对x 求和P (X )*P(Y|X)和平均互信息I(X;Y)=对x,y 求和p(x)*P(y|x)*logP(y|x)/P(y)可知,平均互信息只与信源的概率分布和信道的传递概率有关,但是它们之间有种什么关系?二、 证明定理一:平均互信息I(X;Y)是输入信源的概率分布P(x)的形函数(上凸函数)解: 根据上凸函数的定义来证明,先固定信道,即信道的传递概率P(y|x)是固定的。

那么平均互信息I(X;Y)将只是P(x)的函数,简写成I[P(x)]。

现选择输入信源X 的两种已知的概率分布P1(x)和P2(x)。

其对应的联合分布概率为P1(xy)=P1(x)P(y|x)和P2(xy)=P2(x)P(y|x),因而信道输出端的平均互信息分别为I[P1(x)]和I[P2(x)]。

再选择输入变量X 的另一种概率分布P(x),令01θ<<,和1θθ+=,而P(x)= 12()()P x P x θθ+,因而得其相应的平均互信息为I[P(x)]。

根据平均互信息的定义得1212,,,12[()][()][()](|)(|)(|)()log()log ()log ()()()x yx y x y I P x I P x I P x P y x P y x P y x P xy P xy P xy P y P y P y θθθθ+-=+-∑∑∑结论:平均互信息与信源的概率分布有关,有上可知,平均互信息是输入信源的概率分布P(x)的形凸函数。

定理二:平均互信息I(X;Y)是信道传递概率P(Y|X)的形凸函数(又称下凸函数)猜想:由平均互信息是输入信源的概率分布的形凸函数知,当固定某信道时,选择不同的信源(其概率分布不同)与信道连接,在信道输出端接收到每个符号后获得的信息量是不同的。

信息论与编码技术之实验

信息论与编码技术之实验

前两个是别人的,后两个是自己的,学术交流,抛砖引玉。

信息论与编码 实验报告样板实验室名称:S1-306实验一 二维随机变量信息熵的计算 教学实验报告[实验目的]掌握二变量多种信息量的计算方法。

[实验要求]1.熟悉二变量多种信息量的计算方法,设计实验的数据结构和算法;2.编写计算二维随机变量信息量的书面程序代码。

[实验内容]离散二维随机变换熵的计算说明:(1)利用random 函数和归一化方法构造一个二维离散随机变量(X ,Y );(2)分别计算X 与Y 的熵、联合熵、条件熵:H (X )、H (Y )、H (X,Y )H (X|Y )、I (X|Y );(3)对测试通过的程序进行规范和优化;(4)编写本次实验的实验报告。

[实验步骤]实验过程中涉及的各种熵的主要公式(或定义式):1、离散信源熵(平均不确定度/平均信息量/平均自信息量)()()()()log ()i i i i i i H X p x I x p x p x ==-∑∑2、在给定某个y j 条件下,x i 的条件自信息量为I(x i /y j ),X 集合的条件熵H (X/y j )为 ,,(/)(/)(/)Y X H(X/Y)()(/)()(/)(/)()(/)j i j i j ij j j i j i j j i ji j i j i jH X y p x y I x y p y H X y p y p x y I x y p x y I x y ===∑∑∑∑在给定条件下,集合的条件熵为:H(X/Y)=相应地,在给定X (即各个x i )的条件下,Y 集合的条件熵H(Y/X)定义为:,,(/)()(/)()log (/)i j j i i j j i i j i jH Y X p x y I y x p x y p y x ==-∑∑3、联合熵是联合符号集合 XY 上的每个元素对x i y j 的自信息量的概率加权统计平均值,表示X 和Y 同时发生的不确定度。

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

结果图信源熵实验程序:clc; close all; clear;linwidd=1fontt=20p0=0; pd=1; N=20p=linspace(p0,pd,N);I=-log2(p);plot(p,I,'k');title('I=-log2(p)函数图');xlabel('p');ylabel('I');clc; close all; clear;linwidd=1fontt=20p0=0; pd=1; N=20p=linspace(p0,pd,N);H=-p.*log2(p)-(1-p).*log2(1-p);plot(p,H,'k');title('H=-p.*log2(p)-(1-p).*log2(1-p)函数图');xlabel('p');ylabel('H');信道容量实验程序:clc; close all; clear;linwidd=1fontt=20p0=0; pd=1; N=20p=linspace(p0,pd,N);r=4c=log2(r)+(1-p).*log2(1-p)+p.*log2(p/(r-1));plot(p,c,'k');title('强对称信道容量数值模拟图');有噪信道编码--费诺不等式程序:结果图clc;close all;clear;r=3;p0=0.00001;pd=0.99999;N=2000;p=linspace(p0,pd,N);q=1-p;H=-p.*log2(p)-q.*log2(q);hold onHH=H+p.*log2(r-1)title('费诺不等式示意图');box onxlabel('PE');ylabel('H(X/Y)');plot(p,HH,'k:')hold onhold onfill([p,1],[HH,0],[0.6,0.6,0.6])stem((r-1)/r,1.59,'--.r')text(0.66,1.6,'最大值')香农编码程序:clc;clear all;close all;p=[0.2 0.19 0.18 0.17 0.15 0.1 0.01]; if sum(p)<1||sum(p)>1error('输入概率不符合概率分布')end[p index]=sort(p,'descend');n=length(p);pa=zeros(n,1);for ii=2:npa(ii)=pa(ii-1)+p(ii-1);endk=ceil(-log2(p));%码字长度计算c=cell(1,n);%生成元胞数组,用来存不同长度的码字for ii=1:nc{ii}='';tmp=pa(ii);for jj=1:k(ii)tmp=tmp*2;if tmp>=1tmp=tmp-1;%c{ii}{jj}='1';c{ii}=[char(c{ii}),'1']; else%c{ii}{jj}='0';c{ii}=[char(c{ii}),'0']; endendend c(index)=c;%换回原来的顺序codelength=zeros(1,n);%码长初始化for ii=1:nfprintf(['第',num2str(ii),'个消息对应为']);disp(c{ii});%显示码字codelength(ii)=length(c{ii});%endn_average=sum(codelength.*p) %平均码长fprintf('平均码长为');disp(n_average);H=-sum(p.*log2(p));fprintf('信源熵');disp(H);x=H/(n_average.*log2(2))fprintf('编码效率');disp(x);figureh=stem(1:n,codelength);%axis([0 n+1 0 n+1]);set(h,'MarkerFaceColor','blue','linewidth',2)实验结果结果图第1个消息对应为000第2个消息对应为001第3个消息对应为011第4个消息对应为100第5个消息对应为101第6个消息对应为1110第7个消息对应为1111110n_average = 3.1400平均码长为 3.1400信源熵 2.6087x =0.8308编码效率 0.8308费诺编码程序:endfor rr=2:2:needgroupnum*2index2=index_aftergroup(rr,:);for ii=index2(1):index2(2)c{ii}=[char(c{ii}),'1']; endendflag=0;index_p=[];for rr=1:needgroupnum*2indextmp=index_aftergroup(rr,:); if(indextmp(2)-indextmp(1)+1>1) flag=1;index_p=[index_p;indextmp]; endendjj=jj+1;endc(index)=c;codelength=zeros(1,N);for ii=1:Nfprintf(['第',num2str(ii),'个消息对应为']);disp(c{ii});codelength(ii)=length(c{ii}); endn_average=sum(codelength.*p)fprintf('平均码长为');disp(n_average);H=-sum(p.*log2(p));fprintf('信源熵');disp(H);x=H/(n_average.*log2(2))fprintf('编码效率');disp(x); figureh=stem(1:N,codelength);axis([0 N+1 0 N+1]);set(h,'MarkerFaceColor','blue','linewidth',2)endfunction index_aftergroup=func_group(p,index_p)index=index_p(1):index_p(2);n=length(index);p0=p(index);sump0=sum(p0);half_sump0=sump0/2;for ii=1:n-1tmpsum=sum(p0(1:ii));if abs(tmpsum-half_sump0)<=abs(tmpsum-half_sump0+p0(ii+1))index_aftergroup=[index(1) index(ii);index(ii+1) index(n)]; break;endendend实验结果结果图第1个消息对应为00第2个消息对应为010第3个消息对应为011第4个消息对应为10第5个消息对应为110第6个消息对应为1110第7个消息对应为1111n_average = 2.7400平均码长为 2.7400信源熵 2.6087x =0.9521编码效率 0.9521霍夫曼编码程序:clc;clear all;close all; A=[0.4 0.2 0.2 0.1 0.1]; A=sort(A,'descend');T=A;[m,n]=size(A);B=zeros(n,n-1);B(:,1)=T;r=B(n,1)+B(n-1,1);T(n-1)=r; T(n)=0;T=sort(T,'descend');t=n-1;for j=2:n-1B(1:t,j)=T(1:t);K=find(T==r);%B(n,j)=K(end);B(n,j)=K(1);r=(B(t-1,j)+B(t,j));T(t-1)=r;T(t)=0;T=sort(T,'descend');t=t-1;endB;ENDc1=sym('[1,0]');ENDc=ENDc1;t=3;d=1;for j=n-2:-1:1for i=1:t-2if i>1&&B(i,j)==B(i-1,j)d=d+1;elsed=1;endB(B(n,j+1),j+1)=-1;temp=B(:,j+1);x=find(temp==B(i,j));ENDc(i)=ENDc1(x(d));endy=B(n,j+1);ENDc(t-1)=[char(ENDc1(y)),'1']; ENDc(t)=[char(ENDc1(y)),'0'];t=t+1;ENDc1=ENDc;endA%排序后的原概率序列ENDc%编码结果for i=1:n[a,b]=size(char(ENDc(i)));L(i)=b;endavlen=sum(L.*A)%平均码长selen=(L-avlen).^2%?mselen=sum((selen).*A)%码长均方差H=-A*(log2(A'))%?P=H/avlen%?figure;subplot(2,1,1)h=stem(1:n,selen);%axis([0 n+1 0 max(selen)+0.1]);set(h,'MarkerFaceColor','blue','lin ewidth',2)xlabel('信源向上排');ylabel('方差值selen');hold onplot(0:n+1,mselen*ones(1,n+2),'r',' linewidth',2);hold offlegend('每个信源码长与平均码长的方差','码长均方差');A=[0.4 0.2 0.2 0.1 0.1];A=sort(A,'descend');T=A;[m,n]=size(A);B=zeros(n,n-1); B(:,1)=T;r=B(n,1)+B(n-1,1);T(n-1)=r;T(n)=0;T=sort(T,'descend');t=n-1;for j=2:n-1B(1:t,j)=T(1:t);K=find(T==r);B(n,j)=K(end);%B(n,j)=K(1);r=(B(t-1,j)+B(t,j));T(t-1)=r;T(t)=0;T=sort(T,'descend');t=t-1;endB;ENDc1=sym('[1,0]');ENDc=ENDc1;t=3;d=1;for j=n-2:-1:1for i=1:t-2if i>1&&B(i,j)==B(i-1,j)d=d+1;elsed=1;endB(B(n,j+1),j+1)=-1;temp=B(:,j+1);x=find(temp==B(i,j));ENDc(i)=ENDc1(x(d));endy=B(n,j+1);ENDc(t-1)=[char(ENDc1(y)),'1'];ENDc(t)=[char(ENDc1(y)),'0'];t=t+1;ENDc1=ENDc;endA%排序后的原概率序列ENDc%编码结果for i=1:n[a,b]=size(char(ENDc(i)));L(i)=b;endavlen=sum(L.*A)%平均码长selen=(L-avlen).^2%?mselen=sum((selen).*A)%码长均方差H=-A*(log2(A'))%?P=H/avlen%?subplot(2,1,2)h=stem(1:n,selen);%axis([0 n+1 0 max(selen)+0.1]);set(h,'MarkerFaceColor','blue','linewidth',2)xlabel('信源向下排');ylabel('方差值selen');hold onplot(0:n+1,mselen*ones(1,n+2),'r','linewidth',2);hold offlegend('每个码长与平均码长的方差','码长均方差');实验结果A = 0.4000 0.2000 0.20000.1000 0.1000ENDc =[ 11, 1, 0, 101, 100]avlen = 1.8000selen = 0.0400 0.6400 0.64001.4400 1.4400mselen =0.5600H =2.1219P =1.1788A =0.4000 0.2000 0.20000.1000 0.1000ENDc =[ 0, 10, 111, 1101, 1100]avlen =2.2000selen = 1.4400 0.0400 0.64003.2400 3.2400mselen =1.3600H =2.1219P =0.9645结果图。

相关文档
最新文档