迭代求信道容量

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

迭代法求(非对称)信道容量

前言:对于给定的信道,除了对称信道之外,信道容量的计算是比较复杂的,但可以用迭代算法实现近似的信道容量。

具体细节:1..设输入变量为A (ai ),输出为B(bi),对于给定的信道,信道转移矩阵一般都为定值,设为已知,用矩阵Pa2b 表示。

2.为了提高计算效率,将累加求和等运算尽量用矩阵运算而不是循环运算。

实验数据分析:实验发现,当输入的信道转移矩阵为对称信道时,输入分布很快收敛于等概分布,然后很快的退出迭代运算而输出结果,当然这时候的结果是经检验不正确的。具体分析原因如下:

当迭代至输入分布赋值为等概(或接近等概)时,事实上我们一开始就初始化输入分布P (ai )为等概分布,由

])|()()|(ln

)|(exp[∑∑=j i i j i

i j i j i a b P a P a b P a b P α

其中)(j b P =)|()(i j i i

a b P a P ∑,当)(i a P 等概分布且信道为准对称时易得)(j b P 等概记为P

(b0)。所以])()|(log )|(exp[0b P a b P a b P i j i j j i ∑=α,由对称矩阵性质易得每行求和后数值相等。故得到i α是相等的(记为0α)。所以:

C(n ,n)=)ln())(ln())(ln())(ln(

000αααα===∑∑∑i

i i i i i i a P a P a P 而另一变量: C '(n+1,n)=)ln()max ln(0αα=i i

可见C=C ',则C-C '<ε恒成立,故退出整个迭代过程,而得不到正确的结果。 具体实现代码(matlab )如下:

%通过迭代算法求某信道的信道容量%

%设输入变量为A (ai ),输出为B(bi),对于给定的信道,信道转移矩阵一般都为定值,设为已知,用矩阵Pa2b 表示%

%为了提高计算效率,讲累加求和等运算尽量用矩阵运算而不是循环运算%

%最后为了方便调用,将其封装成一个函数。

%输入参数:信道转移矩阵:Pa2b (r*s 矩阵);误差容限:Error_Tor ,误差容限缺省值为1*10^(-2)%

%输出参数:为信道误差容限下的信道容量:Channel_Cap_Extreme ;

%和对应的最佳输入分布:Pa_opti%

%BY :独孤败%

%AT:NUPT 2010-11-18%

function

[Channel_Cap_Extreme,Pa_opti]=CapChannel_DieDai(Pa2b,Error_Tor)

%常量申明及参数检测

if(min(size(Pa2b))<=1)

error('输入的信道转移矩阵太小或出错,请检查');

end

if(nargin<2)

Error_Tor=1*10^(-2); %r如果误差容限没有给定,则缺省值为1*10^(-2)

end

%变量定义和初始化,在matlab里面变量时可以不定义和初始化的,但是为了可视性,这里定义

[NumOfIn,NumOfOut]=size(Pa2b); %根据转移矩阵获得信道输入变量和输出变量的维数(r,s)

Pa_Temper=ones(1,NumOfIn)*(1/NumOfIn); %输入概率变量,每迭代一次改变一次,初始化为等概

Channel_Cap_Temper=1+Error_Tor; %信道容量初始化为正无穷大,以便使其失效Channel_Cap_AUX=0; %辅助信道容量变量,初始化为0

Num_OF_Cyc=0; %循环迭代次数,用于测试;

while abs(Channel_Cap_Temper-Channel_Cap_AUX)>=Error_Tor

Pb_Temper=Pa_Temper*Pa2b; %获得输出概率分布(1*s=1*r * r*s)for i=1:NumOfIn

Alaph(i)=exp(sum(Pa2b(i,:).*log(Pa2b(i,:)./Pb_Temper))); %计算获取中间变量

end

PA_Temper=Pa_Temper.*Alaph; %由于下面三次用到这一累积,故单独计算,提高效率

Channel_Cap_Temper=log(sum(PA_Temper)); %获取此次循环信道容量

Channel_Cap_AUX=log(max(Alaph)); %获取此次辅助循环信道容量

Pa_Temper=PA_Temper/sum(PA_Temper); %输入概率重新赋值

Num_OF_Cyc=Num_OF_Cyc+1;

End

%循环结束获得容限误差内的最大信道容量

Channel_Cap_Extreme=Channel_Cap_Temper;

Pa_opti=Pa_Temper; %循环结束获得容限误差内的最有输入分布

相关文档
最新文档