
From:  Tom Rondeau 
Subject:  Re: [Discussgnuradio] m2m4 SNR estimator off by 3 dB 
Date:  Thu, 28 Aug 2014 15:09:42 0700 
Tom,
I just have a BPSK sim: random source > map +/1 > char2float > complex > add < noise source
I mag^2 probe the inputs to the adder and SNR probe the output. Everything is complex. The mag^2 blocks give me exactly what I expect from the char2float scale and the noise source variance. The SNR probe is off by 3 dB for any set of input powers. For example, if I set the noise power to 0 dB and the signal to 6 dB I get 9 dB SNR. 3 dB noise, 10 dB signal I get 10 dB SNR. This seems consistent with the extra 2 x factor in the code. Here's the _expression_ from Pauluzzi/Beaulieu
p = sqrt(2 * M2^2  M4) / (M2  sqrt(2 * M2^2  M4))
M2 = 2nd moment of input
M4 = 4th moment of input
p = Es/No estimate for complex signals
Not sure how I'm getting it wrong, if I am. I have gnuradio v3.7.4. Perhaps this was corrected in a more recent version? Could you share your flowgraph so I could compare with mine?
Thanks,
Jared.
address@hidden wrote: To: Jared Dulmage <address@hidden>
From: Tom Rondeau
Sent by: address@hidden
Date: 08/28/2014 08:52AM
Cc: GNURadio Discussion List <address@hidden>
Subject: Re: [Discussgnuradio] m2m4 SNR estimator off by 3 dBOn Thu, Aug 28, 2014 at 7:04 AM, Tom Rondeau <address@hidden> wrote:
On Wed, Aug 27, 2014 at 9:33 AM, Jared Dulmage <address@hidden> wrote:
It appears that the MPSK m2m4 SNR estimator has an extra factor of 2.
gnuradio/grdigital/mpsk_snr_est.cc:169:175
double
mpsk_snr_est_m2m4::snr()
{
double y1_2 = d_y1*d_y1;
return 10.0*log10(2.0*sqrt(2*y1_2  d_y2) /
(d_y1  sqrt(2*y1_2  d_y2)));
}
where d_y1 and d_y2 are the running 2nd and 4th moments of the input, respectively.
The 2.0* is not present in the estimate _expression_ from the reference (Pauluzzi and Beaulieu eq. 39).
The 3 dB offset can also be seen by generating a signal (say random BPSK) with AWGN, measuring the signal and noise powers separately while estimating the SNR via the m2m4 on the sum.
It's an easy fix, I just wanted to get verification and notify other users.
Thanks,
Jared.Hi Jared,I'd have to review the paper again, but I suspect you're right. I was using this estimator just the other day and scratching my head about the results. I was on a plane, though, and was really focused on something else.Thanks!TomJust tested this and it looks fine the way it is. Are you doing real or complex signals? The estimators are designed to work with complex numbers, so that might be the difference you're seeing. I just have a simple simulation that I can switch between BPSK and QPSK (both complex signals, though). I use the MPSK measurement block and calculate the power of the signal and noise separately and output that to a number sink. With the current method, I see the same SNRs on both paths.There is also the grdigital/examples/snr_estimators.py example you can explore to compare them.Tom
[Prev in Thread]  Current Thread  [Next in Thread] 