Bibliothèque de transformée de Fourier sur réseau triangulaire

11

Je recherche des implémentations raisonnablement rapides de la transformée de Fourier discrète (DFT) sur un réseau 2D triangulaire ou hexagonal.

J'apprécierais des pointeurs vers de telles implémentations (en particulier celles facilement utilisables depuis Python ou Mathematica), ainsi que vers des descriptions de la façon de réduire ce problème au DFT 1D, qui est déjà intégré à de nombreux systèmes.

Szabolcs
la source
Ceci est mon premier post ici, j'apprécierais de l'aide pour baliser la question de manière appropriée.
Szabolcs
2
Ce dont vous semblez avoir besoin ici, c'est d'une transformée de Fourier cristallographique. Pour les références, il y a ceci , ceci , ceci et ceci , mais j'ai du mal à trouver des routines FORTRAN que l'on peut télécharger librement. Vous devrez peut-être lancer votre propre implémentation ...
JM
1
+1 pour la question. Je pense que les balises sont bien pour l'instant; si quelqu'un pense que la question devrait être étiquetée différemment, il la modifiera (s'il ne le peut pas, il demandera à quelqu'un qui le peut).
Geoff Oxberry
1
Ceci , ceci et ceci sont quelques références supplémentaires qui pourraient être utiles.
JM
1
@Mark J'ai également trouvé quelques références (avant de poster), y compris celle donnée par Geoff, mais je n'ai trouvé aucun code de travail. Pourtant, je n'ai pas trouvé le terme "transformée de Fourier cristallographique". Il s'agit en fait d'une question d'un ami qui était un peu timide à poster (mais je suis également intéressé). Le problème avec les références est que cela demande beaucoup de travail de les lire et de trouver la bonne. Je reviendrai finalement et posterai sur le résultat.
Szabolcs

Réponses:

5

Il y a plusieurs articles de Markus Püschel sur son site Web ici qui discutent des algorithmes de type Cooley-Tukey (donc je suppose que c'est "rapide") pour les transformations de réseau, comme les DFT sur les réseaux 2D triangulaires et hexagonaux. Dans le cas triangulaire, il appelle la DFT la transformée en triangle discret (DTT). Markus a un code appelé SPIRAL qui génère automatiquement du code pour les transformations, mais il semble que ce travail TNT ne fasse pas partie de SPIRAL, et il n'y a aucune implémentation sur son site Web que je puisse trouver. Je commence à penser que @JM a raison et que vous pourriez avoir besoin de lancer votre propre implémentation.

Une chose que les résumés notent est que pour les réseaux triangulaires et hexagonaux 2D, la transformation n'est pas séparable en composants 1D, vous ne pourrez donc pas réduire le problème à deux transformées 1D.

Geoff Oxberry
la source
Je me suis toujours demandé en quoi cela différait simplement de faire une FFT ordinaire le long des directions de la base du réseau. L'avantage est-il que cela préserve les symétries? Pourquoi est-ce important?
Victor Liu
Je soupçonne que lorsque vous formez votre matrice circulante (précédemment?), Elle n'aura pas les mêmes propriétés agréables qu'auparavant. . . Ma compréhension des FFT est qu'en raison des symétries et des auto-similitudes de la matrice de transformation, vous pouvez utiliser des méthodes de résolution vraiment intelligentes.
meawoppl