3
0
mirror of https://github.com/Qortal/Brooklyn.git synced 2025-02-07 06:44:18 +00:00
Brooklyn/IPoverVHF/script/dash.py
Scare Crowe b73fb8b536 BrooklynR dsat NXT 1.2 with IpoverVHF source
* Try that punk NASA -_-
2021-07-20 21:20:39 +05:00

71 lines
1.7 KiB
Python

#!/usr/bin/env python3
#
# rtl_fsk modem dashboard
#
# usage:
# netcat -luk 8001 | ./dash.py
import json
import sys
import numpy as np
import matplotlib.pyplot as plt
import io
roll_s = 5
SNRestdB = []
norm_timing = [];
# unbuffered stdin
sys.stdin = io.open(sys.stdin.fileno())
for line in sys.stdin:
data = json.loads(line)
# update rolling SNRest
SNRest_lin = data['SNRest_lin']
tmp = 10*np.log10(SNRest_lin+1)
SNRestdB.append(tmp)
if len(SNRestdB) > roll_s:
SNRestdB.pop(0)
# update rolling norm timing
latest_norm_timing = data['norm_rx_timing']
norm_timing.extend(latest_norm_timing)
one_sec = len(latest_norm_timing)
if len(norm_timing) > roll_s*one_sec:
norm_timing = norm_timing[one_sec:]
plt.clf()
plt.subplot(311)
SfdB = data['SfdB']
fsk_lower_kHz = np.array(data['fsk_lower_Hz'])/1000
fsk_upper_kHz = np.array(data['fsk_upper_Hz'])/1000
f_est_kHz = np.array(data['f_est_Hz'])/1000
Fs_kHz = data['Fs_Hz']/1000
f_axis_kHz = -Fs_kHz/2 + np.arange(len(SfdB))*Fs_kHz/len(SfdB)
plt.plot(f_axis_kHz, SfdB)
height = 10;
mn = np.min(SfdB);
for f in f_est_kHz:
plt.plot(f, mn,"r+")
plt.plot([fsk_lower_kHz, fsk_lower_kHz], [mn, mn+height],"g")
plt.plot([fsk_upper_kHz, fsk_upper_kHz], [mn, mn+height],"g")
plt.grid()
plt.ylabel('Spectrum')
plt.subplot(312)
plt.plot(SNRestdB)
plt.ylabel('SNR')
mx = 10*np.ceil(np.max(SNRestdB)/10);
plt.ylim([0, mx])
plt.grid()
plt.subplot(313)
plt.plot(norm_timing)
plt.ylabel('Timing')
plt.ylim([-0.5, 0.5])
plt.draw()
plt.pause(0.01) # renders plot