Question

J'ai écrit quelques algorithmes de traitement audio simples dans MATLAB que j'utiliserai pour une application Android.J'ai du mal à traduire l'implémentation FFT en Java.

J'essaie d'utiliser la version Java de fftpack, qui serait efficace, mais qui est aussi un peu énigmatique pour moi, peut-être à cause de mon manque de compréhension de la FFT en général.

J'ai simplement un double tableau à partir duquel je souhaite produire un tableau correspondant de nombres complexes représentant la FFT.Le seul calcul que je ferai sur la FFT consiste à prendre la valeur absolue de ses éléments.

Par souci de clarté, voici le code MATLAB essentiel que j'aimerais répliquer à l'aide de Java fftpack :

X = fft(myDoubleArray);
abs(X[i]);

Je pense que c'est plutôt simple, mais je ne parviens pas à identifier les points d'entrée dans fftpack.


RÉSOLU :

La réponse ci-dessous de LutzL fonctionne, mais la création d'un objet Complex1D est en réalité inutile car fftpack prend en charge un double tableau en entrée :

RealDoubleFFT rdfft = new RealDoubleFFT(myArray.length);
rdfft.ft(myArray);
Était-ce utile?

La solution

Lecture de dépôt sourceforge jfftpack

Vous initialisez un nouvel objet fft via

fft = new ComplexDoubleFFT(N);

Ensuite, vous utilisez la transformation directe de l'objet fft avec

Complex1D X;
X.x=new double[N];
X.y=new double[N];
for(k=0;k<N;k++) X.x[k]=x[k];

fft.ft(X);

et peut ensuite accéder aux valeurs absolues comme

x=X.x[k]; y=X.y[k]; a=Math.sqrt(x*x+y*y);

Divisez éventuellement par N pour normaliser la FFT.

Ajoutez des déclarations de variables appropriées.


Les conventions habituelles s'appliquent, si le signal est échantillonné avec une fréquence d'échantillonnage fs, l'entrée X.(xy)[k] représente la composante fréquentielle à k*fs/N pour k=N/2 à N-1.


Vous souhaiterez peut-être rechercher une implémentation FFT différente, mieux prise en charge, réalisée en Java pur, ce n'est pas si compliqué d'implémenter la FFT pour les longueurs dyadiques.La seule complication survient lors de la mise en œuvre de la transformation en place pour obtenir le dernier facteur d'accélération.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top