信道容量计算

import numpy as np
import math
#输入信道矩阵
m = int(input("输入信道矩阵行数:"))
n = int(input("输入信道矩阵列数:"))
pyx = np.empty([m,n], dtype = float) 
for i in range(m):
    for j in range(n):
        pyx[i][j] = float(input())
print("信道矩阵是\n",pyx)
print(pyx.shape)
e = float(input("输入精度:"))
px = np.empty([1,m], dtype = float)
for i in range(m):
    px[0][i] = 1.0/m

py = np.empty([1,n], dtype = float)
py = np.dot(px,pyx)
pxy = np.empty([m,n], dtype = float) 

IU =10
IL = 0
b = np.empty([m,n], dtype = float)
while abs(IU-IL)>e:
    for i in range(m): 
        for k in range(n):
            a = pyx[i][k]*math.log(pyx[i][k]/py[0][k])
            b[i][k] = float(a)
    F = np.exp(b.sum(axis=1))
    h = np.vdot(F,px)
    x = sum(F)
    IL = math.log(h,2)
    g = max(F)
    IU = math.log(g,2)
    for i in range(m):
        px[0][i] = px[0][i] * F[i] / h
    py = np.dot(px,pyx)
    if abs(IU-IL)<=e:
        print(IL)
        break
  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值