forked from Qortal/Brooklyn
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
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
|
|
|