Pregunta

He escrito algunos algoritmos de procesamiento de audio simples en Matlab que usaré para una solicitud de Android. Estoy teniendo algunos problemas para traducir la implementación de FFT a Java.

Estoy tratando de usar la versión de Java de fftpack , que es eficiente, pero es También un poco críptico para mí, tal vez porque mi falta de una firme comprende en FFT en general.

Simplemente tengo una matriz doble de la que quiero producir una matriz correspondiente de números complejos que representan el FFT. El único cálculo que realizaré en el FFT está tomando el valor absoluto de sus elementos.

Por el bien de la claridad, aquí está el código esencial de MATLAB que me gustaría replicar utilizando Java FFTPACK:

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

Espero que esto sea bastante simple, pero no puedo identificar los puntos de entrada en FFTPACK.


Resuelto:

La respuesta a continuación de Lutzl funciona, pero la creación de un objeto complejo1D es en realidad innecesario, ya que FFTPACK admite una matriz doble como entrada:

RealDoubleFFT rdfft = new RealDoubleFFT(myArray.length);
rdfft.ft(myArray);

¿Fue útil?

Solución

Lectura de Repositorio de SourceForge JFFTPACK

Inicializa un nuevo objeto FFT a través de

fft = new ComplexDoubleFFT(N);

Luego, utiliza la transformación delantera del objeto FFT con

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);

y luego puede acceder a los valores absolutos como

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

Divida opcionalmente por N para normalizar el FFT.

Añadir declaraciones de variables apropiadas.


Se aplican las convenciones habituales, si la señal se muestrea con la frecuencia de muestreo FS, la entrada X. (XY) [K] representa el componente de frecuencia en K * FS / N para K= N / 2 a N-1. < / p>


Es posible que desee buscar una implementación de FFT diferente, mejor compatible con Java pura, no es tan complicado para implementar el FFT para las longitudes diádicas. La única complicación se produce al implementar la transformación en su lugar para obtener el último factor de aceleración.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top