求一个信道容量的matlab程序

求一个信道容量的matlab程序,第1张

代码:function main()

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:信道容量

%P:转移概率矩阵

%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

源程序里面有帮助文件,解释了函数的用处,我建议多考渗拆虑输入输出,注意函数要干什么而不要太纠结于函数的具体。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12515918.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存