scipy.signal.ShortTimeFFT.

область#

ShortTimeFFT.область(n, axes_seq='tf', center_bins=False)[источник]#

Возвращает минимальные и максимальные значения времени-частоты.

Кортеж из четырёх чисел с плавающей запятой (t0, t1, f0, f1) для 'tf' и (f0, f1, t0, t1) для 'ft' возвращается, описывая углы временно-частотной области stft. Этот кортеж может быть передан в matplotlib.pyplot.imshow в качестве параметра с тем же именем.

Параметры:
nint

Количество выборок во входном сигнале.

axes_seq{'tf', 'ft'}

Возвращает временной диапазон сначала, а затем частотный диапазон или наоборот.

center_bins: bool

Если установлено (по умолчанию False), значения временных слотов и частотных бинов перемещаются от края к середине. Это полезно при построении stft значения как ступенчатые функции, т.е. без интерполяции.

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

matplotlib.pyplot.imshow

Отобразить данные как изображение.

scipy.signal.ShortTimeFFT

Класс, к которому принадлежит этот метод.

Примеры

Следующие два графика иллюстрируют влияние параметра center_bins: Линии сетки представляют три временных и четыре частотных значения STFT. Левый график, где (t0, t1, f0, f1) = (0, 3, 0, 4) передается как параметр extent to imshow, показывает стандартное поведение временных и частотных значений, находящихся на нижней границе соответствующего бина. Правый график, с (t0, t1, f0, f1) = (-0.5, 2.5, -0.5, 3.5), показывает, что корзины центрированы над соответствующими значениями при передаче center_bins=True.

>>> import matplotlib.pyplot as plt
>>> import numpy as np
>>> from scipy.signal import ShortTimeFFT
...
>>> n, m = 12, 6
>>> SFT = ShortTimeFFT.from_window('hann', fs=m, nperseg=m, noverlap=0)
>>> Sxx = SFT.stft(np.cos(np.arange(n)))  # produces a colorful plot
...
>>> fig, axx = plt.subplots(1, 2, tight_layout=True, figsize=(6., 4.))
>>> for ax_, center_bins in zip(axx, (False, True)):
...     ax_.imshow(abs(Sxx), origin='lower', interpolation=None, aspect='equal',
...                cmap='viridis', extent=SFT.extent(n, 'tf', center_bins))
...     ax_.set_title(f"{center_bins=}")
...     ax_.set_xlabel(f"Time ({SFT.p_num(n)} points, Δt={SFT.delta_t})")
...     ax_.set_ylabel(f"Frequency ({SFT.f_pts} points, Δf={SFT.delta_f})")
...     ax_.set_xticks(SFT.t(n))  # vertical grid line are timestamps
...     ax_.set_yticks(SFT.f)  # horizontal grid line are frequency values
...     ax_.grid(True)
>>> plt.show()
../../_images/scipy-signal-ShortTimeFFT-extent-1_00_00.png

Обратите внимание, что ступенчатое поведение с постоянными цветами вызвано передачей interpolation=None to imshow.