Почему число частот дискретизации в `scipy.signal.stft ()` связано с размером прыжка? - PullRequest
0 голосов
/ 03 марта 2020

Этот вопрос относится к Кратковременному преобразованию Фурье SciPy для обработки сигналов.

По какой-то причине я не понимаю, размер выходного «массива частот дискретизации» точно равен размеру хмеля. Из документации:

nperseg : int, optional

    Length of each segment. Defaults to 256.

noverlap : int, optional

    Number of points to overlap between segments. If None, noverlap = nperseg // 2. Defaults to None. When specified, the COLA constraint must be met (see Notes below).


f : ndarray

    Array of sample frequencies.

hop size H = nperseg - noverlap

Я новичок в обработке сигналов и преобразованиях Фурье, но, насколько я понимаю, STFT просто разбивает аудиофайл на сегменты («временные рамки»), на которых вы выполняете преобразование Фурье. Поэтому, если я хочу сделать STFT на 100 таймфреймах, я бы ожидал, что на выходе получится матрица размером 100 x F, где F - массив измеренных частот («измеренный», вероятно, здесь не то слово, но Вы понимаете, о чем я).

Это то, что делает реализация SciPy, но размер f вот что меня беспокоит. Предполагается, что это будет массив, описывающий различные частоты, например [0Hz 500Hz 1000Hz], и это так, но по некоторым причинам его размер точно такой же, как и размер прыжка. Если размер скачка равен 700, количество измеренных частот равно 700.

Размер скачка - это число выборок (т. Е. Времени) между каждым таймфреймом, и он правильно рассчитывается как H = nperseg - noverlap, но что это связано с массивом частот?


Редактировать: Связано с этот вопрос

1 Ответ

2 голосов
/ 03 марта 2020

БПФ представляет собой квадратное матричное преобразование из одного ортогонального базиса в другой с таким же измерением. Это связано с тем, что N является точным числом ортогональных (например, не мешающих друг другу) комплексных синусоид, которые вписываются в вектор временной области длины N.

Более длинный вектор времени может содержать больше информации о частоте ( например, трудно различить две частоты, используя только 3 точки выборки, но намного проще с 3000 выборками и т. д. c.)

Вы можете заполнить нулевой вектор короткой временной шкалы длиной N, чтобы использовать более длинное БПФ , но это идентично интерполяции хорошей кривой между N частотными точками, что делает все результаты FFT взаимозависимыми.

Для многих целей (визуализация и т. д. c.) STFT перекрывается, где соседние сегменты поделиться некоторыми перекрывающимися данными вместо того, чтобы быть сквозным. Это обеспечивает лучшую временную локализацию (например, сегменты могут быть расположены ближе друг к другу, но при этом могут быть достаточно длинными, чтобы каждый из них мог обеспечить требуемое разрешение по частоте).

...