《信息论基础》实验报告-实验3

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

信息与通信工程学院实验报告
(软件仿真性实验)
课程名称:信息论基础
实验题目:率失真函数计算的程序设计
指导教师: 班级:1605XXXX 学号:XX
学生姓名:王小明
一、实验目的和任务
1.了解率失真函数性质、意义。

2.掌握简单的率失真函数计算方法;
3.掌握使用Matlab 实现一般率失真函数的计算方法;
4.掌握Matlab 求解非线性方程组的方法。

二、实验内容及原理
(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 )=δ}。

在数学上,就是在约束条件:
δ==∑∑==),()|()()(11
v 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
1
11
11
)
|(),()|()()
()|(log
)|()()]|([μ (3)
其中∑==r
u u v p u p v p 1
)|()()(

0)|(=∂∂u v p F 得,})
(),(exp{)()|(u p v u Sd v p u v p u μ
+=
为方便引入参数,})
(exp{
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 1
log )()())((λδδ (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.从理论上计算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.熵函数求解
function [ h ] = Hp( 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. 失真度求解函数
function [ R,delta ] = R_delta( Pu,D,eps )
%失真度求解函数 [r,s]=size(D); % r=2; % s=2;
delta_min=sum(Pu.*min(D',[],1)); delta_max=sum(Pu*D); R=[];delta=[]; P=ones(r,s)/s; SS=100:-0.1:-100; SS=-exp(SS); for S=SS Pv=Pu*P;
Ed0=sum(Pu*(P.*D)); Rs0=0; for u=1:r for v=1:s
if P(u,v)~=0&Pu(u)~=0
Rs0=Rs0+Pu(u)*P(u,v)*log(P(u,v)/Pv(v)); end end
end
P=exp(S*D);
for i=1:s
P(:,i)=P(:,i)*Pv(i);
end
for i=1:r
SumP=sum(P(i,:));
P(i,:)=P(i,:)/SumP;
end
Km=50000;
for k=1:Km
Pv=Pu*P;
Edn=sum(Pu*(P.*D));
Rsn=0;
for u=1:r
for v=1:s
if P(u,v)~=0&Pu(u)~=0
Rsn=Rsn+Pu(u)*P(u,v)*log(P(u,v)/Pv(v));
end
end
end
P=exp(S*D);
for i=1:s
P(:,i)=P(:,i)*Pv(i);
end
for i=1:r
SumP=sum(P(i,:));
P(i,:)=P(i,:)/SumP;
end
if abs(Edn-Ed0)<eps && abs(Rsn-Rs0)<eps
break;
end
Ed0=Edn;
Rs0=Rsn;
end
if k<Km
R=[R,Rsn];
delta=[delta,Edn];
end
end
end
3.主函数:
clear all
s=2;%程序选择,s=1实验1,s=2实验2
if s==1
alpha=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;
[R1,delta1]=R_delta(Pu,D,eps1);
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');
else if s==2
alpha=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.000001;
[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');
end
end
五、实验数据分析及处理
图3.1
图3.2
六、实验结论与感悟(或讨论)
通过本次试验,我了解了matlab的使用环境,软件的基本使用方式,并且用其解决一些信息论问题。

学会使用常用的一些软件,能够给与我们学习以及日后的工作上很大帮助。

相关文档
最新文档