实验3-率失真函数计算的程序设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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 δ; ∑=u

v 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 s

v (1)

1)|(1=∑=s

v 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 s

v 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 1

11111

)|(),()|()()()|(log

)|()()]|([μ (3) 其中∑==r

u 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 u

u μλ=则有

),()()|(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),(=∑=s

v v u Sd u e v p λ (5)

1)(1),(=∑=r u v u Sd u e u p λ

(6)

∑∑====r u s

v v u Sd u v u d e v p u p S d E 11

),(),()()()()(λδ (7)

∑=+=r

u 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 e

v 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 s

v 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.m

function 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);

end

2.根据实验原理,很容易知道,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

相关文档
最新文档