Как мне взять БПФ неравномерно расположенных данных?


55

Преобразование Фурье Быстрый алгоритм вычисляет Фурье разложения в предположении , что его входные точки равномерно распределены во временной области, . Что если они не? Есть ли другой алгоритм, который я мог бы использовать, или каким-то образом я мог бы изменить БПФ, чтобы учесть, что фактически является переменной частотой дискретизации?tk=kT

Если решение зависит от того, как распределены образцы, меня интересуют две конкретные ситуации:

  • Постоянная скорость дискретизации с джиттера: где б т K является случайным образом распределены переменной. Предположим, можно с уверенностью сказать | δ t k | < T / 2 .tk=kT+δtkδtk|δtk|<T/2
  • Отброшенные выборки с другой постоянной частотой выборки: где n kZktk=nkTnkZk

Мотивация: во-первых, это был один из самых популярных вопросов в предложении для этого сайта. Но кроме того, некоторое время назад я начал участвовать в обсуждении использования БПФ (вызванного вопросом о переполнении стека ), в котором были получены некоторые входные данные с неравномерно выбранными точками. Оказалось, что временные метки в данных были неправильными, но это заставило меня задуматься о том, как можно решить эту проблему.

Ответы:


40

Существует множество методов для неоднородного БПФ, и наиболее эффективные из них предназначены именно для вашего случая: квазиоднородные выборки. Основная идея состоит в том, чтобы намазывать источники с неравномерной выборкой на слегка более тонкую («передискретизированную») равномерную сетку, хотя местные свертки против гауссиан. Затем можно выполнить стандартное БПФ на равномерной сетке с избыточной дискретизацией, и тогда свертка с гауссианами может быть отменена. Хорошие реализации - это что-то вроде разы дороже, чем стандартное FFT в d измерениях, где C - что-то близкое к 4 или 5.CddC

Я рекомендую прочитать Ускорение неравномерного быстрого преобразования Фурье Грингарда и Ли.

O(NdlogN)

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


9

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

Поэтому я предпочитаю функцию "шляпа" с шириной двух ячеек сетки в качестве фильтра нижних частот. Это приводит к тому, что нулевой порядок Фурье является точным и что нижние порядки Фурье будут сходиться квадратично. Преобразование Фурье функции «шляпа» легко вычисляется (это квадрат функции sinc), что упрощает отмену свертки после БПФ. Обратите внимание, что функция "шляпа" - это свертка характеристической функции (центрированной) элементарной ячейки с самой собой. Любая желаемая скорость сходимости может быть достигнута путем свертки элементарной ячейки более одного раза с самим собой и использования результирующей функции вместо функции «шляпа».


6

Если вы заинтересованы в программном обеспечении, я могу порекомендовать библиотеку NFFT (на языке C с интерфейсом для MATLAB), которую можно найти здесь . Обратите внимание, что есть также библиотека PFFT для параллельных вычислений FFT и даже библиотека PNFFT для параллельных неэквивалентных FFT тех же разработчиков .


1
Насколько я знаю, PNFFT - самая быстрая библиотека для параллельных трехмерных неоднородных БПФ.
Джек Полсон

ссылка на PNFFT, кажется, не работает.
Foad

2

Дополнение к принятому ответу. Вот ссылка на реализацию метода Грингарда и Ли с открытым исходным кодом: https://finufft.readthedocs.io/en/latest/ Оболочки для C, fortran, MATLAB, octave и python. Я считаю, что FINUFFT написана на C ++.

Он поддерживается и используется в институте NYU Courant, SFU, Flatiron Institute (очевидно), Техасском университете в Остине и государственном университете штата Флорида. По крайней мере, это те, о которых я знаю.

Я сам использую старую версию, потому что я ленивый. См .: https://cims.nyu.edu/cmcl/nufft/nufft.html.


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.