scipy.signal.

спектрограмма#

scipy.signal.спектрограмма(x, fs=1.0, window=('tukey', 0.25), nperseg=None, noverlap=None, nfft=None, detrend='constant', return_onesided=True, масштабирование='density', ось=-1, mode='psd')[источник]#

Вычислить спектрограмму с последовательными преобразованиями Фурье (устаревшая функция).

Спектрограммы можно использовать как способ визуализации изменения частотного содержания нестационарного сигнала во времени.

Наследие

Эта функция считается устаревшей и больше не будет получать обновления. Хотя в настоящее время у нас нет планов по ее удалению, мы рекомендуем, чтобы новый код использовал более современные альтернативы. ShortTimeFFT является более новой реализацией STFT / ISTFT с большим количеством функций, включая также spectrogram метод. A сравнение между реализациями можно найти в Кратковременное преобразование Фурье раздел Руководство пользователя SciPy.

Параметры:
xarray_like

Временной ряд значений измерений

fsfloat, опционально

Частота дискретизации x временной ряд. По умолчанию 1.0.

windowstr или tuple или array_like, опционально

Желаемое окно для использования. Если window является строкой или кортежем, он передаётся в get_window для генерации значений окна, которые по умолчанию являются DFT-чётными. См. get_window для списка окон и требуемых параметров. Если window если это array_like, он будет использоваться напрямую как окно, и его длина должна быть nperseg. По умолчанию используется окно Тьюки с параметром формы 0.25.

npersegint, необязательный

Длина каждого сегмента. По умолчанию None, но если window является строкой или кортежем, устанавливается в 256, а если window является array_like, устанавливается в длину окна.

noverlapint, необязательный

Количество точек перекрытия между сегментами. Если None, noverlap = nperseg // 8. По умолчанию None.

nfftint, необязательный

Длина БПФ, используемая, если требуется дополненное нулями БПФ. Если None, длина БПФ равна nperseg. По умолчанию None.

detrendstr или функция или False, опционально

Определяет, как удалять тренд в каждом сегменте. Если detrend является строкой, она передается как тип аргумент для detrend функция. Если это функция, она принимает сегмент и возвращает сегмент с удалённым трендом. Если detrend является False, детрендинг не выполняется. По умолчанию 'constant'.

return_onesidedbool, необязательно

Если True, возвращает односторонний спектр для реальных данных. Если False возвращает двусторонний спектр. По умолчанию True, но для комплексных данных всегда возвращается двусторонний спектр.

масштабирование{ 'density', 'spectrum' }, опционально

Выбор между вычислением спектральной плотности мощности ('density') где Sxx имеет единицы измерения V**2/Гц и вычисление спектра мощности ('spectrum'), где Sxx имеет единицы измерения V**2, если x измеряется в В, а fs измеряется в Гц. По умолчанию 'density'.

осьint, необязательный

Ось, вдоль которой вычисляется спектрограмма; по умолчанию это последняя ось (т.е. axis=-1).

modestr, optional

Определяет, какие возвращаемые значения ожидаются. Варианты: ['psd', 'complex', 'magnitude', 'angle', 'phase']. 'complex' эквивалентен выходу stft без заполнения или расширения границ. 'magnitude' возвращает абсолютную величину STFT. 'angle' и 'phase' возвращают комплексный угол STFT, с развёрткой и без неё, соответственно.

Возвращает:
fndarray

Массив частот выборки.

tndarray

Массив времен сегментов.

Sxxndarray

Спектрограмма x. По умолчанию последняя ось Sxx соответствует временам сегментов.

Смотрите также

periodogram

Простой, опционально модифицированный периодограмм

lombscargle

Периодограмма Ломба-Скаргла для неравномерно дискретизированных данных

welch

Спектральная плотность мощности методом Уэлча.

csd

Спектральная плотность мощности методом Уэлча.

ShortTimeFFT

Новая реализация STFT/ISTFT с расширенными возможностями, включающая spectrogram метод.

Примечания

Подходящее количество перекрытия будет зависеть от выбора окна и ваших требований. В отличие от метода Уэлча, где усредняется весь поток данных, может потребоваться использовать меньшее перекрытие (или, возможно, вообще без него) при вычислении спектрограммы, чтобы сохранить некоторую статистическую независимость между отдельными сегментами. Именно по этой причине окном по умолчанию является окно Тьюки с перекрытием в 1/8 длины окна на каждом конце.

Добавлено в версии 0.16.0.

Ссылки

[1]

Оппенгейм, Алан В., Рональд В. Шафер, Джон Р. Бак "Обработка дискретных сигналов", Prentice Hall, 1999.

Примеры

>>> import numpy as np
>>> from scipy import signal
>>> from scipy.fft import fftshift
>>> import matplotlib.pyplot as plt
>>> rng = np.random.default_rng()

Сгенерировать тестовый сигнал, синусоиду 2 В среднеквадратичных, частота которой медленно модулируется около 3 кГц, искаженную белым шумом экспоненциально убывающей амплитуды, дискретизированный на частоте 10 кГц.

>>> fs = 10e3
>>> N = 1e5
>>> amp = 2 * np.sqrt(2)
>>> noise_power = 0.01 * fs / 2
>>> time = np.arange(N) / float(fs)
>>> mod = 500*np.cos(2*np.pi*0.25*time)
>>> carrier = amp * np.sin(2*np.pi*3e3*time + mod)
>>> noise = rng.normal(scale=np.sqrt(noise_power), size=time.shape)
>>> noise *= np.exp(-time/5)
>>> x = carrier + noise

Вычислить и построить спектрограмму.

>>> f, t, Sxx = signal.spectrogram(x, fs)
>>> plt.pcolormesh(t, f, Sxx, shading='gouraud')
>>> plt.ylabel('Frequency [Hz]')
>>> plt.xlabel('Time [sec]')
>>> plt.show()
../../_images/scipy-signal-spectrogram-1_00_00.png

Обратите внимание, если используется вывод, который не является односторонним, то используйте следующее:

>>> f, t, Sxx = signal.spectrogram(x, fs, return_onesided=False)
>>> plt.pcolormesh(t, fftshift(f), fftshift(Sxx, axes=0), shading='gouraud')
>>> plt.ylabel('Frequency [Hz]')
>>> plt.xlabel('Time [sec]')
>>> plt.show()
../../_images/scipy-signal-spectrogram-1_01_00.png