Я использую функцию matplotlib specgram
для создания спектрограммы. Я попытался включить цветную панель справа от спектрограммы, чтобы дать представление о дБ-к-цветном отображении.Matplotlib spectrogram интенсивность легенда (colorbar)
По какой-то причине дБ, обозначенные цветной панелью, не имеют смысла.
Возможно, я не создал цветной бар правильно? Возможно, есть какой-то параметр, который мне нужно передать в specgram?
Сигнал, который я генерирую, представляет собой синусоид 1 кГц, 2 В пер. Тока, отсчитываемый при 32 Гц.
Я ожидаю, что темно-красный пик на спектрограмме соответствует 0дБу (Это означает, что + 1V моя ссылка)
Кто-нибудь есть какие-либо идеи, что случилось с моим подходом?
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))
Это то, что я получаю в результате спектрограммы:
С карты цветов, темно-красный * это *, кажется, соответствуют 0. Так что 0 не отображается ... The 0db (темно-красный) соответствует пиковой спектральной составляющей 1kHz ... Синий, как и ожидалось, имеет более низкое значение интенсивности (<< 0), поскольку они являются просто артефактами, разработанными из-за выборки ... Я откровенно не вижу ничего плохого в вашем коде/графике ... –
Собственно, вероятно, то, что вы видите, является результатом функции окна, которую вы не учитываете. Я почти уверен, что 'specgram' использует окно Hanning как значение по умолчанию, которое может испортить то, что вы ожидаете от масштабирования. – Ajean