QortalOS Brooklyn for Raspberry Pi 4
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

70 lines
1.7 KiB

#!/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