You are allowed to use real wherever you want in CVX. Even if you don’t theoretically need “real” if an expression would be real in exact arithmetic, sometimes it is necessary in order to deal with a roundoff level imaginary term.
I don’t see anything obviously wrong with your code, but ultimately, you know better than I do what the original problem is, and the properties of its input data.
Have you run your cide? Did you get a solution?