summaryrefslogtreecommitdiff
path: root/gr-digital/examples/snr_estimators.py
diff options
context:
space:
mode:
Diffstat (limited to 'gr-digital/examples/snr_estimators.py')
-rw-r--r--[-rwxr-xr-x]gr-digital/examples/snr_estimators.py36
1 files changed, 20 insertions, 16 deletions
diff --git a/gr-digital/examples/snr_estimators.py b/gr-digital/examples/snr_estimators.py
index 31efe6b83e..b1decd84d8 100755..100644
--- a/gr-digital/examples/snr_estimators.py
+++ b/gr-digital/examples/snr_estimators.py
@@ -20,19 +20,23 @@
# Boston, MA 02110-1301, USA.
#
+from __future__ import print_function
+from __future__ import division
+from __future__ import unicode_literals
+
import sys
try:
import scipy
from scipy import stats
except ImportError:
- print "Error: Program requires scipy (www.scipy.org)."
+ print("Error: Program requires scipy (www.scipy.org).")
sys.exit(1)
try:
import pylab
except ImportError:
- print "Error: Program requires Matplotlib (matplotlib.sourceforge.net)."
+ print("Error: Program requires Matplotlib (matplotlib.sourceforge.net).")
sys.exit(1)
from gnuradio import gr, digital, filter
@@ -55,7 +59,7 @@ def online_skewness(data):
M2 = 0
M3 = 0
- for n in xrange(len(data)):
+ for n in range(len(data)):
delta = data[n] - mean
delta_n = delta / (n+1)
term1 = delta * delta_n * n
@@ -63,12 +67,12 @@ def online_skewness(data):
M3 = M3 + term1 * delta_n * (n - 1) - 3 * delta_n * M2
M2 = M2 + term1
- return scipy.sqrt(len(data))*M3 / scipy.power(M2, 3.0/2.0);
+ return scipy.sqrt(len(data))*M3 / scipy.power(M2, 3.0 / 2.0);
def snr_est_simple(signal):
s = scipy.mean(abs(signal)**2)
n = 2*scipy.var(abs(signal))
- snr_rat = s/n
+ snr_rat = s / n
return 10.0*scipy.log10(snr_rat), snr_rat
def snr_est_skew(signal):
@@ -94,11 +98,11 @@ def snr_est_svr(signal):
N = len(signal)
ssum = 0
msum = 0
- for i in xrange(1, N):
+ for i in range(1, N):
ssum += (abs(signal[i])**2)*(abs(signal[i-1])**2)
msum += (abs(signal[i])**4)
- savg = (1.0/(float(N)-1.0))*ssum
- mavg = (1.0/(float(N)-1.0))*msum
+ savg = (1.0 / (float(N-1.0)))*ssum
+ mavg = (1.0 / (float(N-1.0)))*msum
beta = savg / (mavg - savg)
snr_rat = ((beta - 1) + scipy.sqrt(beta*(beta-1)))
@@ -126,9 +130,9 @@ def main():
parser.add_option("", "--snr-step", type="float", default=0.5,
help="SNR step amount [default=%default]")
parser.add_option("-t", "--type", type="choice",
- choices=gr_estimators.keys(), default="simple",
+ choices=list(gr_estimators.keys()), default="simple",
help="Estimator type {0} [default=%default]".format(
- gr_estimators.keys()))
+ list(gr_estimators.keys())))
(options, args) = parser.parse_args ()
N = options.nsamples
@@ -155,14 +159,14 @@ def main():
SNR_step = options.snr_step
SNR_dB = scipy.arange(SNR_min, SNR_max+SNR_step, SNR_step)
for snr in SNR_dB:
- SNR = 10.0**(snr/10.0)
+ SNR = 10.0**(snr / 10.0)
scale = scipy.sqrt(2*SNR)
- yy = bits + n_cpx/scale
- print "SNR: ", snr
+ yy = bits + n_cpx / scale
+ print("SNR: ", snr)
Sknown = scipy.mean(yy**2)
- Nknown = scipy.var(n_cpx/scale)
- snr0 = Sknown/Nknown
+ Nknown = scipy.var(n_cpx / scale)
+ snr0 = Sknown / Nknown
snr0dB = 10.0*scipy.log10(snr0)
snr_known.append(float(snr0dB))
@@ -171,7 +175,7 @@ def main():
gr_src = blocks.vector_source_c(bits.tolist(), False)
gr_snr = digital.mpsk_snr_est_cc(gr_est, ntag, 0.001)
- gr_chn = channels.channel_model(1.0/scale)
+ gr_chn = channels.channel_model(1.0 / scale)
gr_snk = blocks.null_sink(gr.sizeof_gr_complex)
tb = gr.top_block()
tb.connect(gr_src, gr_chn, gr_snr, gr_snk)