信道容量的数值算法

  • 格式:doc
  • 大小:188.56 KB
  • 文档页数:4

信道容量的数值算法
1. 原理
1.1. 问题
在给定信道传输矩阵的情形下,求出信道容量和对应的最佳信源分布
2. 算法
假设信源符号个数为r ,信宿符号个数为s ,信道转移矩阵为P ,信源的概率分布为X ,信道容量为C
2.1. 计算步骤
step1 初始化信源分布r
X k i 1=
,其中,r i ≤≤1,迭代次数1=k step2 计算信源分布 ∑==r i ij
k i ij
k i k ij P X
P X 1φ ∑∑∑===+=r i s j k ij ij
s j k
ij ij k i P P X 111
1)
log exp()
log exp(φφ 其中 r i ≤≤1, s j ≤≤1
step3 计算信道容量
])l o g e x p (l o g [111∑∑==+=r i s
j k ij ij k P C
φ
step4 判断终止条件ε>-=++11||k k k C
C C err 是否满足,若条件不满足则1+=k k 并继续执 行step2,若条件满足则终止计算,此时的k i X 为最佳信源分布,k C 为信道容量
3. 数值计算
1) 对称信道) channel symmetric (的传输矩阵如下
⎥⎥⎥⎦
⎤⎢⎢⎢⎣⎡=3.05.02.02.03.05.05.02.03.0P 由对称信道的信道容量计算公式)(||log r H C -=ψ
因而信道容量的理论值为
);(m a x Y X I C =
0.2)
0.3, H (0.5,l o g 3-= 0.2l o g 0.
0.3l o g 0.30.5l o g 0.5l o g 3+++= b i t /s y m
b 0995.0= 用迭代法经2次迭代计算出的信道容量为
bit/symbol
0.099487'=C
2) 弱对称信道) channel symmetric weakly (的传输矩阵如下
⎥⎥⎥⎦
⎤⎢⎢⎢⎣⎡=612131216131P 信道容量的理论值为
);(max Y X I C =
1/2)
1/6, 1/3, H(log3-= 2
1l o g 2161l o g 6131l o g 31l o g 3+++= b i t /s y m b
1258.0= 用迭代法经2次迭代计算出的信道容量为
bit/symbol
0.125815'=C
3) 任意信道,信道传输矩阵如下
⎥⎦
⎤⎢⎣⎡=8.015.005.005.016.079.0P 用迭代法经4次迭代计算出的信道容量为
bit/symbol
0.571215 '=C 4) (assignment 5,problem 2 ,,Unused symbol ),信道的传输矩阵为
⎥⎥⎥⎥⎥⎥⎦
⎤⎢⎢⎢⎢⎢⎢⎣⎡=3231031313103132P 假定X 的取值为i a )31(≤≤i ,Y 的取值为j b )31(≤≤j 由1a X =和3a X =时信道的对称性以及2a X =时的不可靠传输,可以假定最佳输入概率分布为
21)()(31====a X P a X P
0)(2==a X P
这时,3/1)()()(321======b Y P b Y P b Y P
由信道容量定理,
∑=-==j ij j ij i P b Y P P Y a X I ))(log(
);(
可以算出
3
2)1log(31)21log(32);(1=--==Y a X I 3
20)1log(31)1log(31)1log(31);(2<=---==Y a X I 3
2)1log(31)21log(32);(3=--==Y a X I 因此假定的输入分布确实达到了最佳输入分布,这时的信道容量为bit/symbol 3
2=C 用迭代法经33次迭代计算出的信道容量为
bit/symbol 0.666667 '=C
4. 实验代码
% 迭代法计算信道容量
% P 是信道传输矩阵
P=[0.3 0.2 0.5
0.5 0.3 0.2
0.2 0.5 0.3];
% P=[1/3 1/6 1/2
% 1/3 1/2 1/6];
P(find(P==0))=10^(-31); %修改传输矩阵中的0元素,便于程序的执行
[r,s]=size(P);
X0=1/r*ones(1,r); % 初始信源分布
phi=zeros(r,s);
temp=zeros(1,r);
for i=1:r
for j=1:s
phi(i,j)=X0(i)*P(i,j)/(X0(1:r)*P(1:r,j));
end
end
for i=1:r
temp(i)=exp(log(phi(i,1:s))*P(i,1:s)');
end
X1(1:r)=temp(1:r)/sum(temp);
C1=log2(sum(temp)); % 信道容量
k=1;
err=1000;
while(err>0.0000001)
for i=1:r
for j=1:s
phi(i,j)=X1(i)*P(i,j)/(X1(1:r)*P(1:r,j));
end
end
for i=1:r
temp(i)=exp(log(phi(i,1:s))*P(i,1:s)');
end
X0(1:r)=temp(1:r)/sum(temp);
C0=log2(sum(temp)); % 信道容量
err=abs(C0-C1)/C1;
C1=C0;
X1=X0;
k=k+1;
end
fprintf('信道矩阵:\n');
disp(P);
fprintf('信道容量C = %f bit/symbol\n',C1); fprintf('迭代次数n = %d\n',k);。