2010-07-29 22 views
3

Je cherche une bibliothèque FFT à traduire dans le langage de programmation D pour inclusion dans une bibliothèque sur laquelle je travaille ou (mieux encore) dans la bibliothèque standard. J'ai besoin d'une FFT assez simple avec des performances décentes, pas une version optimisée avec une performance rapide et zéro précision/lisibilité. Cependant, il doit satisfaire aux exigences suivantes:Domaine public ou pas d'attribution binaire FFT Lib?

  1. Soit écrit en assez D ou pur et simple pour être raisonnablement traduisible pur D. Par exemple, un code lisible par C sans assembleur en ligne ou d'abus de préprocesseur fonctionnerait. (Je suis conscient que vous pouvez appeler C à partir de D, mais j'ai mes raisons pour ne pas vouloir.)

  2. Licence en vertu de termes qui sont libres/open-source, non-copyleft (ie pas GPL) et faire ne nécessite pas d'attribution pour la distribution binaire uniquement (c'est-à-dire pas BSD). Les licences acceptables incluent Boost, zlib et public domain.

  3. Le code doit être suffisamment lisible pour que je puisse le modifier sainement afin de lui donner une belle interface D. Je ne veux pas veulent super-optimisé mais illisible Fortran code des années 70, peu importe comment cela fonctionne bien. Je ne veux pas non plus que le code C soit traduit du code Fortran super-optimisé et ressemble au code Fortran.

S'il vous plaît ne suggèrent pas FFTW, peu importe comment il est bon (je comprends qu'il est très bien), car il est à la fois sous licence GPL et écrit pour la performance sur la simplicité.

+1

Quel est le problème avec une licence qui nécessite une attribution, comme MIT ou BSD (3 clauses)? Tout ce qu'il faut, c'est une ligne quelque part dans le About ou la documentation qui dit "libfftoo (c) Random Person". – ShreevatsaR

+2

Ou pourquoi ne pas l'implémenter vous-même? L'idée est assez simple: http://stackoverflow.com/questions/3224823/how-exactly-do-you-compute-the-fast-fourier-transform/3226672#3226672 et il fonctionnera en O (n log n) (Je ne connais pas les constantes ... essayez-le et voyez si c'est assez rapide, cela devrait prendre autant de temps que de comprendre comment interfacer avec une librairie existante: p). Le code lié de fft-cpp montre qu'il n'y a pas beaucoup plus que cela (bien que je préférerais travailler sur un champ fini plutôt que sur des nombres complexes). – ShreevatsaR

+0

@ShreevastsaR: L'attribution n'est pas acceptable parce que le but est de contribuer à la bibliothèque standard, qui a une politique stricte contre l'attribution d'attribution pour les œuvres distribuées sous forme binaire seulement. Pour une bibliothèque standard, cette exigence semble assez raisonnable. – dsimcha

Répondre

4

Kiss FFT, par Mark Borgerding, répond à vos exigences sauf que c'est une licence BSD. Il peut être utile de le contacter et de voir s'il est intéressé à vous donner une exception pour la licence. Il y a un peu d'abus avant le processeur, mais seulement pour gérer les types de données à virgule fixe et à virgule flottante.

+0

+1 pour Kiss FFT –