область#
- 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)передается как параметрextenttoimshow, показывает стандартное поведение временных и частотных значений, находящихся на нижней границе соответствующего бина. Правый график, с(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()
Обратите внимание, что ступенчатое поведение с постоянными цветами вызвано передачей
interpolation=Nonetoimshow.