clc
p=[1/2 1/4 0 1/4
0 1 0 0
0 0 1 0
1/4 0 1/4 1/2]
channel_cap(p,0.001)
% Matlab实现离散信道容量的迭代算法
% 功能:利用迭代算法计算离散信道的容量者槐%参首态友数解释
%C:信道容量
%B:中间变量矩阵
%e:信道容限
%X:输入概率分布
%n:迭代次数function channel_cap(P, e)
n=0
C=0
C_0=0
C_1=0
[r,s]=size(P)
for i=1:r
if(sum(P(i,:))~=1)%检测概率转移矩阵是否行和为1.
error('概率转移矩阵输入有误!!')
return
end
for j=1:s
if(P(i,j)<0||P(i,j)>1)%检测概率转移矩阵是否负值或大于1
error('概率闭猜转移矩阵输入有误!!')
return
end
end
end
X=ones(1,r)/r
A=zeros(1,r)
B=zeros(r,s)
while(1)
n=n+1
for i=1:r
for j=1:s
B(i,j)=log(P(i,j)/(X*P(:,j))+eps)
end
A(1,i)=exp(P(i,:)*B(i,:)')
end
C_0=log2(X*A')
C_1=log2(max(A))
if (abs(C_0-C_1)<e) %满足迭代终止条件停止迭代
C=C_0
fprintf('迭代次数: n=%d\n',n)
fprintf('信道容量: C=%f比特/符号\n',C)
break%满足后输出结果并退出
else
X=(X.*A)/(X*A')
continue
end
end
结果:迭代次数: n=6
信道容量: C=1.321928比特/符号
>> 参考: http://hi.baidu.com/snowworld2008/blog/item/22f091f3d78925da0b46e037.html
我最近败喊誉下载了一个WINNER II的MIMO信道模型,你可以去察段看一下,有点复杂,不过文件比较全,其中D1.1.2 是信道模型的说明。网址:www.ist-winner.org/deliverables.html ; 源代码及说明可以再这个网址里找到:www.ist-winner.org/phase_2_model.html源程序里面有帮助文件,解释了函数的用处,我建议多考渗拆虑输入输出,注意函数要干什么而不要太纠结于函数的具体。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)