aboutsummaryrefslogtreecommitdiff
path: root/octave/plot_fsk_demod_stats.py
diff options
context:
space:
mode:
Diffstat (limited to 'octave/plot_fsk_demod_stats.py')
-rw-r--r--octave/plot_fsk_demod_stats.py95
1 files changed, 95 insertions, 0 deletions
diff --git a/octave/plot_fsk_demod_stats.py b/octave/plot_fsk_demod_stats.py
new file mode 100644
index 0000000..b2fbedc
--- /dev/null
+++ b/octave/plot_fsk_demod_stats.py
@@ -0,0 +1,95 @@
+#!/usr/bin/env python3
+#
+# Plot fsk_demod statistic outputs.
+#
+# Copyright (C) 2018 Mark Jessop <[email protected]>
+# Released under GNU GPL v3 or later
+#
+import json
+import os
+import sys
+import time
+import subprocess
+import numpy as np
+import pandas as pd
+import matplotlib.pyplot as plt
+
+_filename = sys.argv[1]
+
+if len(sys.argv)>2:
+ _sps = int(sys.argv[2])
+ _x_label = "Seconds"
+else:
+ _sps = 1
+ _x_label = "Sample Number"
+
+_ebno = []
+_fest1 = []
+_fest2 = []
+_fest3 = []
+_fest4 = []
+_ppm = []
+_time = []
+
+
+_f = open(_filename,'r')
+
+for _line in _f:
+
+ if _line[0] != '{':
+ continue
+
+ try:
+ _data = json.loads(_line)
+ except Exception as e:
+ #print("Line parsing error: %s" % str(e))
+ continue
+
+ _ebno.append(_data['EbNodB'])
+ _fest1.append(_data['f1_est'])
+ _fest2.append(_data['f2_est'])
+
+ if 'f3_est' in _data:
+ _fest3.append(_data['f3_est'])
+ _fest4.append(_data['f4_est'])
+
+ _ppm.append(_data['ppm'])
+
+ if _time == []:
+ _time = [0]
+ else:
+ _time.append(_time[-1]+1.0/_sps)
+
+
+_ebno_max = pd.Series(_ebno).rolling(10).max().dropna().tolist()
+
+
+plt.figure()
+
+plt.plot(_time[:len(_ebno_max)],_ebno_max)
+plt.xlabel(_x_label)
+plt.ylabel("Eb/N0 (dB)")
+plt.title("Eb/N0")
+
+plt.figure()
+
+plt.plot(_time,_fest1, label="f1 est")
+plt.plot(_time,_fest2, label="f2 est")
+
+if len(_fest3) > 0:
+ plt.plot(_time,_fest3, label="f3 est")
+ plt.plot(_time,_fest4, label="f4 est")
+
+plt.legend()
+plt.xlabel(_x_label)
+plt.ylabel("Frequency (Hz)")
+plt.title("Frequency Estimator Outputs")
+
+
+plt.figure()
+plt.plot(_time,_ppm)
+plt.xlabel(_x_label)
+plt.ylabel("PPM")
+plt.title("Demod PPM Estimate")
+
+plt.show() \ No newline at end of file