Calcular la frecuencia de entrada de sonido utilizando FFT

Mi aplicacion muestra la frecuencia pico del sonido de entrada en RPM. Tengo una matriz de dobles que contiene las muestras en el dominio del tiempo.

audioRecord.read(buffer, 0, 1024);

Entonces hice FFT en él.

transformer.ft(toTransform);

usando esta claseaquí

Entonces obtuve la magnitud máxima de los valores complejos que son los resultados de FFT

// tamaño del bloque = 1024

double magnitude[] = new double[blockSize / 2];

            for (int i = 0; i < magnitude.length; i++) {
                double R = toTransform[2 * i] * toTransform[2 * i];
                double I = toTransform[2 * i + 1] * toTransform[2 * i * 1];

                magnitude[i] = Math.sqrt(I + R);
            }
            int maxIndex = 0;
            double max = magnitude[0];
            for(int i = 1; i < magnitude.length; i++) {
                if (magnitude[i] > max) {
                    max = magnitude[i];
                    maxIndex = i;
                }
            }

Ahora tengo el índice de la magnitud máxima ... 1 - ¿Cómo puedo obtener la frecuencia pico en los pls de detalles? 2 - ¿Hay alguna función lista llamada ComputeFrequency () o getFrequency ()? Gracias por adelantado :)

Respuestas a la pregunta(1)

Su respuesta a la pregunta