信道容量迭代算法

采用Matlab编程实现,程序代码如下:

%n代表行,m代表列
%p表示输入概率分布
%q表示输出概率分布
%C表示信道容量
%e为很小的正数
%k表示迭代次数
function [] = Capacity(P)
[n,m] = size(P);
p=ones(1,n)/n; p=p';
C=0; k=1;e=10^-5;
Cl=0;Cu=0;
while 1
    %(1)求q
    for j=1:m
        q(j,1) = 0;
        for i =1:n
            q(j,1) = p(i,1)*P(i,j)+q(j,1);
        end
    end
    %(2)求a
    for i=1:n
        lna(i,1)=0;
        for j=1:m
            middle = P(i,j)/q(j,1) 
            if middle ~= 0
            lna(i,1) = P(i,j)*log(middle)+lna(i,1);
            end
        end
        a(i,1) = exp(lna(i,1));
    end
    %(3)计算u
    u = 0;
    for i=1:n
        u = a(i,1)*p(i,1)+u;
    end
    %(4)计算Cl
    Cl = log2(u);
    Cu = log2(max(a));
    %(5)比较Cu和Cl
    if (Cu-Cl)<e
        break;
    end
    for i=1:n
        p(i,1) = p(i,1)*a(i,1)/u;
        k = k+1;
    end
end
    %(6)输出信道容量C 迭代次数k 输入概率分布p
    C=Cl
    p
    k


  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值