I have attached my code below.
clear;
clc;
%% Parameters
BW=180000;
K=15;
M=K;
N=K;
gamma=1e6;%penalty factor
eta=1e6;
iter_num=1;
noise_density_dBm=-174;
noise=10^(noise_density_dBm/10)BW;
Pu_max_dBm=23;%dBm
Pu_max=10^(Pu_max_dBm/10);
Pd_max_dBm=43;
Pd_max=10^(Pd_max_dBm/10);
Pu=Pu_maxones(M,K);
Pd=Pd_max/N*ones(N,K);
% Pd=Pu;
Rd_min=1.5e6/BW;
Ru_min=1.8e4;
%% distance
radius=200;
U_x=random(‘uniform’,-radius,radius,M,1);
U_y=random(‘uniform’,-radius,radius,M,1);
U_d=sqrt(abs(U_x).^2+abs(U_y).^2);
D_x=random(‘uniform’,-radius,radius,N,1);
D_y=random(‘uniform’,-radius,radius,N,1);
D_d=sqrt(abs(D_x).^2+abs(D_y).^2);
d_user=zeros(M,N);
for m=1:M
for n=1:N
d_user(m,n)=sqrt(abs(U_x(m)-D_x(n))^2+abs(U_y(m)-D_y(n))^2);
end
end
%% multiple channel realization
sigma=10;
h_bb_dB=100;
beta_BU_dB=128.1+37.6log10(U_d/1000)+sigmarandn(size(U_d));
beta_BU=10.^(-beta_BU_dB/10);
beta_BD_dB=128.1+37.6log10(D_d/1000)+sigmarandn(size(D_d));
beta_BD=10.^(-beta_BD_dB/10);
beta_user_dB=148+40log10(d_user/1000)+sigmarandn(size(d_user));
beta_user=10.^(-beta_user_dB/10);
h_mk=sqrt(beta_BU).(randn(M,K)+1jrandn(M,K))/sqrt(2);
h_nk=sqrt(beta_BD).(randn(N,K)+1jrandn(N,K))/sqrt(2);
h_bbk=sqrt(10.^(-h_bb_dB/10))(randn(1,K)+1jrandn(1,K))/sqrt(2);
for k=1:K
h_user=sqrt(beta_user).(randn(M,N)+1jrandn(M,N))/sqrt(2);
H(:,:,k)=h_user;
end
%% Initial (Greedy) RB assignments to X and Y.
X_i=eye(M);
Y_i=eye(N);
%% CVX: compute the optimal X and P for FD RBs
f2_i=Msum(log2(noise+sum(Y_i.Pd.(abs(h_bbk).^2),1)))+sum(sum(log2(noise+squeeze(sum(shiftdim(((X_i.Pu)’).ones(K,M,N),1).(abs(H).^2),1)))))- …
gamma(sum(sum(X_i.^2)))-eta(sum(sum(Y_i.^2)));
grad_x=squeeze(sum(shiftdim((Pu’).ones(K,M,N),1).(abs(H).^2)./((noise+shiftdim(repmat(squeeze(sum(shiftdim((X_i’).ones(K,M,N),1).shiftdim((Pu’).ones(K,M,N),1).(abs(H).^2),1)),[1,1,M]),2))log(2)),2))- …
2gammaX_i;
gradx=reshape(grad_x,1,MK);
grad_y=MPd.(abs(h_bbk).^2)./((noise+sum(Y_i.Pd.(abs(h_bbk).^2),1))log(2))-2etaY_i;
grady=reshape(grad_y,1,NK);
cvx_begin
cvx_solver mosek
variables X(M,K) Y(N,K)
minimize(-(sum(sum( log(noise+repmat(sum(Y.Pd.(abs(h_bbk).^2.ones(N,K)),1),M,1)+X.Pu.(abs(h_mk).^2))/log(2) ))+ …
sum(sum( log(noise+ squeeze(sum(shiftdim(repmat((X.Pu)’,[1,1,N]),1).(abs(H).^2),1)) +Y.Pd.(abs(h_nk).^2))/log(2) )) - …
-gammasum(sum(X))-etasum(sum(Y))- …
(f2_i+gradx(reshape(X-X_i,1,MK))’+grady(reshape(Y-Y_i,1,N*K))’)));
subject to
X>=0
X<=1
Y>=0
Y<=1
sum(X,1)<=1
sum(X,2)==1
sum(Y,1)<=1
sum(Y,2)==1
cvx_endPreformatted text