Частота кадров - это фиксированное число, которое зависит только от ваших данных. Если вы измените его, вы эффективно «растянете» ось X, но не в ту сторону. Например, если у вас есть 1000 точек данных, которые соответствуют 1 секунде, ваша частота кадров (или лучшая частота дискретизации) будет 1000. Если ваш сигнал представляет собой простой синус 200 Гц, который немного увеличивает частоту во времени, specgram
будет:
t = np.linspace(0, 1, 1000)
signal = np.sin((200*2*np.pi + 200*t) * t)
frame_rate = 1000
plt.specgram(signal, Fs=frame_rate);
Если вы измените частоту кадров, у вас будет неправильный масштаб по осям X и Y. Если вы установите частоту кадров 500, вы получите:
t = np.linspace(0, 1, 1000)
signal = np.sin((200*2*np.pi + 200*t) * t)
frame_rate = 500
plt.specgram(signal, Fs=frame_rate);
Сюжет очень похож, но на этот раз вы ошибаетесь: у вас есть почти 2 секунды на оси x, в то время как у вас должно быть только 1, более того, начальная частота, которую вы читаете, составляет 100 Гц, а не 200 Гц.
В заключение, частота выборки, которую вы установите, должна быть правильный. Если вы хотите растянуть сюжет, вы можете использовать что-то вроде plt.xlim(0.2, 0.4)
. Если вы хотите избежать белой полосы в верхней части графика, вы можете вручную установить ylim
равным половине частоты кадров:
plt.ylim(0, frame_rate/2)
Это работает из-за простых свойств преобразования Фурье и Теорема Найквиста-Шеннона .