shenpowerallo.m
Upload User: lgs139
Upload Date: 2019-12-15
Package Size: 2k
Code Size: 2k
Development Platform:

Matlab

  1. function [p,outage]= shenpowerallo(channel,suballo,N,K,Ptot,noise,gamma)
  2. for i=1:K
  3. n(i)=sum(suballo(i,:));   
  4. end
  5. for user=1:K
  6.    used=[];
  7. for j=1:N
  8.     if suballo(user,j)>0
  9.        used=[used channel(user,j)];
  10.     end
  11. end
  12. usedlength=length(used);
  13. for i=1:length(used)
  14.     [minvalue minindex]=min(used);
  15.     usedordered(user,i)=minvalue;
  16.     used=[used(1:minindex-1) used(minindex+1:length(used))];
  17. end
  18.    usedordered(user,:)=usedordered(user,:)/noise;
  19.    
  20.    h(user)=usedordered(user,1);
  21.    vtemp=0;
  22.    for m=2:usedlength
  23.     vtemp=vtemp+(usedordered(user,m)-usedordered(user,1))/(usedordered(user,1)*usedordered(user,m));   
  24.    end
  25.    v(user)=vtemp;
  26.    
  27.    ytemp=1;
  28.    for m=2:usedlength
  29.     ytemp=ytemp*usedordered(user,m)/usedordered(user,1);   
  30.    end
  31.    y(user)=ytemp;
  32.    
  33. end
  34. coef(1)=1;
  35. power(1)=1;
  36. for i=2:K
  37.     coef(i)=n(i)/(h(i)*y(i)^(1/n(i)))*(h(1)*y(1)^(1/n(1))/n(1))^(n(1)*gamma(i)/(n(i)*gamma(1)));
  38.     power(i)=n(1)*gamma(i)/(n(i)*gamma(1));
  39. end
  40. infcheck=0;
  41. for i=1:K
  42.     if coef(i)==inf
  43.         infcheck=1;
  44.     end
  45. end
  46. if (infcheck==1)
  47.    for i=1:K
  48.       p(i)=Ptot/N*n(i);
  49.    end
  50.    outage=1;
  51.    return;
  52. end
  53. fun=['x'];
  54. for i=2:K
  55. fun=[fun,'+',num2str(coef(i)),'*x^',num2str(power(i))];   
  56. end
  57. for i=1:101
  58.    guessx=0.01*(i-1)*Ptot;
  59.    guess(i)=guessx;
  60.    for j=2:K
  61.     guess(i)=guess(i)+coef(j)*guessx^power(j);   
  62.    end
  63.    
  64.    guess(i)=guess(i)-Ptot;   
  65. end
  66. [guessvalue,guessindex]=min(abs(guess));
  67. fun=[fun,'-',num2str(Ptot)];
  68. p(1)=fzero(fun,0.01*(guessindex-1)*Ptot);
  69. if isnan(p(1))==1
  70.    for i=1:K
  71.       p(i)=Ptot/N*n(i);
  72.    end
  73.    outage=1;
  74. else 
  75.    for i=2:K
  76.       p(i)=coef(i)*p(1)^power(i);
  77.    end
  78.    outage=0;
  79. end