实验3-率失真函数计算的程序设计
《率失真函数》课件

模拟退火算法
通过模拟物理中的退火 过程,在解空间中随机
搜索最优解。
优化算法的步骤和流程
2. 评估
计算目标函数f(x0)和约束条件 g(x0)和h(x0)。
4. 终止条件
判断是否满足终止条件,如达 到最大迭代次数或目标函数变 化小于预设阈值等。
1. 初始化
设置初始解x0和参数如学习率 、迭代次数等。
3. 迭代更新
根据当前解x0和参数,计算新 的解x1 = x0 - 学习率 * 梯度 ,并更新目标函数和约束条件 。
5. 输出
输出最优解x*和目标函数的最 小值或最大值。
04 率失真函数的应用场景
数据压缩
高效压缩与解压
率失真函数在数据压缩领域中发挥了关键作用。通过最小化信息损失,它能够将大量数据高效地压缩为较小的文件,同时保 持数据的可读性和完整性。这使得率失真函数成为数据存储和传输的重要工具,特别是在带宽有限或存储空间受限的环境中 。
在此添加您的文本16字
2. 记录每个失真度和码率下的性能指标。
在此添加您的文本16字
3. 分析实验数据,绘制率失真曲线。
实验结果分析
01
02
03
数据分析
通过对比不同失真度和码 率下的性能指标,分析率 失真函数的特性。
结果解释
解释率失真函数曲线的形 状和意义,说明其在图像 和音频编码中的应用。
结论总结
05 实验与案例分析
实验设计
在此添加您的文本17字
实验目标:通过实验,理解和掌握率失真函数的基本概念 和性质。
在此添加您的文本16字
实验原理:基于信息论和编码理论,通过模拟不同失真度 和码率的编码过程,观察率失真函数的形状和特性。
信息论与编码实验报告-率失真函数

实验报告课程名称:信息论与编码姓名:系:专业:年级:学号:指导教师:职称:年月日实验五 率失真函数一、 实验目的验证率失真函数的极值特性,理解相关参数的变化对率失真函数的影响。
二、实验原理(1)输入S ,d 的初始值、条件概率、输出分布等值; (2)计算输出分布∑==Mi j i j pji pi q 1;(3)进入迭代,标志为0或者误差大于指定eps 则迭代,否则退出迭代; (4)计算一个互信息∑∑===Mi Mj jij ij i q pji pji pi pji qj I 11)log();(;(5)计算一个条件概率分布∑==Mk Sd k Sd j ikijeq eq i j P 1);(;(6)重算一次(4),并计算∑==M i ij ij i d pji pi D 1;(7)重算(3)-(7)步骤,直到退出迭代;三、实验环境Microsoft Windows 7、 Visual Studio 2005 profession四、编码程序#include <iostream>#include <math.h> #include <iomanip> using namespace std; //Define some global var const int M = 10; //M 元信源 const double S = -50; //迭代算法中的中间量,S 越小,允许最大失真度D 越小,当S 很小时(例如-100),R(D)=H(X) static int d[M][M]; //失真函数 static double q[M], Pji[M][M]; //输出分布和条件概率分布static double Pi[M] = {0.4, 0.1, 0.25, 0.1, 0.05, 0.05, 0.01, 0.02, 0.005, 0.015}; //初始化信源的概率分布 const int systemDefine = 2; //定义进制(默认为2进制,结果为bit ,为e 时,结果为nat )const double eps = 1e-8; //允许误差//计算输出分布(qj)void calcOutDistribution(){int i, j;for(j=0; j<M; j++){q[j]=0;for(i=0; i<M; i++){q[j] += Pi[i] * Pji[i][j];}}}//计算条件概率分布pjivoid calcProbabilityDistribution(){int i, j, k;double temp = 0;for(i=0; i<M; i++){temp = 0;for(k=0; k<M; k++){temp = temp + q[k] * exp(S*d[i][k]);}for(j=0; j<M; j++){//设定一个初始的条件概率分布Pji[i][j] = q[j] * exp(S*d[i][j])/temp;}}}//取得R(r,r)=I(qj;Pji)【实际上就是根据互信息量公式求互信息】double getSelfInformation(){int i, j;double I=0;for(i=0; i<M; i++)for(j=0; j<M; j++){I += Pi[i] * Pji[i][j] * log(Pji[i][j]/q[j])/log(systemDefine); //求互信息量}}return I;}int main(int argc, char *argv[]){double probabilityCount = 0.0; //概率和for(int k=0; k<M; k++){probabilityCount += Pi[k];}//和不为1,说明概率有错误if(fabs(probabilityCount-1.0) > eps){cout<<"概率和不为1,程序异常退出!"<<endl;return -1;}//前两个变量代表求的相邻的两个互信息R(r, r)和R(r, r+1);D代表限定失真double mutualInformation1, mutualInformation2, D;int i, j, flag, nCount;//初始值mutualInformation1 = 0;mutualInformation2 = 0;D = 0;flag = 0;nCount = 0; //迭代次数指示器//init mothod//输出分布的初始化for(i=0; i<M; i++){q[i] = 0;}//率失真函数的初始化,根据汉明失真距离来初始化for(i=0; i<M; i++){for(j=0; j<M; j++){if(i == j){d[i][j] = 0;}else{d[i][j] = 1;}}}for(i=0; i<M; i++){for(j=0; j<M; j++){//设定一个初始的条件概率分布Pji[i][j] = 1/(double)(M);}}//计算输出分布calcOutDistribution();//迭代算法cout<<"误差精度:"<<eps<<endl;while(flag == 0 || fabs(mutualInformation2-mutualInformation1) > eps){cout<<setprecision(20)<<endl<<"第"<<++nCount<<"次迭代"<<endl;flag = 1;//获得一个互信息R(r, r)mutualInformation1 = getSelfInformation();//计算下一个条件概率分布calcProbabilityDistribution();//在上面的原来的输出分布q和新生成的条件概率分布Pji的基础上获得新的互信息R(r, r+1)mutualInformation2 = getSelfInformation();//再计算条件概率分布calcOutDistribution();cout<<"互信息1:"<<mutualInformation1<<endl<<"互信息2:"<<mutualInformation2<<endl;for(i=0; i<M; i++){for(j=0; j<M; j++){//求最大允许失真度DD = D + Pi[i]*Pji[i][j]*d[i][j];}}cout<<"D = "<<D<<endl;cout<<"R(D) = "<<mutualInformation2<<endl; //这是利用迭代算法求出的最大允许失真度为D时的R(D)cout<<"------------================------------"<<endl;}return 0;}五、实验结果运行实验结果如下:六、实验总结通过这次实验,让我们更好的掌握了率失真的求解方法,而且通过计算机解决问题效率提高了很多,节省了很多繁琐的步骤,更加直观和方便的让我们了解到相关参数变化对率失真的影响。
基于MATLAB的信息率失真函数计算

摘要本文对信息率失真函数的计算方法展开分析讨论,并通过MATLAB数学软件仿真实现。
信息论是运用概率论与数理统计的方法进行研究的应用数学学科。
随着人们不断加深对信息的认识与利用,信息科学被应用在各个方面。
然而,在实际的通信中,无失真的通信是不可能的,而且也无必要,因此,本文从离散信源着手,讨论平稳无记忆信源的信息传输过程及其特性,分析在限定失真为最大允许失真为D时信源的最小信息速率。
计算一般离散信源的信息率失真率函数R(D)较为复杂,本文采用带参量的迭代法求解R(D),介绍用带参量的迭代法求解R(D)的一般方法。
MATLAB是用于算法开发、数据可视化、数据分析以及数值计算的数学软件,本文通过MATLAB编写程序实现离散信源的信息率失真函数的计算。
关键词:离散信源失真率迭代算法MATLAB目录中文摘要 (i)英文摘要 (ii)目录 ........................................................................................................................................................................... i ii 第一章绪论 (1)1.1简述信息论 (1)1.2信息率失真函数的研究意义 (2)1.3 信息率失真函数的研究背景 (3)第二章简述数学软件MATLAB (4)2.1MATLAB的功能 (4)2.2 MATLAB的应用 (5)第三章离散信源的信息率失真函数 (6)3.1 离散信源 (6)3.2 信息率失真函数的定义 (7)3.2.1 失真度与平均失真 (7)3.2.2 信息率失真函数R(D) (8)3.3 信息率失真函数的性质 (10)3.4 信息率失真函数的一般计算方法 (11)第四章离散平稳无记忆信源信息率失真函数迭代法 (11)4.1 信息率失真函数的迭代计算 (11)4.2 源程序编码 (12)4.3 示例1 (15)4.4 示例2 (17)第五章总结 (20)致谢 (21)参考文献 (22)第一章绪论1.1 简述信息论信息就是一种消息,它与通讯问题密切相关。
第六章率失真函数理论及限失真信源编码

§6. 1 率失真函数的基本概念与定义
种信息率的性能界限:R(D);使得信宿在R>R(D)时,收到信息后 所产生的失真应不会大于所给定的失真要求D。一旦R<R(D)以后 实际失真将必定大于失真要求D。 这种信源与信宿的依存关系,就是与信道无关的条件下,所 要讨论的率失真函数的概念。 一、失真度的定义: ( The Definition of Distortion Function ) 所谓失真函数或失真度,即信息传输中所产生的失真。可采 用以下数学方法描述:如果用 d(x,y) 表示当发端为x,而收端为 y 时所定义的某种误差代价;或者是当用y 来代替x 时,所定量 的失真度。具体的讲,对于离散信源设发端 x a1 , a2 , , an ; 收端:y b1 , b2 , , bm ;当发 ai 时收到 b j 符号的情况下定义 失真度为: def 0 i = j d(x = ai , y = b j ) d ij α i j
x , y a1 , a2 y a1 a2
then d11 d 22 0 d12 d 21 1
0 d ij 1 1 0
a2
0
则,失真度矩阵可表示为:
§6. 1 率失真函数的基本概念与定义
例6-2. when
x 0,1, 2,3, 4,5
1 d = E d(x, y) = T
x(t) - y(t) dt = p(x)P( y
2 XY
x )d(x, y)dxdy
注意:d(x,y) 是人为的传输失真定义, 它仅表示后果的代价程度,是 一‘权值’的概念。但它是与信息传输本身无关的量; 而E[d(x,y) ] 则是一个与信源、信道特性均有关的统计参量。如果对信息传输 过程中的平均失真规定在一个范围之内,比如小于某一指定值D 即, d D 这无疑是对传输特性 P(y/x) 有了规定限制,是要保证: d = pi Pji dij D 1 因为Pi反映信源特性,而给定信源则表示Pi已给定,不能改变; 而Pji是代表传输特性,这时只有它可以在某种范围内选择,即表示 改变不同的传输手段。如果选出的每一种传输方案都能保证平均失 真满足要求 d D,则可以定义:凡是满足失真要求的信道 Pji ; 我 们把它归为一类, 记为集合BD 。该集合中的任一元素都可使上式成 立,即满足失真要求。
实验五_率失真函数特性研究

实验五_率失真函数特性研究实验五率失真函数极值性研究一、实验目的验证率失真函数的极值特性,理解相关参数的变化对信源熵及信道容量的影响。
二、实验原理二元对称信源的R(D)函数设二元信源U={0,1},其分布概率,而接收变量v={0,1},设汉明失真矩阵为:因而最小失真度。
并能找到满足该最小失真的试验信道,且是一个无噪无损信道,其信道矩阵为:要达到最大允许失真,唯一确定此时,可计算得信息传输率一般情况下,当时max min ()(,)V U D P u d u v =∑min[(0)(0,0)(1)(1,0);(0)(0,1)(1)(1,1)]VP d P d P d P d =++min[(1),]ωωω=-=,[](,)(,)U VD E d p u v d u v ==∑(0,1)(1,0)E P u v P u v P ===+===()[,1]P u ωω=-12ω≤0110D ??=m in 0D =1001P ??=(0)(;)()R I U V H ω==0101P ??=(;)0I U V =max 0D D ω<<=三、实验内容在汉明失真测试下,画出二元对称信源的信息率失真函数曲线四、实验程序流程图可以计算得:二元对称信源信息率失真函数为()()()R D H H D ω=-()()0()0H H D D R D D ωωω-≤≤?=?>?五、实验程序clc;clear;close;w=input('输入二元对称信道概率w:');Dmax=w;D=0:0.0001:Dmax; %汉明失真矩阵Hw=-w.*log2(w)-(1-w).*log2(1-w); %二元对称信道信源熵display('Hw信源熵为:');HwHD=-D.*log2(D)-(1-D).*log2(1-D);R=Hw-HD; %二元对称信源的信息率失真函数plot(D,R)axis([0,1,0,1.5]); %调整画布大小title('二元对称信源的信息率失真函数');xlabel('D');ylabel('R(比特/符号)');text(0,max(R),'Hw');text(w,min(R),'w=Dmax');;六、实验结果输入二元对称信道概率w:0.4Hw信源熵为:Hw =0.9710七、实验分析由曲线得出:当给定w时,R(D)在此区间内是连续的,并且是下凸严格递减的。
基于反向试验信道的率失真函数计算方法

基于反向试验信道的率失真函数计算方法游雪肖(湖北师范学院 数学与统计学院,湖北 黄石 435002)摘要:针对离散无记忆信源率失真函数的计算问题,提出了一种基于反向试验信道的率失真函数的计算方法,该方法利用互信息与熵的关系,采用Lagrange 乘数法,从反向试验信道的角度给出了率失真函数的参量表示式,并分析了该参量表示式中参数的物理意义。
该方法可直接计算率失真函数,避免了率失真函数计算时先计算互信息的最小值,后讨论最小值可达的问题,并且将其与正向试验信道参量表示式相比,该方法更简洁有效.从该方法还可以看出,无论正向试验信道还是反向试验信道,它们只是一个信道从两个不同角度考虑的两种不同表示方法而已。
关键词:信息论;反向试验信道;率失真函数;Lagrange 乘数法 中图分类号:O236在信息处理过程中,由于种种干扰因素的存在,不可避免地要丢失信息,产生失真。
对于给定的信源,总是希望它的信息经过处理后所产生的平均失真在一定允许限度内的情况下,使得信源传输的信息率尽可能的小,这个最小值就是信息率失真函数()R D .一般可用Lagrange 乘数法求解,求得关于试验信道亦即未知量(|)j i p b a 的参量表示[1-5],或先求出互信息(;)I X Y 的最小值,然后从反向试验信道角度构造反向试验信道(|)i j p a b 证明最小值可达[1-5],构造反向试验信道通常不是那么容易,只有对非常特殊的信源和失真函数才能构造。
针对后一种方法及其缺陷,笔者利用互信息与熵的关系,从反向试验信道角度以(|)i j p a b 为未知量直接讨论()R D 的参量表示以及参量S 的物理意义,并通过与文[6]的比较可知,反向试验信道和正向试验信道,参量S 的意义是一样的,且都是()R D 的斜率。
1 预备知识设离散无记忆信源1212,,,(),(),,()()n n a a a X p a p a p a P X ⎧⎫⎛⎫=⎨⎬⎪⎝⎭⎩⎭,信源符号通过信道传送到接收端Y ,1212,,,(),(),,()()m m b b b Y p b p b p b P Y ⎧⎫⎛⎫=⎨⎬⎪⎝⎭⎩⎭,信道的传递概率矩阵 112111222212(|)(|)(|)(|)(|)(|)(|)(|)(|)(|)m m n n m n p b a p b a p b a p b a p b a p b a Q Y X p b a p b a p b a ⎛⎫⎪⎪= ⎪⎪⎝⎭,1(|)1m j i j p b a ==∑. 定义1 信源X 的熵定义为1211()((),(),,())()log()nn i i i H X H p a p a p a p a p a ===∑,信源,X Y 的联合熵定义为111(,)(,)log(,)n mi j i j i j H X Y p a b p a b ===∑∑,在给定信源Y 的条件下,X 的条件熵定义为111(|)(,)log(|)n mi j i j i j H X Y p a b p a b ===∑∑.定义2 信源,X Y 的互信息定义为11(,)(;)(,)log()()n mi j i j i j i j p a b I X Y p a b p a p b ===∑∑由1()(,)mi ijj p a p a b ==∑,1()(,)njiji p b p a b ==∑,(,)()(|)()(|)i j i j i j i j p a b p a p b a p b p a b ==,很容易证得定理1 (;)()(|)I X Y H Y H Y X =- (1.5)()(|)H X H X Y =- (1.6) ()()(,)H X H Y H X Y =+- (1.7)定义 3 对每一对(,)i j a b ,指定一个非负函数(,)0i j d a b ≥,1,2,,i n =;1,2,,j m =,称(,)i j d a b 为失真函数或失真度. 例如汉明失真0,(,)1,i j i jd a b i j =⎧=⎨≠⎩.定义4 称11(,)()(|)(,)n miji i j i j Ed X Y p a p ba d ab ===∑∑为信源的平均失真度.定义 5 满足(,)Ed X Y D ≤的{(|)}j i p b a 称为D 失真许可的试验信道,简称试验信道.定义6 定义信息率失真函数()R D 为(|):(,)()min(;)j i p b a Ed X Y DR D I X Y ≤=2 信息率失真函数的参量表述2.1 问题的提出与转化计算信源的信息率失真函数,即在已知信源X 的概率分布和失真函数(,)i j d a b ,1,2,,i n =;1,2,,j m =的条件下求得.在文献[1-5]中,()R D 的计算以(|)j i p b a 为未知量,利用Lagrange 乘数法求解条件极值问题,从本质上都是利用式(1.5),本文利用式(1.6)和(1.7),以(|)i j p a b 为未知量,利用Lagrange 乘数法求解下述条件极值问题,得到了关于反向试验信道(|)i j p a b 的率失真函数参量表示式.由定义6可知,率失真函数的计算实际上是求(;)I X Y 在约束条件下的极小值问题,即min (;)I X Y (2.1)11111(,)0,1,2,,;1,2,,(,)1,1,2,,..(,)(,)(,)(),1,2,,i j n m i j i j n m i j i j i j mi j i j p a b i n j mp a b i n s t p a b d a b D p a b p a i n =====≥==⎧⎪⎪==⎪⎪⎨=⎪⎪⎪==⎪⎩∑∑∑∑∑ (2.2)2.2 ()R D 的参量表达式为了在式(2.2)的(2)n +个条件的限制下,求(;)I X Y 的极值,可引入Lagrange 乘数S 、μ和(1,2,,)i i n α=,利用式(1.7)构造一个新的函数()()(,)L H X H Y H X Y =+-111111((,)(,))((,)1)((,)())n m n m n mi j i j i j i i j i i j i j i j S p a b d a b D p a b p a b p a μα======------∑∑∑∑∑∑ 1111111()((,))log(,)log(,)(,)m nn mi j i j nj i i j i j iji H X p a b p a b p a b p a b ======+-∑∑∑∑∑111111((,)(,))((,)1)((,)())n m n m n mi j i j i j i i j i i j i j i j S p a b d a b D p a b p a b p a μα======------∑∑∑∑∑∑(2.3)上式两边对(,)i j p a b 求偏导数,并令其为0,即0(,)i j Lp a b ∂=∂ (2.4)将式(2.3)代入式(2.4),得1111log (,)1log (,)(,)(,)0(,)n ni j i j i j i j i ni i iji p a b p a b p a b Sd a b p a b μα===+--⋅---=∑∑∑1(,)log(,)(,)i j i j i niji p a b Sd a b p a b μα==++∑由1(,)(,)(|)()(,)i j i j i j nj iji p a b p a b p a b p b p a b ===∑,并令i i e μαβ+=,则(,)(|)i j Sd a b i j i p a b eβ=,1,2,,i n =;1,2,,j m = (2.5)上式两边对i 求和并注意条件(2.2),有(,)111(|)i j nnSd a b i j i i i p a b eβ====∑∑ (2.6)式(2.5)两边同乘()j p b ,再对j 求和,得(,)1()()i j mSd a b i j i j p a p b eβ==∑ (2.7)由式(2.6)解出i β,代入式(2.5)中得到(|)i j p a b ,代入式(2.7)中得到()j p b ,将这些结果代入约束条件,可得11()()(|)(,)n m j i j i j i j D S p b p a b d a b ===∑∑(,)11()(,)i j n mSd a b j i i j i j p b ed a b β===∑∑ (2.8)()()(|)R S H X H X Y =-11()(,)log (|)n m i j i j i j H X p a b p a b ===+∑∑(,)11()(,)log i j n mSd a b i j i i j H X p a b eβ===+∑∑1111()(,)l o g (,)(,)nmn mijii j i j i j i j H X p a b S p a b d a bβ=====++∑∑∑∑ 1()()log niii H X p a SD β==++∑ (2.9)2.3 参量S 的意义首先将()R D 对D 的求导数,则得dR R dS dD S dD ∂=⋅∂1[()()log ]ni i i dR dS H X p a SD dD S dD β=∂=++⋅∂∑ 11[()]ni i i i d dSS D p a dS dDββ==++⋅⋅∑ 其次,在式(2.6)的两边对S 求导数,可得(,)(,)11(,)0i j i j nnSd a b Sd a b ii j i i i d ed a b edSββ==+=∑∑ 将上式两边乘以()j p b ,并对j 求和,得(,)(,)1111()(,)()0i j i j n mn mSd a b Sd a b ij i j i j i j i j d p b ed a b p b edSββ====+=∑∑∑∑ 即 (,)11()0i j nmSd a b iji j d D p b edSβ==+=∑∑由式(2.7)得 1()0ni i i id p a D dS ββ=+⋅=∑ 将上式代入dRdD的表达式中,则得 dRS dD= 上式表明,参量S 是信息率失真函数()R D 的斜率。
第五章 限失真信源编码和率失真函数修改

无失真信源编码定理和信道编码定理得出 这样一个结论:无论是无噪信道还是有噪信道, 只要信道的信息传输率R小于信道容量C,总能 找到一种编码,在信道上以任意小的错误概率和 , 任意接近信道容量C的信息率传输消息.反之,若 信道信息传输率R大于信道容量C,一定不能使 传输错误概率任意小而实现无失真传输.
这两个概念的适用范围是不一样的,研究信道容量 C是为了在已知信 道中尽可能地传送信息,是为了充分利用已给定的信道,使传输的信息量最 大而错误概率任意小,以提高通信的可靠性,这是信道编码的问题 . 研究信息率失真函数是为了在已知信源和允许失真度条件下,使信源 输出的信息率尽可能小,也就是在允许的一定失真度 D的条件下,使信源必 须传送给信宿的信息量最少,尽可能用最少的码符号来传送信源信息,使信 源的信息可以尽快地传送出去,以提高通信的有效性,这是信源编码问题 .
平均失真定义为
Ed ( X n , g n ( f n ( X n ))) =
码率定义为
p( x n )d ( x n , g n ( f n ( x n ))) ∑
x n ∈χ n
R=
1 log 2 M n
定义 5.1.4 设信源随机变量 X 与其复制随机变 ˆ ˆ 量 X 服从概率分布 p (x) ,有失真测度 d ( x, x) 定义信息率失真函数为
≥ Dmax
ˆ x
x
由 Q (D ) 的定义必有 D ≥ Dmax 。
ˆ ˆ 反之,设 D ≥ Dmax 。由定义知,存在 x ∈ χ ,使
*
ˆ Dmax = ∑ p( x)d ( x, x * )
x
定义条件概率
1 x = x * ˆ ( x x) = ˆ ˆ Q ˆ ˆ ˆ 0 x ≠ x*
信息率失真函数的绘制

课程设计任务书2011—2012学年第一学期专业:通信工程学号:姓名:课程设计名称:信息论与编码课程设计设计题目:信息率失真函数的绘制完成期限:自年月日至年月日共周一.设计目的1、理解信息率失真函数的定义与物理意义;2、分析离散信源在误码失真下的信息率失真函数表达式;3、提高综合运用所学理论知识独立分析和解决问题的能力;4、使用相关软件进行曲线的绘制。
二.设计内容分析离散信源在误码失真下的信息率失真函数表达式,并绘制曲线图。
三.设计要求1、绘制曲线使用数据不能过少;2、分析曲线的特点。
四.设计条件计算机、MATLAB或其他语言环境五.参考资料[1]曹雪虹,张宗橙.信息论与编码.北京:清华大学出版社,2007.[2]王慧琴.数字图像处理.北京:北京邮电大学出版社,2007.指导教师(签字):教研室主任(签字):批准日期:年月日摘要研究信息率失真函数是为了解决在已知信源和允许失真率D 的条件下,使信源必须传送给信宿的信息率最小。
即用尽可能少的码符号尽快地传送尽可能多的信源消息,以提高通信的有效性。
首先给出信源的失真度和信息率失真函数的定义与性质;然后讨论离散信源和连续信源的信息率失真函数计算。
通过使用MATLAB软件进行对信息率失真函数曲线的绘制,直观的理解了信息率失真函数R(D)与失真率D和P的函数关系。
关键字:信息率失真函数;失真率D;MATLAB目录1信息率失真函数 (1)1.1信息率失真函数的定义 (1)1.2信息率失真函数的物理意义 (2)2信息率失真函数表达式 (3)2.1信息率失真函数的定义域 (3)2.1.1失真率D的下界 (3)2.1.2失真率D的上界 (3)2.2参数p的影响 (3)2.3信息率失真函数表达式的推导 (4)3信息率失真函数的matlab实现 (6)3.1实验程序 (6)3.2实验结果 (7)3.3图像的分析 (7)总结 (8)参考文献 (9)1信息率失真函数1.1信息率失真函数的定义研究在限定失真下为了恢复信源符号所必需的信息率,简称率失真理论。
第九章 率失真函数 - 西安电子科技大学个人主页系统 我的

R( D)
P ( v j / ui )BD
min I (U ;V )
R(D)-------信息率失真函数或简称率失真函数。
单位是奈特/信源符号 或 比特/信源符号
• 率失真函数给出了熵压缩编码可能达到的最小熵 率与失真的关系,其逆函数称为失真率函数,表 示一定信息速率下所可能达到的最小的平均失真。
0 1 [d ] 0 1
Dmin p( x) mind ( x, y) 0
Dmax min p( x)d ( x, y) 1
y x
x
y
由于信源等概分布,失真函数具有对称,因此,存在着与失 真矩阵具有同样对称性的转移概率分布达到率失真R(D) ,该 转移概率矩阵可写为:
P(u ) P(v
/ ui )d (ui , v j ) D
对于等概、对称失真的信源,存在一个与失真矩阵具有
同样对称性的转移概率分布达到率失真R(D)。
[例5]有一个二元等概平稳无记忆信源 X 0,1 ,接收符号集 为 Y 0,1,2 ,且失真矩阵为 : 求率失真函数R(D) 。 解:由
寻找平均互信息I(U;V)的最小值。而BD是所有满足保真 度准则的试验信道集合,因而可以在D失真许可的试验信道 集合BD中寻找一个信道P(vj | ui) ,使I(U;V) 取极小值。 由于平均互信息I(U;V)是P(vj | ui)的U型凸函数,所以在 BD集合中,极小值存在。这个最小值就是在D D的条件 下,信源必须传输的最小平均信息量。即:
x
上式中第二项最小,所以令 p(b2 ) 1 , p(b1 ) p(b3 ) 0 ,可得对应 Dmax 的试验信道转移概率矩阵为
0 1 0 0 1 0 p( y | x 0 1 0
率失真函数曲线实验

实验1 绘制二进熵函数曲线一、实验内容用Excel 或Matlab 软件制作二进熵函数曲线。
二、实验环境1. 计算机2. Windows 2000 或以上3. Microsoft Office 2000 或以上4. Matlab 6.0或以上三、实验目的1. 掌握Excel 的数据填充、公式运算和图表制作2. 掌握Matlab 绘图函数3. 掌握、理解熵函数表达式及其性质四、实验要求1. 提前预习实验,认真阅读实验原理以及相应的参考书。
2. 认真高效的完成实验,实验中服从实验室管理人员以及实验指导老师的管理。
3. 认真填写实验报告。
五、实验原理1. Excel 的图表功能(略,参考书1中相关章节)2. 信源熵的概念及性质()()[]()[]())(1)(1 .log )( .)( 1log 1log )(log )()(10 , 110)(21Q H P H Q P H b nX H a p H p p p p x p x p X H p p p x x X P X i i i λλλλ-+≥-+≤=--+-=-=≤≤⎩⎨⎧⎭⎬⎫-===⎥⎦⎤⎢⎣⎡∑六,实验数据P= 0.00 0.05 0.10 0.15 0.20 0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.600.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00绘制H (P )—P 函数图七、参考书1. 《信息技术基础》河北大学出版社2. 《Matlab 与科学计算》,电子工业出版社二进熵函数曲线Matlab代码:p=0:0.05:1;H=zeros(1,21);for i=2:20H(i)=-p(i)*log2(p(i))-(1-p(i))*log2(1-p(i)); endplot(p,H,'b');xlabel('概率');ylabel('信源熵');c=find(H==max(H));text(p(c),max(H),['(',num2str(p(c)),',',num2str(m ax(H))]);%标出最大值的坐标。
信息论第四章失真率函数

(1) 根据式(4-14)和(4-18)可求出R(D)的定义域 Dmin = 0·δ+0·(1-δ) = 0 D max = min {1-δ, δ}=δ (2) 求R(D)的值域
ij
式中D是预先给定的失真度,上式称为保真度准则。
根据[定理2.2],当信源q (x)一定时,平均互信息量I (X ; Y) 是信道转移概率函数p(y∣x)的∪型凸函数,这意味着可以 关于p(y∣x)对平均互信息量I (X ; Y)求得极小值,定义这个
极小值为率失真函数R(D),即:
RD min I X ;Y : D D p(y x)
xi )
( xi
y j )( y j )
q(xi )
。
1-δ = D (y1)+(1-D) (y2)
由上面方程组解出,
(
y1
)
D
1 2D
(
y
2
)
1
1
D 2D
② 再算出
p( y1
x1 )
(x1 y1 ) ( y1 )
q(x1 )
(1
D)
D 1 2 D
(1 D)( D) (1 2D)
d d 21 d 22
d1J
d
2
J
(4-1)
d I 1 d I 2 d I J
【例4.1】 汉明(Hamming)失真测度
信源输出符号X = {x1, x2, …, xK},信道输出符号Y = {y1, y2, …,
信息论 第6章(率失真函数及率失真编码定理)

The Basis of Information Theory
主题No6: 主题No6:率失真函数及率失真编码定理 No6
概
论
D
在第二章研究无失真信源编码问题时,我们知道 在信源无失真前提下,希望信息传输率 R = H(U) 尽可 N 能大,以提高传输效率。但由第八章将要介绍的信道 编码定理可知,只有在信息传输率小于信道容量时, 才可能实现无差错传递,而对每个信道而言,其信道 容量是一个定值,即信息传输率有一个极限值,这就 出现了矛盾。从提高传输效率的角度出发,考虑允许 传输有一定的失真,这在很多情况下是可以接受的。 这种情况下,可以对信源信息量进行压缩,那么可以 压缩到什么程度呢?下面要讨论的问题就是给定一个 失真度,求出在平均失真小于给定值的条件下,信源 所能压缩的最低程度,即率失真函数RD。
求率失真函数的几个例子
例3 信源U={0,1},信道V={0,e,1},信源等概率分布, 0 α 失真测度矩阵为: [dij ]= β α β,α < 1 0 2 (1)求R(D); (2)当 α ≥ 1 , β =1时,证明R(D)=log2-H(D) 2 β α, [解]由定义得:Dmin=0,Dmax=min{ },由于信源 2 及失真测度矩阵均具有对称性,故取信道转移概率为 0 α β ,此时计算I(U;V)=H(U)-H(U|V),即为 p(v | u) =
∑
x, y
p( y x)q(x)log
p( y x)
∑
x
p( y x)q(x)
即I(X;Y)是q(x)和p(y|x)的函数,下面两条定理阐明 了I(X;Y)与q(x)和p(y|x)之间的关系。 [定理1] 当信道p(y|x)给定,I(X;Y)是信源q(x)的∩ 型凸函数。 [定理2] 当信源q(x)给定,I(X;Y)则是信道p(y|x)的 ∪型凸函数。
C语言程序设计—函数—实验报告.docx

33
scanf(H :” r &num);
34
temper)roveGo 1 dbach (num);
35
if (temp— )//当输入小于 6 或者不是偶贾 彳
36
37
P丄
38
return ;
39
40
CMXMCCMC
length; KW lino; 40
Ln;29 3;初 Sd;0|0
Oc$\Wtf)dcrw> ANMasUn 8 介 ®
题目三 :编写一个求阶乘的函数,接着调用该函数实现组合的求解
要求: ① 提示用户输入 n 和 m 的数值;
: ② 输出的 C 结果
#include<stdio.h> /*======二阶乘函数=======*/ int fac(int n) {
int f; if(n<0)
printf(nn<O,data error!11); else if(n==0lln==l)
6.2 离散信源的率失真函数的计算

n
m
j=1
− s ⋅ ( ∑ ∑ p(i) p( j / i) di j − D)
i =1 j=1
n
m
∂L L = 0, 得 (2) 对任意固定的 i , j ,令 ∂ p( j / i )
− [1 + ln p ( j )] p ( i ) + [1 + ln p ( j / i )] p ( i ) − µ i − s d i j p( i ) = 0 ,
s di j
, (i = 1 ~ n; j = 1 ~ m)
6
第 六 章 信 息 率 失 真 函 数
§6.2 离散信源的率失真函数的计算
二、率失真函数的求解及参数式
1. Lagrange 乘子法的求解过程分析 (1) 记
L( p ( j / i ) , µ i , s) = I( p( j / i) ) − ∑ µ i ( ∑ p( j / i) −1)
二、率失真函数的求解及参数式
2. 简明的求解步骤及参数式 简明的求解步骤及参数式 参数式 D = D(s ) = ∑ ∑ d i j p( i ) p( j )λ i e s d i j , i =1 j =1 ⇒ R = R(D ) . n R = R(s ) = sD( s ) + p( i ) ln λ . ∑ i
i =1
n
m
j=1
− s ⋅ ( ∑ ∑ p(i) p( j / i) di j − D)
i =1 j=1
n
m
p( j / i ) (2) ln ⋅ p( i ) − µ i − s d i j ⋅ p( i ) = 0 , p( j )
p( j / i ) 令 µ i = ln λ i ⋅ p( i ) , 得 ln = s di j , p( j ) λ i 即 p( j / i ) = p( j ) λi e
C程序设计_函数_实验报告

贵州大学《C程序设计实验》实验报告实验名称:函数专业电子信息科学与技术班级姓名学号教师2010年}else{printf("%d isn't a prime number\n",n);}}bool prime_number(int x){bool flag=true;for(int i=2;i<x/2&&(flag==true);i++){if(x%i==0)flag=0;}return flag;}运行情况:分析:程序开始:bool prime_number(int x);声明一个函数,函数返回值为bool型,函数名为prime_number,函数带一个int型参数。
scanf("%d",&n);从屏幕输入数n。
if(prime_number(n)) 调用函数,传入参数n。
bool prime_number(int x){bool flag=true;for(int i=2;i<x/2&&(flag==true);i++){if(x%i==0)flag= false;}return flag;}把两个函数分别放在两个程序文件中,作为两个文件进行编译、连接和运行。
(3). 用递归法将一个整数n转换成字符串。
例如,输入483,应输出字符串“483”。
n的位#include <stdio.h>void main(){int n;void covert( int n);printf("input n\n");scanf("%ld",&n);if(n<0){putchar('-');n=-n;}covert(n);}void covert(int n){inti;if((i=n/10)!=0)covert(i);printf("%c",n%10+'0');}数不确定,可以是任意的整数。
C语言程序设计实验报告(函数)

C语言程序设计实验报告(实验名称:函数)1实验目的(1)掌握函数的定义方法、调用方法、参数说明以及返回值;(2)掌握实参与形参的对应关系,以及参数之间的“值传递”的方式;(3)掌握函数的嵌套调用及递归调用的用的设计方法;(4)在编程过程中加深理解函数调用的程序设计思想。
2实验内容(1)编写一个函数primeNum(int x),功能是判别一个数是否为素数。
要求:①在主函数中输入一个整数x(直接赋值或从键盘输入);②函数类型为空值(void),调用primeNum( )函数后,在函数中输出x是否为素数的信息,输出格式为“x is a prime number”或”x is not aprime number”;③分别输入一下数据:0,1,2,5,9,13,59,121,并运行程序,检查结果是否正确。
(2)编写函数 mulNum(int a,int b),它的功能是用来确定a和b是否是整数倍的关系。
如果a是b的整数倍,则函数返回值为1,否则函数返回值为0。
要求:①在主函数中从键盘输入一对整型数据a和b;②调用函数后,根据返回值对a和b的关系进行说明。
例如,在主函数中输入:10,5,则输出“10 is a multiple of 5”;③分别输入下面几组数据进行函数的正确性测试:1与5,5与5,6与2,6与4,20与4,37与9。
3算法描述流程图(1)primeNum(int x)(判别一个数是否是素数)函数流程图①主函数流程图:②判断素数函数流程图:(2)mulNum(int a,int b)(确定a和b是否是整数倍的关系)函数流程图①主函数流程图:②判断倍数流程图:4源程序(1)判断某个数是否是素数#include <stdio.h>int primNum(int x) /*编写函数判断某个数是否是素数*/ {int i;if (x==0||x==1) /*当x等于1或等于0时判断是否为素数*/return 0;for (i=2;i<x;i++) /* 当x大于2时判断不为素数的数*/{if (x%i==0)return 0;}if (x%i) /* 当x等于2或不满足上述条件时时判断出该数是素数*/ return 1;}void main(){int n ;printf("Please input an integer:"); /* 提示从键盘输入一个数x */scanf("%d",&n);if (primNum(n)==1) /* 调用定义的函数*/ printf("%d is a prime number\n",n); /* 由函数得出结论判断是否为素数*/ elseprintf("%d is not a prime number\n",n);}(2)个数是否是整数倍关系#include <stdio.h>int mulNum(int a,int b)/* 定义函数确定两个数是否有整数倍关系*/{if (a%b==0) /* 判断出a是b的整数*/return 1;else /* 判断出a不是b的整数*/return 0;}void main (){int m,n;printf ("please input tow integers:\n"); /*提示从键盘输入两个数*/scanf ("%d%d",&m,&n); /*从键盘输入两个数的值*/if(mulNum(m,n)==1) /*调用定义的函数并判断输出相应的结果*/printf("%d is a multiple of %d\n",m,n);elseprintf("%d is not a multiple of %d\n",m,n);}5测试数据(1)实验(1)测试数据为0,1,2,5,9,13,59,121 运行结果当测试数据0时当测试数据1时当测试数据2时当测试数据5时当测试数据9时当测试数据13时当测试数据59时当测试数据121时(2)实验2测试的数据1与5,5与5,6与2,6与4,20与4,37与9。
实验3-率失真函数计算的程序设计

实验3 率失真函数计算的程序设计一、实验问题假定一个离散无记忆信源(DMS )的信源符号集为A u ={1,2,...,r},其概率分布为p(u);信宿符号集为A v ={1,2,....,s}。
而失真侧度矩阵为一个r ⨯s 维矩阵D=[d ij ]。
利用Matlab 画出率失真函数R(δ)的曲线图。
二、实验环境计算机、Windows 2000 或以上、Matlab 6.5或以上三、实验目的1.了解率失真函数性质、意义。
2.掌握简单的率失真函数计算方法;3.掌握使用Matlab 实现一般率失真函数的计算方法;4.掌握Matlab 求解非线性方程组的方法。
四、实验内容1.从理论上计算r=s=2。
p(u=1)=p,p (u=2)=1-p;d=[0,1;1,0]的率失真函数R(δ)。
2.对一般性的DMS 信源,计算率失真函数R(δ)的理论公式进行推导。
3.找出比较合适的方程求解方法。
4.使用编制Matlab 编制程序求解一般的率失真函数R(δ)。
5.给定r=s=2。
p(u=1)=0.4,p=(u=2)=0.6;d=[0,1;1,0],测试程序,即比较程序运行结果与理论计算结果,⎩⎨⎧≥≤≤-=p p H p H R δδδδ 00)()()( 6.改变参数,画出函数图。
7.显示在计算精度为0.000001以及运行计算的配置(CPU 型号、CPU 的频率、内存的)的条件下,系统循环次数、累计计算时间、平均每次循环所用时间等。
五、实验要求1. 提前预习实验,认真阅读实验原理。
2. 认真高效的完成实验,实验过程中服从实验室管理人员以及实验指导老师的管理。
3. 将实验报告写成论文的形式。
要求有:● 问题的提出:包括R(δ)的物理意义、用途(可以举出具体的用途)、计算的困难性等。
● 解决问题的原理方法:包括所有的公式推导的细节。
● 解决问题的具体方法:包括程序框图及Matlab 源程序。
● 实验结果:利用你的程序给出不同参数得到的实验结果,包括实验曲线图、程序循环次数、累计计算时间、平均每次循环所用时间等。
关于率失真曲线的实验说明

关于率失真曲线的实验说明
1、原理分析及数学建模:
D:允许的失真度
E(d)=∑∑p i*P ji*d ij<=D
R:信息速率(bit / symbol)
R(D):互信息I(p i;P ji)在E(d)=∑∑p i*P ji*d ij<=D的限定条件下,通过改变信道状况所能够取得的最小值。
求R(D)函数即等价于求在下列条件下互信息I的极小值
1、D=E(d)=∑∑p i P ji d ij
2、∑P ji=1
2、Blahut-Arimoto迭代算法:
固定P ji,使用拉格朗日乘子法求得取极值时:
q j=∑P ji p i (1)
固定qj,求得取极值时:
Pji=q j e Sdij/∑q j e sdij (2)
S为拉格朗日乘子法中的参数,具有斜率含义。
(1)(2)两式统称迭代公式
3、实验方案:
预设S值,通过迭代公式(1),(2)计算出取Imin时P ji、q j的近似值,再通过P ji、q j计算出相应的互信息R以及其对应的失真D。
4、实验结果及简要分析:
1、分布为[0.1,0.2,0.7]的信源的率失真曲线,误差<=0.01。
H(X)=1.568
结论:
(1)允许失真越大,压缩比越大。
(2)0失真对应熵。
2、信源概率分布均匀程度和率失真曲线的关系:
结论:
信源分布越不均匀,在允许固定失真的条件下,压缩的潜力就越大。
3、信源符号数量和率失真曲线的关系(均匀分布)
结论:
在允许失真一定的情况下,信源符号数量越多,压缩比就越小。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验3 率失真函数计算的程序设计一、实验问题假定一个离散无记忆信源(DMS )的信源符号集为A u ={1,2,...,r},其概率分布为p(u);信宿符号集为A v ={1,2,....,s}。
而失真侧度矩阵为一个r ⨯s 维矩阵D=[d ij ]。
利用Matlab 画出率失真函数R(δ)的曲线图。
二、实验环境计算机、Windows 2000 或以上、Matlab 6.5或以上三、实验目的1.了解率失真函数性质、意义。
2.掌握简单的率失真函数计算方法;3.掌握使用Matlab 实现一般率失真函数的计算方法;4.掌握Matlab 求解非线性方程组的方法。
四、实验内容1.从理论上计算r=s=2。
p(u=1)=p,p (u=2)=1-p;d=[0,1;1,0]的率失真函数R(δ)。
2.对一般性的DMS 信源,计算率失真函数R(δ)的理论公式进行推导。
3.找出比较合适的方程求解方法。
4.使用编制Matlab 编制程序求解一般的率失真函数R(δ)。
5.给定r=s=2。
p(u=1)=0.4,p=(u=2)=0.6;d=[0,1;1,0],测试程序,即比较程序运行结果与理论计算结果,⎩⎨⎧≥≤≤-=p p H p H R δδδδ 00)()()( 6.改变参数,画出函数图。
7.显示在计算精度为0.000001以及运行计算的配置(CPU 型号、CPU 的频率、内存的)的条件下,系统循环次数、累计计算时间、平均每次循环所用时间等。
五、实验要求1. 提前预习实验,认真阅读实验原理。
2. 认真高效的完成实验,实验过程中服从实验室管理人员以及实验指导老师的管理。
3. 将实验报告写成论文的形式。
要求有:● 问题的提出:包括R(δ)的物理意义、用途(可以举出具体的用途)、计算的困难性等。
● 解决问题的原理方法:包括所有的公式推导的细节。
● 解决问题的具体方法:包括程序框图及Matlab 源程序。
● 实验结果:利用你的程序给出不同参数得到的实验结果,包括实验曲线图、程序循环次数、累计计算时间、平均每次循环所用时间等。
● 结果分析:包括R(δ)的性质、程序收敛情况、程序改进的方向等。
4. 每个同学必须独立完成实验(不能抄袭,否则两人均为零分),实验成绩是该门课程成绩的主要依据。
六、实验原理1.R(δ(S))的表示方法计算δmin 和δmax 是很容易的。
∑∈=U A u v v u d u p ),(min ).(min δ; ∑=uv v u d u p ),()(min max δ。
当δ≥δmax 时,R(δ)=0。
当δmin ≤δ≤δmax 时,R(δ)=min{I(U;V):E(d)= δ}。
在数学上,就是在约束条件:δ==∑∑==),()|()()(11v u d u v p u p d E r u sv (1)1)|(1=∑=sv u v p (2)的约束下求平均信息量∑∑===r u s v v u d v p u v p u v p u p V U I 11),()()|(log)|()();( 的条件极小值。
为此引入待定常数S 和μu (u=1,2,...,r),并作辅助函数∑∑∑∑∑∑======+-=r u sv u r u s v r u s v u v p v u d u v p u p S v p u v p u v p u p u v p F 111111)|(),()|()()()|(log)|()()]|([μ (3) 其中∑==ru u v p u p v p 1)|()()( 由0)|(=∂∂u v p F 得,})(),(ex p{)()|(u p v u Sd v p u v p u μ+= 为方便引入参数,})(ex p{u p uu μλ=则有),()()|(v u Sd u e v p u v p λ= (4)显然(4)提供r ⨯s 个方程,(2)提供r 个方程,而(1)提供1各方程,共rs+r+1个方程;而有r ⨯s 个未知数p(v|u)、r 个未知数λu 及未知数S ,共rs+r+1未知数,显然可以求解。
为方便起见,我们保留S 作为参数。
这样得到:1)(1),(=∑=sv v u Sd u e v p λ (5)1)(1),(=∑=r u v u Sd u e u p λ(6)∑∑====r u sv v u Sd u v u d e v p u p S d E 11),(),()()()()(λδ (7)∑=+=ru u u p S S S R 1log )()())((λδδ (8) 很容易得到0<=δd dR S ,即S 是率是失真函数的导数。
当S →-∞时,δ(S)→ δmin ;参量S 是δ的递增函数,当δ从δmin 到δmax 逐渐增大时,S 将随δ增大而增大,当δ=δmax 时,S 达到最大值S max <0。
对S max 的求解较麻烦,必须解非线性方程。
为了简单我们不求S max 。
如果r=s ,即信源和信宿的符号集相同,则很容易通过(6)式求得λu ,进而通过(5)式求得p(v)。
从而通过(7)(8)式划出率失真函数曲线。
2.R(δ(S))的迭代计算但一般情况下,r ≠s ,则只能通过(6)先求得p(v),这是一个非常复杂的方程。
下面介绍R(δ(S))的迭代方法计算方法和公式。
首先假设p(v)固定,与信道传递概率p(v|u)无关,则求极值得: ∑==s v v u Sd v u Sd ev p e v p u v p 1),(),(*)()()|( (9)再假定p(v|u)不变,而把p(v)当成变量,则求极值得:∑==r u u v p u p v p 1*)|()()( (10) 具体算法为:选择绝对值相当大的负数S 1。
选定起始传递概率p (1)(v|u)=1/rs 。
通过(10)式求得P (1)(v),再通过(9)式求得p (2)(v|u)。
如此重复直到∑∑===r u sv n v u d u v p u p n S D 11)(1),()|()())((与D(S 1)(n+1)相差较小;并且。
∑∑===r u s v n n n v p u v p u v p u p n S R 11)()()(1)()|(log )|()())((与R(S 1)(n+1)相差较小 再选择较大的S 2直到S max 逼近于零为止。
这样就可以画出R(δ)曲线.七。
实验步骤:1.建立熵函数求解matlab 文件 Hp.mfunction h=Hp(p)%熵函数计算,输入是概率p (标量或一维矢量)%输出是h,与p 同维度h=zeros(1,length(p))index=find(p>0&p<1);P=p(index);h(index) = -P.*log(P)-(1-P).*log(1-P);end2.根据实验原理,很容易知道,delta 的最小值和最大植:delta_min=sum(Pu.*min(D',[],1));delta_max=min(Pu*D);建立求率失真度的文件:R_delta.m%率失真函数计算function [R,delta]=R_delta(Pu,D,eps)% Pu 信源概率矢量,D 失真测度矩阵(rxs 阶)% 信源Ur ,信宿Vs%delta的最小值和最大植delta_min=sum(Pu.*min(D',[],1));delta_max=min(Pu*D);R=[]; delta=[];%给定初始值%P(u,v)=P(V|U)P=ones(r,s)/s; %信道模型SS=100:-0.1:-100; SS=-exp(SS);for S=SSPv=Pu*P;Ed0=sum(Pu*(P.*D));%Rs0=sum(Pu*(P.*log(P))) - sum(Pv.*log(Pv));Rs0=0;for u=1:rfor v=1:sif P(u,v)~=0 & Pu(u)~=0Rs0 = Rs0 + Pu(u)*P(u,v)*log(P(u,v)/Pv(v));endendendP=exp(S*D);for i=1:sP(:,i)=P(:,i)*Pv(i);endfor i=1:rSumP=sum(P(i,:)); P(i,:)=P(i,:)/SumP;endKm=50000;for k=1:KmPv=Pu*P;Edn=sum(Pu*(P.*D));%Rsn=sum(Pu*(P.*log(P))) - sum(Pv.*log(Pv));Rsn=0;for u=1:rfor v=1:sif P(u,v)~=0 & Pu(u)~=0Rsn = Rsn + Pu(u)*P(u,v)*log(P(u,v)/Pv(v));endendendP=exp(S*D);for i=1:sP(:,i)=P(:,i)*Pv(i);for i=1:rSumP=sum(P(i,:));P(i,:)=P(i,:)/SumP;endif abs(Edn - Ed0)<eps & abs(Rsn - Rs0)<epsbreak;endEd0=Edn;Rs0=Rsn;endif k<KmR=[R,Rsn];delta=[delta,Edn];endend3.测试,以汉明失真测度矩阵为失真测度,分别绘制不同精度和不同输入概率下的率失真函数曲线测试1:对于不同的精度测试程序如下clear allalpha=2;p=0.5;D=[0,alpha;alpha,0]; %汉明失真矩阵Pu=[p,1-p]; %信源概率统计delta=[0:p/1000:p];R=Hp(p) - Hp(delta/alpha); %汉明失真,率失真函数理论值eps1=0.001; %精度为eps1=0.001[R1,delta1]=R_delta(Pu,D,eps1);eps2=0.000000001; %精度为eps2=0.000000001[R2,delta2]=R_delta(Pu,D,eps2);plot(delta,R,'b',delta1,R1,'r-.',delta2,R2,'m-*');legend('理论值','eps1=0.001','eps2=0.000000001')测试2:对于不同的概率输入,测试程序如下:clear allalpha=2;p1=0.5;p2=0.2;D=[0,alpha;alpha,0]; %汉明失真矩阵Pu1=[p1,1-p1]; %信源概率统计Pu2=[p2,1-p2]; %信源概率统计delta1=[0:p1/1000:p1];delta2=[0:p2/1000:p2];eps=0.00001; %精度为eps=0.00001[R1,delta1]=R_delta(Pu1,D,eps);[R2,delta2]=R_delta(Pu2,D,eps);plot(delta1,R1,'b-*',delta2,R2,'r-^');legend('p1=0.5','p2=0.2')Figure 1 - 测试1图形Figure 2 - 测试2 图形。