forked from CodeCasting/DeepIRS
-
Notifications
You must be signed in to change notification settings - Fork 1
/
iter_opt_prob_1.m
36 lines (28 loc) · 1.09 KB
/
iter_opt_prob_1.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
function [W, tau, INTERFERENCE, cvx_status, cvx_optval] = iter_opt_prob_1(H,sigma_2,SINR_target,int_users_matrix)
N_BS = size(H,1);
N_users = size(H,2);
%cvx_begin
cvx_clear
clear W tau INTERFERENCE cvx_optval
cvx_begin
cvx_quiet(true)
cvx_solver sedumi %SDPT3 %Mosek % Choose the underlying solver
cvx_precision best % Change the cvx numerical precision
% Define your optimization variables here
variable W(N_BS,N_users) complex; % add the word binary for binary constraints - see CVX documentation for more options
variable tau nonnegative; % Auxiliary variable
expression INTERFERENCE(N_users,N_users);
all_users = 1:N_users;
for k = all_users
int_users = int_users_matrix(k,:); % interfering users
INTERFERENCE(:,k) = [W(:,int_users)'*H(:,k); sqrt(sigma_2)];
end
% Write the optimization problem
minimize( tau^2 );
subject to
for k = all_users
{INTERFERENCE(:,k), sqrt(1/SINR_target)*real(((H(:,k)')*W(:,k)))} == complex_lorentz(N_users); % SINR CONSTRAINT
end
{W(:), tau} == complex_lorentz(N_BS * N_users); % POWER CONSTRAINT
cvx_end
end