después de perfilar mucho descubrí que este método ocupa la mayor parte del% del tiempo de cálculo. Realmente no veo una manera de optimizar, ya que es una función horrible. (es ...) Tal vez alguien me puede mostrar una buena idea más o menos?¿Es posible optimizar esta función?
public static double perceivedLoudness(double L_G, double L_ETQ, double a0) {
double t1 = 1d + 1/4d * Math.pow(10d, 0.1d * (L_G - a0 - L_ETQ));
double t2 = Math.pow(t1, 0.25);
return 0.064d * Math.pow(10, 0.025 * L_ETQ) * (t2 - 1);
}
Aquí es la versión mejorada:
public static double perceivedLoudness(double L_G, double L_ETQ, double a0) {
double x = L_G - a0 - L_ETQ;
double t1 = 0.25 * Math.exp(0.230259 * x) + 1;
double t2 = Math.sqrt(Math.sqrt(t1));
return ltqFactors[(int)L_ETQ] * (t2 - 1);
}
La búsqueda de ltqFactors va de esta manera. Los valores de ltq tienen 20 puntos de la función ltq dada, que aproximadamente debería ser suficiente.
for(int i = 0; i < etqValues.length; ++i) {
ltqFactors[(int)etqValues[i]] = 0.064d * Math.exp(etqValues[i] * 0.05756462732485114210d);
}
Editar: Después de más pruebas con más archivos, vengo hasta una velocidad de ~ 100% hasta:
- antigua: 6,2% con llamadas 7000000
- Nuevos: 3, 2% 8000000 llamadas.
¡Gracias hasta ahora!
Edit2: No sé qué respuesta a aceptar. :( Con algunas otras mejoras (principalmente tablas de búsqueda) el tiempo de procesamiento para 9000 archivos de sonido bajó de 4: 30min a 3: 28min.
Mantendré esta pregunta abierta para ver si hay otras ideas, pero luego aceptar una respuesta
Editar:. estoy un poco frustrado ahora uso un treeviewer JFace para permitir al usuario navegar por los resultados, y necesito más tiempo para actualizar que la propia cálculos:../
Quiero saber cómo alguien podría incluso llegar a tal función. Esas constantes parecen tan al azar! –
@controlfreak http://ergo.ucsd.edu/~holcus/papers/JSNC2000.pdf – InsertNickHere
No hay nada en ese método que deba tomarse mucho tiempo para calcular, ¿está seguro de que no está ocupando la mayor parte del% porque es siendo llamado muchas veces? –