How to normalize complex-valued data?
First off, it's always helpful to think geometrically about what complex numbers are, and what arithmetic operations achieve.



In your function, you are using the mean and standard deviation of the absolute value of these complex numbers. That means that if you perform your operation to the absolute value of your data:

(tmp - tmp.mean()) / tmp.std()


you will end up with normalized data of mean 0 and standard deviation 1.

Going back to thinking geometrically, when you perform your original operation:

(x_source - tmp.mean()) / tmp.std()


you are essentially moving your data's mean tmp.mean() units to the left, then scaling horizontally by 1/tmp.std(). 

Notice none of this is vertical shift or scaling, so something smells funny.



What I would do: I would normalize each coordinate independently.

Finding the mean is fine -- the mean of complex data points is the same as means of components:
$$
\bar z = (\bar x , \bar y)
$$
So you can subtract the mean of the $x$ value's from each input value's $x$-coordinate. Ditto for $y$.

Then you divide the real component by the standard deviation of the real component, and ditto for the imaginary component.

It could also be appropriate to divide by the standard deviation of the (new) norms. This would ensure good properties involving your data lying within a circle of a certain radius.



Code:

real_data = real(x_source)
imag_data = imaginary(x_source)

real_data = ( real_data - real_data.mean() ) / real_data.std()
imag_data = ( imag_data - imag_data.mean() ) / imag_data.std()

x_source_norm = real_data + i * imag_data