shenpowerallo.m
上传用户:lgs139
上传日期:2019-12-15
资源大小:2k
文件大小:2k
- function [p,outage]= shenpowerallo(channel,suballo,N,K,Ptot,noise,gamma)
- for i=1:K
- n(i)=sum(suballo(i,:));
- end
- for user=1:K
- used=[];
- for j=1:N
- if suballo(user,j)>0
- used=[used channel(user,j)];
- end
- end
- usedlength=length(used);
- for i=1:length(used)
- [minvalue minindex]=min(used);
- usedordered(user,i)=minvalue;
- used=[used(1:minindex-1) used(minindex+1:length(used))];
- end
- usedordered(user,:)=usedordered(user,:)/noise;
-
- h(user)=usedordered(user,1);
- vtemp=0;
- for m=2:usedlength
- vtemp=vtemp+(usedordered(user,m)-usedordered(user,1))/(usedordered(user,1)*usedordered(user,m));
- end
- v(user)=vtemp;
-
- ytemp=1;
- for m=2:usedlength
- ytemp=ytemp*usedordered(user,m)/usedordered(user,1);
- end
- y(user)=ytemp;
-
- end
- coef(1)=1;
- power(1)=1;
- for i=2:K
- 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)));
- power(i)=n(1)*gamma(i)/(n(i)*gamma(1));
- end
- infcheck=0;
- for i=1:K
- if coef(i)==inf
- infcheck=1;
- end
- end
- if (infcheck==1)
- for i=1:K
- p(i)=Ptot/N*n(i);
- end
- outage=1;
- return;
- end
- fun=['x'];
- for i=2:K
- fun=[fun,'+',num2str(coef(i)),'*x^',num2str(power(i))];
- end
- for i=1:101
- guessx=0.01*(i-1)*Ptot;
- guess(i)=guessx;
- for j=2:K
- guess(i)=guess(i)+coef(j)*guessx^power(j);
- end
-
- guess(i)=guess(i)-Ptot;
- end
- [guessvalue,guessindex]=min(abs(guess));
- fun=[fun,'-',num2str(Ptot)];
- p(1)=fzero(fun,0.01*(guessindex-1)*Ptot);
- if isnan(p(1))==1
- for i=1:K
- p(i)=Ptot/N*n(i);
- end
- outage=1;
- else
- for i=2:K
- p(i)=coef(i)*p(1)^power(i);
- end
- outage=0;
- end