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© )