-
Notifications
You must be signed in to change notification settings - Fork 1
/
gradSumRate_v2.m
48 lines (39 loc) · 1.88 KB
/
gradSumRate_v2.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Paper title: Accelerated Projected Gradient Method for the Optimization of Cell-Free Massive MIMO Downlink
% Conference: IEEE PIMRC 2020
% Authors: Muhammad Farooq, Hien Quoc Ngo, and Le Nam Tran
% Written by: Muhammad Farooq
% Email: Muhammad.Farooq@ucdconnect.ie
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function [out] = gradSumRate_v2(nAPs,nTx,nUsers,myNu,myBeta,myPsi,zeta_d,Tc,Tp,x)
%gradSumRate_v2: Function to calculate the gradient of the sum rate
x_new = reshape(x,nUsers,[])';
out = zeros(nAPs*nUsers,1);
for iUser =1:nUsers
sig = (zeta_d)*((sqrt(myNu(:,iUser))'*x(iUser:nUsers:end)))^2;
% gradient of the signal part
gradsig=zeros(nAPs*nUsers,1);
gradsig(iUser:nUsers:end)=sqrt(myNu(:,iUser));
gradsig=gradsig*(sqrt(myNu(:,iUser))'*x(iUser:nUsers:end));
% compute the gradient of the interference
gradinterference = zeros(nAPs*nUsers,1);
for jUser = 1:nUsers
% the first sum in the intererence term
gradinterference(jUser:nUsers:end) =gradinterference(jUser:nUsers:end)+ (myBeta(:,iUser)).*...
x(jUser:nUsers:end)/nTx;
if(jUser~=iUser)
mygammatilde = abs((myPsi(:,iUser)'*myPsi(:,jUser)))...
*sqrt(myNu(:,jUser))./myBeta(:,jUser)...
.*myBeta(:,iUser);
gradinterference(jUser:nUsers:end)=gradinterference(jUser:nUsers:end)+...
mygammatilde*(mygammatilde'*x(jUser:nUsers:end));
end
end
%interference
interference=computeInterference(nAPs,nTx,nUsers,x_new,myNu,myBeta,myPsi,iUser,zeta_d);
mu = sig+interference+1/nTx^2;
mubar = interference+1/nTx^2;
out = out + 2*(gradsig+gradinterference)/mu-2*gradinterference/mubar;
end
out = (1-Tp/Tc)*out*zeta_d*log2(exp(1));
end