hello
i cheanged my code
clc; clear; close all;
K = 3; % Unathorized Receivers
% Locations
BS = [0, 2]; IRS = [5, 2];
aURs = 4; bURs = 8;
aAR = 16; bAR = 20;
URs = aURs + (bURs-aURs)rand(K, 1);
URs = [URs, zeros(K, 1)];
AR = [(aAR + (bAR-aAR)rand(1, 1)), 0];
RicianFactor = 5; % Rician Factor
PL0 = -30; % Pathloss at the distance of 1 m
alpha = 2.2; % Pathloss exponent
NT = 4; % Number of BS antennas
M = 50; % Number of reflecting elements
Gamma = 24; a = 150; b = 0.014; % NLEH Model
sigman = -120; sigmas = -60;
Emin = 0; Emin_ek = 0;
nta = 0.5; nta_ek = 0.5;
epsilon = 1e-3;
gamma = 10;
gamma_ek = -10; % Maximum allowed SINR for the EHRs
sw = SWIPT;
sw.NT = NT;
sw.PL0 = PL0;
sw.alpha = alpha;
sw.RicianFactor = RicianFactor;
sw.Gamma = Gamma;
sw.a = a;
sw.b = b;
sw.M = M;
% sw.showMap(URs, AR, BS, IRS)
hd = sw.ChannelLink(BS, AR);
hr = sw.ChannelLink(IRS, AR);
for i = 1:K
gdk(:, i) = sw.ChannelLink(BS, URs(i, :)); %#ok
grk(:, i) = sw.ChannelLink(IRS, URs(i, :)); %#ok
end
for i = 1:M
G(:, i) = sw.ChannelLink(BS, IRS); %#ok
end
at = 0; bt = 2pi;
theta = (at + (bt-at)rand(1, M));
theta = exp(1itheta);
phi = diag(theta);
iteration = 0;
hH = (hr’phiG’)+hd’;
for i = 1:K
gkH(i,
= (grk(:, i)‘phiG’)+gdk(:, i)’; %#ok
end
Er_Emin = sw.Ein_EH(Emin);
Er_ek_Emin_ek = sw.Ein_EH(Emin_ek);
h = hH’;
gk = gkH;
napar = true;
epsstop = 0.01;
while napar
iteration = iteration+1;
cvx_begin
variable W(NT, NT) complex semidefinite
variable Z(NT, NT) complex semidefinite
variable rho(1) nonnegative
expression f1
f1 = trace(W)+trace(Z);
minimize f1
subject to
real(hH((W./gamma)-Z)hH’) >= sigman^2+(rho/(sigmas^2)); %#ok
real(gkH(1,
((W./gamma_ek)-Z)gkH(1, :)’) <= sigman^2+sigmas^2; %#ok
real(gkH(2,
((W./gamma_ek)-Z)gkH(2, :)’) <= sigman^2+sigmas^2; %#ok
real( gkH(3,
((W./gamma_ek)-Z)gkH(3, :)’) <= sigman^2+sigmas^2; %#ok
((hH(W+Z)hH’))+sigman^2 >=Er_Emin./nta(1-rho); %#ok
(gkH(1,
(W+Z)gk(1, :)’)+sigman^2 >= Er_ek_Emin_ekinv_pos(nta_ek); %#ok
(gkH(2,
(W+Z)gk(2, :)’)+sigman^2 >= Er_ek_Emin_ekinv_pos(nta_ek); %#ok
(gkH(3, :)*(W+Z)gk(3, :)’)+sigman^2 >= Er_ek_Emin_ekinv_pos(nta_ek); %#ok
0 <= rho; %#ok
rho <= 1; %#ok
trace(Z) >= 0; %#ok
trace(W) >= 0; %#ok
cvx_end
Gs = [diag(hr’)*G’; hd’];
for i = 1:K
Gqk(:, :, i) = [diag(grk(:, i)’)*G’; gdk(:, i)’]; %#ok
end
Tm = diag(ones(1, M+1));
L = 0.1; phis = 0.1;
lambda0=100;
val= zeros(iteration,1)
% cvx_begin sdp quiet
cvx_begin
% j=1;
% variable umax
% R==semidefinite(51);
variable lambda
maximize (lambda)
R=semidefinite(M+1);
% variable R(M+1, M+1) complex semidefinite
% expression s(M+1);
subject to
real( trace(Gs*((W/gamma)-Z)*Gs'*R)) >= (sigmas^2/rho)+sigman^2; %#ok
real( trace(Gqk(:, :, 1)*((W/gamma_ek)-Z)*Gqk(:, :, 1)'*R)) <= sigmas^2+sigman^2; %#ok
real( trace(Gqk(:, :, 2)*((W/gamma_ek)-Z)*Gqk(:, :, 2)'*R)) <= sigmas^2+sigman^2; %#ok
real( trace(Gqk(:, :, 3)*((W/gamma_ek)-Z)*Gqk(:, :, 3)'*R)) <= sigmas^2+sigman^2; %#ok
real( trace(Gs*(W+Z)*Gs'*R)+sigman^2) >= Er_Emin/(nta*(1-rho)); %#ok
real( trace(Gqk(:, :, 1)*(W+Z)*Gqk(:, :, 1)'*R)+sigman^2) >= Er_ek_Emin_ek/nta_ek; %#ok
real( trace(Gqk(:, :, 2)*(W+Z)*Gqk(:, :, 2)'*R)+sigman^2) >= Er_ek_Emin_ek/nta_ek; %#ok
real( trace(Gqk(:, :, 3)*(W+Z)*Gqk(:, :, 3)'*R)+sigman^2) >= Er_ek_Emin_ek/nta_ek; %#ok
trace(Tm*R) == 1; %#ok
trace(R) >= 0; %#ok
real( lambda(eye(M+1))*R*lambda(eye(M+1)') )>=real(( L* trace(R))); %#ok
cvx_end
lambda0=lambda ;
val(iteration)=lambda;
if strcmp(cvx_status, ‘Solved’)
phis = phis; %#ok
else
phis = phis/2;
end
t = (lambda(eye(M+1))/real(trace®))+phis;
L = min(1, t);
if L < epsstop
napar = false;
end
end
but i have another arror at line:
real ( lambda (eye (M+1))Rlambda(eye (M+1) ') )›-real(( L* trace®))
error is:
Error using indexing
Array indices must be positive integers or logical values.