Uso la funzione specgram
di matplotlib per generare uno spettrogramma. Ho tentato di includere una barra colori a destra dello spettrogramma per fornire un'indicazione della mappatura da dB a colore.Legenda intensità spettrogramma Matlotlib (colorbar)
Per qualche motivo, tuttavia, il dB indicato dalla barra dei colori non ha senso.
Forse non ho generato correttamente la barra di colore? Forse c'è qualche parametro che ho bisogno di passare a specgram?
Il segnale che sto generando è un seno 1Khz, 2Vpp campionato a 32Khz.
mi aspetto che il picco rosso scuro su spettrogramma corrisponde a 0 dB (Il che significa che + 1V è il mio riferimento)
Qualcuno ha idea di cosa è sbagliato con il mio approccio?
def plot_specgram(data, title='', x_label='', y_label='', fig_size=None):
fig = plt.figure()
if fig_size != None:
fig.set_size_inches(fig_size[0], fig_size[1])
ax = fig.add_subplot(111)
ax.set_title(title)
ax.set_xlabel(x_label)
ax.set_ylabel(y_label)
pxx, freq, t, cax = plt.specgram(data, Fs=32000)
fig.colorbar(cax).set_label('Intensity [dB]')
plot_specgram(a,title='Spectrogram', x_label='time (in seconds)', y_label='frequency', fig_size=(14,8))
Questo è ciò che ottengo come risultante spettrogramma:
Dalla mappa dei colori, il rosso scuro * fa * sembrano corrispondere a 0. Solo che 0 non è visualizzato ... Il 0db (rosso scuro) corrisponde alla componente spettrale di picco di 1kHz ... Il blu, come previsto, ha un valore di intensità inferiore (<< 0) poiché sono solo artefatti sviluppati a causa del campionamento ... sinceramente non vedo nulla di sbagliato con il tuo codice/grafico ... –
In realtà, probabilmente, ciò che vedi è il risultato di una funzione della finestra che non stai prendendo in considerazione. Sono abbastanza sicuro che 'specgram' utilizza una finestra di Hanning come predefinita, che potrebbe compromettere ciò che ci si aspetta dal ridimensionamento. – Ajean