55 votes

Fiable et rapide, FFT en Java

depuis que je ne veux pas le faire sur mon propre, je suis à la recherche d'un bon FFT la mise en œuvre de java. D'abord j'ai utilisé celui de la FFT Princeton , mais il utilise des objets et mon profiler m'a dit que ce n'est pas très rapide en raison de ce fait. J'ai donc googlé encore et trouvé celui-ci: FFT-Britannique , qui est plus rapide. Peut-être que l'un de vous les gars, vous connaissez un autre FFT la mise en œuvre? J'aimerais avoir le "meilleur" car mon application doit traiter une énorme quantité de données audio, et les utilisateurs n'aiment pas à l'attente... ;-)

Ce qui concerne.

31voto

Kieren Johnstone Points 19499

FFTW est le plus rapide de la transformation de fourier dans l'ouest", et a des wrappers Java:

http://www.fftw.org/download.html

Espérons que ça aide!

21voto

basszero Points 14539

La fin de la partie - ici comme un pur java solution pour ceux lors de la JNI n'est pas une option.JTransforms

15voto

alcor Points 393

J'ai écrit une fonction pour la FFT en Java: http://www.wikijava.org/wiki/The_Fast_Fourier_Transform_in_Java_%28part_1%29

C'est dans le Domaine Public de sorte que vous pouvez utiliser ces fonctions partout (personnels ou d'affaires des projets trop). Viens de me citer dans les crédits et envoyez-moi juste un lien de votre travail, et vous êtes ok.

Il est totalement fiable. J'ai vérifié sa sortie contre le Mathematica de la FFT et ils ont toujours été correct jusqu'au 15 chiffres décimaux. Je pense que c'est une très bonne FFT la mise en œuvre de Java. Je l'ai écrit sur le J2SE version 1.6, et l'a testé sur le J2SE 1.5-1.6 version.

Si vous comptez le nombre d'instruction (c'est beaucoup plus simple que d'une parfaite complexité de calcul de la fonction d'estimation), vous pouvez clairement voir que cette version est beaucoup, même si c'est pas optimisé du tout. J'ai l'intention de publier la version optimisée si il y a assez de demandes.

Permettez-moi de savoir si c'était utile, et dites-moi tout commentaire que vous le souhaitez.

5voto

digiphd Points 1316

Je suppose que cela dépend de ce que vous êtes de traitement. Si vous êtes le calcul de la FFT sur une grande durée que vous pourriez trouver qu'il prend un certain temps en fonction du nombre de points de fidélité que vous êtes désireux. Cependant, dans la plupart des cas pour l'audio, il est considéré comme non-stationnaire (c'est les signaux de la moyenne et de la variance des changements beaucoup plus de temps), donc, en prenant un grand FFT (Periodogram PSD estimation) n'est pas une représentation exacte. Vous pouvez également utiliser de Courte durée à transformée de Fourier, de quoi vous briser le signal de former des cadres et de calculer la FFT. La taille de l'image varie en fonction de la rapidité de la statistique du changement, pour la parole, il est habituellement de 20 à 40 ms, pour la musique je suppose que c'est légèrement plus élevé.

Cette méthode est bonne si vous êtes d'échantillonnage à partir du microphone, car il vous permet de tampon de chaque image à un moment, calcul de la fft et de donner ce que l'utilisateur se sent en "temps réel" de l'interaction. Parce que 20ms est rapide, parce que nous ne pouvons pas vraiment percevoir une différence de temps que les petits.

J'ai développé un petit banc de marque pour tester la différence entre FFTW et KissFFT c-bibliothèques sur un signal de parole. Oui FFTW est hautement optimisé, mais quand vous prenez seulement à court-cadres, la mise à jour des données pour l'utilisateur, et en utilisant seulement une petite taille de la tfr, ils sont tous les deux très similaires. Voici un exemple sur la façon de mettre en œuvre les KissFFT bibliothèques dans Android à l'aide de LibGdx par badlogic jeux. J'ai mis en place cette bibliothèque à l'aide de chevauchement des images dans une Application Android, j'ai développé il y a quelques mois appelé Rehaussement de la Parole pour Android.

4voto

Jay R. Points 6337

Je suis à la recherche à l'aide de SSTJ pour les Cuc en Java. Il peut rediriger via JNI pour FFTW si la bibliothèque est disponible ou utilisez un pur Java mise en œuvre dans le cas contraire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X