Я хотел бы вычислить спектр мощности, в котором частоты логарифмически разнесены.
В методе Уэлча существует компромисс между разрешающей способностью по частоте результирующего спектра мощности и количеством средних значений (то есть ошибкой в результате). Я хотел бы, чтобы этот компромисс был динамичным, то есть делал меньше средних для низкочастотных точек, чтобы иметь более точное разрешение на низкой частоте.
Есть ли стандартный способ сделать это?
Я полагаю, что одним из способов было бы изначально сделать это pwelch
с очень высоким разрешением (малым числом средних значений), а затем повторно сопоставить полученный спектр с помощью логарифмического биннинга.
Ответы:
Я нашел статью, в которой прямо рассматривается этот вопрос:
Первые несколько рисунков в статье хорошо иллюстрируют проблему, которую решает этот алгоритм, а ссылки содержат полезную библиографию других подходов (преобразование с постоянным Q, преобразование Фурье с умеренным темпом, обзорная статья и т. Д.).
Их подход состоит не в том, чтобы повторно объединить выходные данные существующей оценки спектра мощности на основе БПФ, а в том, чтобы только вычислить дискретное преобразование Фурье на (логарифмически разнесенных) частотах, представляющих интерес. Для каждой частоты, которую нужно оценить, они в основном реализуют алгоритм Уэлча, но с длиной преобразования (и, следовательно, также с числом средних), специально выбранной для каждой частоты. Вычисление каждого частотного бина использует весь временной ряд, но сегментируется по-разному. Результаты имеют желаемое свойство, заключающееся в том, что разрешение (ширина ячейки) является плавной функцией частоты, и результаты могут быть откалиброваны как спектральная плотность мощности или спектр мощности.
Реализация Matlab здесь: https://github.com/tobin/lpsd
Раскрытие: авторы этой статьи находятся в том же учреждении, что и я.
источник
В этом случае я бы использовал метод наименьших квадратов, чтобы вычислить частоту некоторого известного списка значений. Наиболее распространенным методом является метод Ломба. Он работает очень похоже на FFT или DFT, но он рассчитывает частоту только на определенных частотах и может обрабатывать недостающие данные, если это будет проблемой. Идея заключается в следующем:
Обратите внимание, что это не будет масштабироваться так же хорошо, как FFT, поэтому я бы сделал это только в том случае, если число желаемых частот намного меньше, чем FFT, который потребуется для сбора всех данных.
В противном случае можно выполнить метод интерполяции или любую другую повторную выборку FFT или DFT.
источник