# Semi OT - data-aided SNR estimate of a complex signal in MATLAB/Octave

I’m working on processing, in MATLAB/Octave, some data that I’ve taken
with
a communication device we’ve built. We’re planning on moving to
USRP/GNURadio, but before that happens, I’ve got to get this data
processed.

Previously we’ve done communication with an on-off-keying signal (OOK
with a
laser). We wanted to estimate the SNR of the signal, so we use a
data-aided
approach. Now I’m changing the system to use complex signaling and I’m
struggling with how to do the SNR estimation with complex signals.
Previously, we did this:

Y=2*(RxSymbols-mean(RxSymbols));

% First statistic, E(Yi^2)
Stat1=var(Y);

% Second statistic, E(Yi*Xi)
Stat2=mean(Y.*X);

% SNR = 2E(YiXi)^2/( E(Yi^2)-E(YiXi)^2 )
SNRlin=2
Stat2^2/(Stat1-Stat2^2);
SNR_dB=10*log10(SNRlin);

Now I need to modify this for complex signals.
Should I:
a) compute the SNR for the real and imaginary components separately and
then somehow combine them?
b) compute the SNR on the complex signals directly.

If a), then how should I combine them? It’s AWGN noise, btw.
If b), then I need to take the covariance of Y, but I don’t know how to
take
the two variances and use them.

I’ve never been all that good at this stuff and I’m learning slowly.