clear;
clc;
channel_n=6;
P=1;
N0=0.5;
h1=random('rayleigh',1,1,channel_n);
h2=h1.^2;
h2sorted=sort(h2);
h=h2sorted/N0
h=[0 h]
syms lamda;
for k=1:channel_n
p=zeros(1,channel_n);
sum=0;
for i=k:channel_n
sum=sum+(1/lamda-1/h(i+1));
end
f=sum-P;
x=solve(f,lamda);
x=eval(x);
if x>h(k) && x<h(k+1)
capacity=0;
for i=k:channel_n
p(i)=1/x-1/h(i+1);
capacity=capacity+log2(1+p(i)*h(i+1));
end
p
capacity
end
end
ave=0;
for i=1:channel_n
ave=ave+log2(1+(P/channel_n)*h(i+1));
end
ave
下面那部分是输出计算的p和系统的capacity,最后的ave是相当于平均分配实现的capacity,算是和注水算法做一个对比。