Comment prendre la FFT de données irrégulièrement espacées?


55

L'algorithme Fast Fourier Transform calcule une décomposition de Fourier en supposant que ses points d'entrée sont équidistants dans le domaine temporel, . Et s'ils ne le sont pas? Y a-t-il un autre algorithme que je pourrais utiliser, ou une manière de modifier la FFT, pour prendre en compte ce qui est effectivement un taux d'échantillonnage variable?tk=kT

Si la solution dépend de la manière dont les échantillons sont distribués, il y a deux situations particulières qui m'intéressent le plus:

  • Taux d'échantillonnage constant avec gigue: où est une variable distribuée de manière aléatoire. Supposons qu'il soit prudent de dire . δ t k | δ t k | < T / 2tk=kT+δtkδtk|δtk|<T/2
  • Échantillons abandonnés à un taux d'échantillonnage par ailleurs constant: oùn kZktk=nkTnkZk

Motivation: tout d’abord, c’était l’une des questions les plus votées concernant la proposition de ce site. Mais en outre, il y a quelque temps, je me suis impliqué dans une discussion sur l'utilisation de la FFT (motivée par une question sur Stack Overflow ) au cours de laquelle des données d'entrée contenant des points non échantillonnés ont été recueillies. Il s'est avéré que les horodatages sur les données étaient erronés, mais cela m'a amené à réfléchir à la manière de résoudre ce problème.

Réponses:


40

Il existe une grande variété de techniques pour la FFT non uniforme, et les plus efficaces s'adressent exactement à votre cas: les échantillons quasi-uniformes. L'idée de base est d'étaler les sources inégalement échantillonnées sur une grille uniforme un peu plus fine ("suréchantillonnée"), malgré des convolutions locales contre les Gaussiens. Une FFT standard peut ensuite être exécutée sur la grille uniforme suréchantillonnée, puis la convolution contre les Gaussiennes peut être annulée. Les bonnes implémentations sont quelque chose comme fois plus onéreuses qu'une FFT standard dans les dimensions , où est quelque chose comme 4 ou 5. d CCddC

Je recommande de lire Accélérer la transformation de Fourier rapide non uniforme de Greengard et Lee.

Il existe également des techniques rapides, c'est-à-dire ou plus rapides, lorsque les sources et / ou les points d'évaluation sont rares, et il existe également des généralisations pour des opérateurs intégraux plus généraux, par exemple, les opérateurs intégraux de Fourier. Si vous êtes intéressé par ces techniques, je vous recommande la transformation de Fourier creuse via un algorithme papillon et un algorithme rapide de papillon pour le calcul d'opérateurs intégraux de Fourier . Le prix payé dans ces techniques par rapport aux FFT standard est un coefficient beaucoup plus élevé. Déni de responsabilité: mon conseiller a écrit / coécrit ces deux articles et j'ai passé un temps décent à mettre en parallèle ces techniques.O(NdlogN)

Un point important est que toutes les techniques ci-dessus sont des approximations qui peuvent être rendues arbitrairement précises aux dépens de durées d'exécution plus longues, alors que l'algorithme FFT standard est exact.


9

Dans le traitement du signal, on évite le crénelage en envoyant un signal à travers un filtre passe-bas avant l'échantillonnage. Jack Poulson a déjà expliqué une technique pour la FFT non uniforme utilisant des Gaussiennes tronquées comme filtres passe-bas. Une caractéristique peu pratique des Gaussiennes tronquées est que, même après avoir décidé de l’espacement de la grille pour la FFT (= le taux d’échantillonnage dans le traitement du signal), vous avez toujours deux paramètres libres: La largeur du gaussien et le rayon de troncature.

Je préfère donc la fonction "chapeau" avec une largeur de deux cellules de grille comme filtre passe-bas. Cela a pour effet que l'ordre zéro de Fourier est exact et que les ordres de Fourier inférieurs vont converger quadratiquement. La transformation de Fourier de la fonction "hat" est facile à calculer (c'est le carré de la fonction sinc), ce qui simplifie l'annulation de la convolution après la FFT. Notez que la fonction "chapeau" est la convolution de la fonction caractéristique de la cellule unitaire (centrée) avec elle-même. Tout taux de convergence souhaité peut être obtenu en convoluant plusieurs fois la cellule unitaire avec elle-même et en utilisant la fonction résultante à la place de la fonction "hat"


6

Si vous êtes intéressé par un logiciel, je peux vous recommander la bibliothèque NFFT (en C avec une interface vers MATLAB) qui peut être trouvée ici . Notez qu'il existe également une bibliothèque PFFT pour le calcul de FFT parallèle et même une bibliothèque PNFFT pour des FFT non-équispaces parallèles par les mêmes développeurs .


1
Pour autant que je sache, PNFFT est la bibliothèque la plus rapide pour les FFT 3D non uniformes en parallèle.
Jack Poulson

le lien pour PNFFT semble être brisé.
Foad

2

Ajout à la réponse acceptée. Voici un lien vers une implémentation open source de la méthode de Greengard et de Lee: https://finufft.readthedocs.io/en/latest/ Elle contient des enveloppes pour C, fortran, MATLAB, octave et python. Je crois que le FINUFFT est écrit en C ++.

Il est entretenu et utilisé à l'institut NYU Courant, à la SFU, à l'institut Flatiron (évidemment), à l'université du Texas à Austin et à l'université d'État de Floride. Au moins, ce sont ceux que je connais.

J'utilise moi-même une version plus ancienne, car je suis paresseux. Voir: https://cims.nyu.edu/cmcl/nufft/nufft.html


En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.