Як взяти FFT з нерівномірно розташованими даними?


55

Перетворення Фур'є Швидкий алгоритм обчислює розкладання Фур'є в припущенні , що його вхідні точки рівномірно розподілені в області часу, . Що робити, якщо їх немає? Чи є інший алгоритм, який я міг би використовувати, або я можу змінити FFT, щоб врахувати, що фактично є змінною швидкістю вибірки?tk=kT

Якщо рішення залежить від способу розподілу зразків, мене найбільше цікавлять дві конкретні ситуації:

  • Постійна швидкість вибірки з тремтінням: де δ t k - випадкова розподілена величина. Припустимо, це безпечно сказати | δ t k | < Т / 2 .tk=kT+δtkδtk|δtk|<T/2
  • Викинуті зразки з інакше постійної швидкості вибірки: де n kZktk=nkTnkZk

Мотивація: Перш за все, це було одне з вище проголосованих питань щодо пропозиції щодо цього сайту. Але крім того, деякий час тому я взяв участь у дискусії про використання FFT (підштовхнувши запитання про переповнення стека ), в якій з’явилися деякі вхідні дані з нерівномірно вибіреними балами. Виявилося, що часові позначки даних були помилковими, але це змусило мене задуматися над тим, як можна вирішити цю проблему.

Відповіді:


40

Існує широкий спектр методів нерівномірного FFT, і найбільш ефективні з них призначені саме для вашого випадку: квазірівномірні зразки. Основна ідея - замазати нерівномірно відібрані джерела на дещо більш тонку («зразкову») рівномірну сітку за допомогою локальних згортків проти гауссів. Тоді стандартний FFT може бути запущений на зразковій єдиній сітці, і тоді згортання проти гауссів може бути скасоване. Хороші реалізації - це щось на кшталт разів дорожче, ніж стандартний FFT у d розмірах, де C - близько до 4 або 5.CddC

Я рекомендую прочитати Прискорення нерівномірного швидкого перетворення Фур'є від Грінгарда та Лі.

O(NdlogN)

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


9

При обробці сигналу уникнення псевдонімування уникається шляхом надсилання сигналу через фільтр низьких частот перед вибіркою. Джек Поулсон уже пояснив одну методику нерівномірного FFT із використанням усічених гауссів як фільтрів низьких частот. Однією незручною особливістю усічених гаусів є те, що навіть після того, як ви визначилися з міжрядковим інтервалом для FFT (= швидкість вибірки при обробці сигналу), у вас все ще є два вільних параметра: Ширина Гаусса та радіус усікання.

Тому я віддаю перевагу функції "капелюх" шириною двох комірок сітки як фільтр низьких частот. Це призводить до того, що нульовий порядок Фур’є є точним і що нижні порядки Фур'є будуть сходитися квадратично. Перетворення Фур'є функції "капелюх" легко обчислити (це квадрат функції sinc), що спрощує скасування згортки після FFT. Зауважимо, що функція "капелюх" - це згортання характерної функції (в центрі) одиничної комірки із самою собою. Будь-яка бажана швидкість конвергенції може бути досягнута шляхом об'єднання одиничної комірки не один раз із собою і використання отриманої функції замість функції "капелюх".


6

Якщо вас цікавить програмне забезпечення, я можу порекомендувати бібліотеку NFFT (в С з інтерфейсом MATLAB), яку можна знайти тут . Зауважте, що є також бібліотека PFFT для паралельних обчислень FFT і навіть бібліотека PNFFT для паралельних неравнопоставлених FFT одними і тими ж розробниками .


1
Наскільки я знаю, PNFFT - це найшвидша бібліотека для паралельних 3d нерівномірних FFT.
Джек Поульсон

посилання на PNFFT, здається, порушено.
Foad

2

Доповнення до прийнятої відповіді. Ось посилання на реалізацію методу Грінґарда та Лі з відкритим кодом: https://finufft.readthedocs.io/en/latest/ У ньому є обгортки для C, fortran, MATLAB, октави та пітона. Я вважаю, що FINUFFT написаний на C ++.

Він підтримується та використовується в Інституті Куранта Нью-Йорка, СФУ, Інституті Флатірона (очевидно), Техаському університеті Остіна та державному університеті Флориди. Принаймні, це ті, кого я знаю.

Я сам використовую більш стару версію, бо я лінивий. Дивіться: https://cims.nyu.edu/cmcl/nufft/nufft.html


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.