Wk(:,:,k) is Hermite , SINR_min = 1,SINR_residual(l) is a slack variable which is a scale number.cvx gets this error when I run this line, but when I add real () in front of Wk(:,:,k) , it works, but it greatly damages the accuracy of my algorithm.
the codes are as followed:
function [v_opt,flag] = Generate_beamforming_v(N,M,K, H_k,rho,…
W_ini, v_ini, noise_maxpower, SINR_min,n)
v_total(:,1)=v_ini;
scaler=10;
step = 5;
scaler_max=max(200-n20,30); %lambda
for n_outter=1:10
scaler=10;
v_inner=sqrt(1/2)(randn(N,1)+1j*randn(N,1));
v_inner=exp(1j.*angle(v_inner));
for temp = 1:50
cvx_solver mosek
cvx_save_prefs
cvx_begin quiet
variable v(N,1) complex
variable epselo(2*N)
variable SINR_residual(K)
variable relax_scaler_w(K,K)
expressions LMI_S(M*N+1,M*N+1,K)...
Phi_k(M*N,M*N,K) c(K)...
b(M*N,K);
Wk = W_ini; %N*M*K
for k = 1:K
Wm_last = zeros(M,M);
for m = k+1:K
Wm = Wk(:,:,m);
Wm_last = Wm_last + Wm;
end
Wm1_last = zeros(M,M);
for m1 = 1:k-1
Wm1 = Wk(:,:,m1);
Wm1_last = Wm1_last + Wm1;
end
v_k(:,:,k) = kron((-Wm1_last).',v*v_ini');%MN*MN
b = zeros(M*N,K);
for l = k : K
Phi_k(:,:,k) =kron(((Wk(:,:,k)/(SINR_min+SINR_residual(l))) - Wm_last).',v*v_ini'); %MN*MN
b(:,l)= Phi_k(:,:,k)*vec(H_k(:,:,l)); %MN*1
c = vec(H_k(:,:,l))'*Phi_k(:,:,k)*vec(H_k(:,:,l)) - noise_maxpower + relax_scaler_w(k,l)*rho(k)^2;
LMI_S(:,:,l)=[relax_scaler_w(k,l)*eye(M*N)+Phi_k(:,:,k)+v_k(:,:,k) b(:,l);...
b(:,l)' c];
end
end
maximize -scaler*sum(epselo)+sum(SINR_residual)
subject to
for k = 1:K
for l = k:K
LMI_S(:,:,l) == hermitian_semidefinite(M*N+1);
relax_scaler_w(k,l)>=0;
end
for n = 1:N
norm(v(n),2)<=sqrt(1+epselo(N+n));
v_inner(n)'*v_inner(n)-2*real(v_inner(n)'*v(n))<=epselo(n)-1;
end
end
epselo>=0;
I really need your help
Have you proven this is a convex optimization problem?