A very brief description of the optimization is:
Complex symbols \mathbf{x} are transmitted through a non-ideal channel represented by complex matrix \mathbf{A}. Thus, the received symbols are:
$$\mathbf{y} = \mathbf{Ax}$$
Then, a precoder \mathbf{W} is used to undo the effects of \mathbf{A}. In this case, the symbols that are transmitted become:
$$x’ = \mathbf{Wx}$$
This precoder needs to be chosen such that the data-rate is optimized. The data rate is optimized if the log determinant of C is maximum, where C is the direct precoded channel, a diagonal complex matrix.
V is the crosstalk matrix, a complex composed by the elements for the precoded channel (\mathbf{AW}) that are not in the main diagonal.
The constraints are related to power control.
cvx_begin
variable W(N,N) complex
variable u
variable C(N,N)
variable V(N,N) complex
C = abs(diag(diag(A*W)))
V = A*W - C
maximize( log_det(C) )
subject to
norm(W,'fro') <= u*sqrt(P)
u^2 + (norm(V,'fro')^2)/N <= 1
cvx_end
Convexity of the problem
This problem is part of this paper (see Equations 13 and 14).
The author (M. Malkin) states the problem is convex and, according to his thesis, uses CVX to solve it.
The following quote was extracted from the paper:
Note that there is no problem with
assuming that the diagonal matrix C
has positive entries since for any
complex diagonal entries of C, the
precoder matrix W could be multiplied by
the appropriate diagonal complex
phasor matrix without violating any of
the constraints in (13).
CVX implementation
I get the following errors:
CVX Warning:
Models involving “log_det” or other functions in the log, exp, and entropy
family are solved using an experimental successive approximation method.
The method requires multiple calls to the solver, so it can be slow; and
in certain cases it fails to converge. See Appendix D of the the user’s
guide for more information about this method, and for instructions on how
to suppress this warning in the future.
Error using cvx/geo_mean (line 111)
Disciplined convex programming error:
Invalid computation: geo_mean( {complex affine} )
Error in cvx/det_rootn (line 17)
cvx_optval = geo_mean( diag( X ) );
Error in log_det (line 28)
cvx_optval = size(X,1)*log(det_rootn(X));
Error in optimization_problem (line 58)
maximize( log_det(C) )