В Pylab функция specgram()
создает спектрограмму для заданного списка амплитуд и автоматически создает окно для спектрограммы.
Я хотел бы сгенерировать спектрограмму (мгновенная мощность задается Pxx
), модифицировать ее, запустив на ней детектор кромок, а затем нарисуйте результат.
(Pxx, freqs, bins, im) = pylab.specgram( self.data, Fs=self.rate, ...... )
Проблема заключается в том, что всякий раз, когда я пытаюсь построить модифицированный Pxx
с помощью imshow
или даже NonUniformImage
, я запускаю сообщение об ошибке ниже.
/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/image.py:336: UserWarning: изображения не поддерживаются на нелинейных осях. warnings.warn( "Изображения не поддерживаются на нелинейных осях".)
Например, часть кода, над которым я работаю, находится ниже.
# how many instantaneous spectra did we calculate
(numBins, numSpectra) = Pxx.shape
# how many seconds in entire audio recording
numSeconds = float(self.data.size) / self.rate
ax = fig.add_subplot(212)
im = NonUniformImage(ax, interpolation='bilinear')
x = np.arange(0, numSpectra)
y = np.arange(0, numBins)
z = Pxx
im.set_data(x, y, z)
ax.images.append(im)
ax.set_xlim(0, numSpectra)
ax.set_ylim(0, numBins)
ax.set_yscale('symlog') # see http://matplotlib.org/api/axes_api.html#matplotlib.axes.Axes.set_yscale
ax.set_title('Spectrogram 2')
Актуальный вопрос
Как вы рисуете похожие на изображение данные с логарифмической осью y с помощью matplotlib/pylab?