资源描述:
《率失真函数计.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、云南大学数学与统计学实验教学中心实验报告课程名称:计算机网络实验学期:2012-2013学年第二学期成绩:指导教师:陆正福学生姓名:卢富毓学生学号:实验名称:率失真函数计算实验要求:必做实验学时:4学时实验编号:No.12实验日期:2013/3/28完成日期:2013/6/6学院:数学与统计学院专业:信息与计算科学年级:2010级一、实验目的:通过实验掌握率失真实验的构造算法,以及其重要思想。二、实验内容:查阅资料,完成率失真函数的计算实验(提示:其算法类似于信道容量的迭代计算算法)三、实验环境Win7、Matlab四、实验过程(请学生认真填写):实验过程、结果以及相应的解释:1.预
2、备知识信息论第二章的熵是针对不失真的情况,而在实际应用中只需要保留信息的主要特征即可,信号允许一定程度的失真,而率失真理论就是在这种情况下提出的。在实际问题中,信号有一定的失真是可以容忍的,但是当失真大于某个限度是,信号将会被严重损害,为此引入了失真函数d的概念。2.实验过程A、原理分析:计算率失真函数的算法如下:计算信源的信息率失真函数R(D),即已知A、信源的概率分布B、失真函数在这里采用的Blahut-Arimoto算法来计算率失真函数,这是一种交替迭代算法,与求信道容量相仿。具体迭代算法步骤如下:A、先假定一个负数做为,选定初始概率转移矩阵组成()阶初始矩阵B、把选定的初始概
3、率转移矩阵代入表达式中,得到相应的,然后将代入表达式中,得到相应的C、再用代入表达式中,得到相应的,然后将代入表达式中,得到相应的D、以此类推,直到与,与的差值在允许的精度之内,则或就是这个S1值所对应的信息率失真函数R(S1)的近似值。E、再选定一个略大一点的负数做为S2值,重复以上迭代过程,得到这个S2值所对应的信息率失真函数R(S2)的近似值。F、这个过程一直到信息率失真函数R(Smax)接近0为止,随着S1,S2,S3,...,Smax的选定就可以得到信息率失真函数R(S)的曲线。由于matlab在处理矩阵上很方便以及时间的不足,本实验就用matlab来实现的。A、具体代码如
4、下://具体实现代码function[]=RD(Pa,d,S)formatlongS=[];r=input('输入信源数r=');s=input('输出信源数s=');d=input('失真矩阵d=');Pa=input('输入概率分布Pa=');S(1)=-99.5times=100;pba=[];RS=[];DS=[];m=1;forz=1:times%初始化¯Pba(1:r,1:s,1)=1/(r*s)*ones(r,s);forj=1:sPb(j,1)=0;fori=1:rPb(j,1)=Pb(j,1)+Pa(i)*Pba(i,j,1);endendfori=1:rtemp(
5、i)=0;forj=1:stemp(i)=temp(i)+Pb(j,1)*exp(S(m)*d(i,j));endendfori=1:rforj=1:sPba(i,j,2)=(Pb(j,1)*exp(S(m)*d(i,j)))/temp(i);end%计算D(1)(S)和R(1)(S)D(1)=0;fori=1:rforj=1:sD(1)=D(1)+Pa(i)*Pba(i,j,1)*d(i,j);endendR(1)=0;fori=1:rforj=1:sif(Pba(i,j,1)~=0)R(1)=R(1)+Pa(i)*Pba(i,j,1)*log2(Pba(i,j,1)/Pb(j,1
6、));endendendn=2;while(1)%计算pn(bj)forj=1:sPb(j,n)=0;fori=1:rPb(j,n)=Pb(j,n)+Pa(i)*Pba(i,j,n);endend%计算pn+1(bj/ai)fori=1:rtemp(i)=0;forj=1:stemp(i)=temp(i)+Pb(j,n)*exp(S(m)*d(i,j));endendfori=1:rforj=1:sif(temp(i)~=0)Pba(i,j,n+1)=(Pb(j,n)*exp(S(m)*d(i,j)))/temp(i);endendend%计算D(n)(S)和R(n)(S)D(n)=
7、0;fori=1:rforj=1:sD(n)=D(n)+Pa(i)*Pba(i,j,n)*d(i,j);endendR(n)=0;fori=1:rforj=1:sif(Pba(i,j,n)~=0)R(n)=R(n)+Pa(i)*Pba(i,j,n)*log2(Pba(i,j,n)/Pb(j,n));endendendif(abs(R(n)-R(n-1))<1e-7)if(abs(D(n)-D(n-1))<1e-7)break;endendn=n+1;end