strf/contrib/spectrum_plot.py

45 lines
1.2 KiB
Python

from datetime import datetime, timedelta
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
def plot_spectrum(z, headers):
z_mean = np.mean(z)
z_std = np.std(z)
zmin = z_mean - 2 * z_std
zmax = z_mean + 6 * z_std
f_min = -headers[0]['bw']*1e-3
f_max = +headers[0]['bw']*1e-3
utc_start = headers[0]['utc_start']
t_min = mdates.date2num(utc_start + timedelta(seconds=0))
t_max = mdates.date2num(utc_start + timedelta(seconds=z.shape[1]))
fig, ax = plt.subplots(figsize=(12, 6))
ax.imshow(z,
origin='lower',
aspect='auto',
extent=[t_min, t_max, f_min, f_max],
vmin=zmin,
vmax=zmax,
interpolation='None',
cmap='viridis')
ax.xaxis_date()
date_format = mdates.DateFormatter('%H:%M:%S')
ax.xaxis.set_major_formatter(date_format)
# diagonal xaxis labels
fig.autofmt_xdate()
plt.xlabel('Time; start: {:%Y-%m-%d %H:%M:%S}Z'.format(headers[0]['utc_start']))
plt.ylabel('Freqeuncy / kHz; center: {} MHz'.format(headers[0]['freq'] * 1e-6))
plt.tight_layout()
plt.show()