Как я могу вычислить логарифмический спектр мощности?

20

Я хотел бы вычислить спектр мощности, в котором частоты логарифмически разнесены.

В методе Уэлча существует компромисс между разрешающей способностью по частоте результирующего спектра мощности и количеством средних значений (то есть ошибкой в ​​результате). Я хотел бы, чтобы этот компромисс был динамичным, то есть делал меньше средних для низкочастотных точек, чтобы иметь более точное разрешение на низкой частоте.

Есть ли стандартный способ сделать это?

Я полагаю, что одним из способов было бы изначально сделать это pwelchс очень высоким разрешением (малым числом средних значений), а затем повторно сопоставить полученный спектр с помощью логарифмического биннинга.

nibot
источник
2
Я обычно вычисляю регулярный спектр, а затем просто строю данные в логарифмическом масштабе. Я не уверен, что это возможно даже без непосредственного использования модифицированного определения DFT, но мне интересно посмотреть, действительно ли есть способы.
Фонон
ОП вопрос, связанный с SO для тех, кто заинтересован.
Lorem Ipsum
Еще один связанный вопрос по SO: stackoverflow.com/questions/9849233/…
nibot

Ответы:

9

Я нашел статью, в которой прямо рассматривается этот вопрос:

Первые несколько рисунков в статье хорошо иллюстрируют проблему, которую решает этот алгоритм, а ссылки содержат полезную библиографию других подходов (преобразование с постоянным Q, преобразование Фурье с умеренным темпом, обзорная статья и т. Д.).

Их подход состоит не в том, чтобы повторно объединить выходные данные существующей оценки спектра мощности на основе БПФ, а в том, чтобы только вычислить дискретное преобразование Фурье на (логарифмически разнесенных) частотах, представляющих интерес. Для каждой частоты, которую нужно оценить, они в основном реализуют алгоритм Уэлча, но с длиной преобразования (и, следовательно, также с числом средних), специально выбранной для каждой частоты. Вычисление каждого частотного бина использует весь временной ряд, но сегментируется по-разному. Результаты имеют желаемое свойство, заключающееся в том, что разрешение (ширина ячейки) является плавной функцией частоты, и результаты могут быть откалиброваны как спектральная плотность мощности или спектр мощности.

Реализация Matlab здесь: https://github.com/tobin/lpsd

введите описание изображения здесь Раскрытие: авторы этой статьи находятся в том же учреждении, что и я.

nibot
источник
1
Каковы преимущества вычисления спектра таким образом? Какова мотивация для этого метода?
Спейси
1
Это может быть быстрее, чем вычисление спектра мощности с использованием БПФ, а затем повторная перезагрузка при некоторых обстоятельствах.
никола
Я начал реализацию Python: github.com/rudolfbyker/lpsd. Он все еще нуждается в тестировании. Вклад приветствуется.
rudolfbyker
1

В этом случае я бы использовал метод наименьших квадратов, чтобы вычислить частоту некоторого известного списка значений. Наиболее распространенным методом является метод Ломба. Он работает очень похоже на FFT или DFT, но он рассчитывает частоту только на определенных частотах и ​​может обрабатывать недостающие данные, если это будет проблемой. Идея заключается в следующем:

  1. Определите список частот ( ), по которым нужно рассчитать, которые соответствуют желаемым частотным диапазонам, на которых вы хотите производить выборку.w
  2. Учитывая частоты , время, в которое они были выбраны , и значения , найдите мощность частот следующим образом:t j X jwtjXj

Px(ω)=12([jXjcosω(tjτ)]2jcos2ω(tjτ)+[jXjsinω(tjτ)]2jsin2ω(tjτ))

Обратите внимание, что это не будет масштабироваться так же хорошо, как FFT, поэтому я бы сделал это только в том случае, если число желаемых частот намного меньше, чем FFT, который потребуется для сбора всех данных.

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

PearsonArtPhoto
источник