Я использую scipy.signal.spectrogram()
для анализа набора данных, содержащих значения для тока. Мой вход функции выглядит следующим образом:scipy.signal.spectrogram output не так, как ожидалось
f, t, Sxx = signal.spectrogram(y, fs)
(для прокладки в сюжетных 3 (сверху) я использую plt.pcolormesh(t, f, Sxx)
)
Где y
представляет собой список из 10002 значений, содержащее значение у для зеленый график на первом участке (сверху). fs = 1/T
где T = x[1]-x[0]
где x
- это список значений x (время), принадлежащих значениям y (текущий).
Моя проблема заключается в том, что
t[-1]-t[0] != x[-1]-x[0]
Значение: Я хочу, чтобы сравнить участок 3 с зеленым графом в участке 1, и когда эти два не пробегает же временный интервал, спектрограмма становится бесполезной. Вы можете видеть на картинке, что total_length_x > total_length_t
Почему это так? И что я могу сделать, чтобы диапазон спектра за тот же промежуток времени, что и исходные данные?
Пожалуйста, прочтите http://docs.scipy.org/doc/scipy/reference/generated/scipy.signal. spectrogram.html, чтобы получить представление о том, что возвращает эта функция. Для создания спектрограммы необходимо использовать набор точек (окно), и вычисляется FFT этих значений. По умолчанию вы используете неперекрывающееся окно с 256 точками. Это означает, что ваш набор данных 1002 обеспечит 40 наборов. Я предполагаю, что у вас есть 40 очков. Таким образом, для каждого столбца Sxx (и каждого t) это соответствует 256 первоначальным значениям входного времени. –
Я прочитал документ, и я все еще не понимаю выход. Вот некоторые числа: len (t) = 44. t [-1] -t [0] = 1.92639999. x [-1] -x [0] = 2.0001997. Итак, вы видите, я «пропустил» 0.0738 микросекунд данных. – roggjah
Я сделал ошибку выше о перекрытии. В документе, если не указано, перекрытие считается «256/8 = 32». Это означает, что ваши очки будут «1 + пол» ((10002 - 256)/(256 - 32)) = 44'. Точками 't' являются средние точки окна, т. Е.' T [0] = x [128] 'и для' n> 0', 't [n] = x [128 + (n - 1) * (256 - 32)] '. Надеюсь, это объяснит это. –