sonido reproducir java signal-processing numerical-analysis

reproducir sonido en java netbeans



Biblioteca de procesamiento de señales en Java? (5)

Me gustaría calcular la densidad espectral de potencia de series de tiempo; hacer algunos filtros paso banda, paso bajo y paso alto; tal vez algunas otras cosas básicas.

¿Hay una buena biblioteca de código abierto de Java para hacer esto?

He cazado un poco sin éxito (por ejemplo, googlear "densidad espectral de potencia java" o "procesamiento de señal java" y hacer clic a través de enlaces, buscando en Apache Commons, Sourceforge, java.net, etc.).

Hay muchos applets, libros, tutoriales, productos comerciales, etc. que no satisfacen mis necesidades.

Actualización : Encontré org.apache.commons.math.transform para las transformadas de Fourier. Esto no implementa densidad espectral de potencia, paso de banda, etc., pero es algo.



Encontré otro recurso, aunque no es una biblioteca: http://www.dickbaldwin.com/tocdsp.htm . Es solo una discusión básica sobre el procesamiento de señales y la transformación de Fourier, con algunos ejemplos de Java. Consulte, por ejemplo, los tutoriales 1478, 1482, 1486. ​​No estoy seguro de cuál es la licencia en el código.


He escrito una colección de algunas clases de DSP de Java, por ejemplo, filtros IIR:

Colección DSP de Java


Se ve bastante escaso. Pruebe Signalgo o jein o Intel Signal Processing Library , aunque creo que el último es solo un contenedor JNI.

Vi muchos de esos applets de los que estabas hablando. Creo que puede obtener los JAR para ellos y usar las API de clase en su interior. Puede que tenga que usar eclipse y jad para descompilar y descubrir qué hacen, debido a la falta de documentación. Pruebe la fuente en esta página, por ejemplo.


Mi primera sugerencia es no hacer su implementación de DSP en Java. Mi segunda sugerencia sería rodar sus propias implementaciones de DSP simples en Java.

Por qué no usar Java:

Tengo mucha experiencia escribiendo código DSP en los últimos 10 años ... y casi ninguno de los códigos DSP está en Java ... así que discúlpeme cuando dude en leer sobre alguien que quiera implementar DSP en Java.

Si va a hacer un DSP no trivial, entonces no debería usar Java. La razón por la que DSP es tan doloroso de implementar en Java es porque todas las buenas implementaciones de DSP utilizan trucos de administración de memoria de bajo nivel, punteros (cantidades locas de punteros), grandes matrices de datos en bruto, etc.

Por qué usar Java:

Si está haciendo cosas sencillas de DSP, ejecute su propia implementación de Java. Las cosas DSP simples como PSD y filtrado son relativamente fáciles de implementar (implementación fácil pero no serán rápidas) porque hay muchos ejemplos de implementación y teoría bien documentada en línea.

En mi caso, implementé una función PSD en Java una vez porque estaba graficando el PSD en una GUI de Java, así que era más fácil tomar el golpe de rendimiento en Java y tener el PSD calculado en la GUI de Java y luego trazarlo.

Cómo implementar un PSD:

La PSD suele ser solo la magnitud de la FFT que se muestra en dB. Hay muchos ejemplos académicos, comerciales y de código abierto que muestran cómo calcular la magnitud de la FFT en dB. Por ejemplo, org.apache.commons.math.transform salida org.apache.commons.math.transform y luego solo necesita convertir a magnitud y dB. Cualquier cosa posterior a la FFT debe adaptarse a lo que necesita / desea.

Cómo implementar paso bajo, filtrado de paso de banda:

La implementación más fácil (no la más eficiente desde el punto de vista computacional) sería, en mi opinión, usar un filtro FIR y hacer una convolución del dominio del tiempo.

La convolución es muy fácil de implementar, se trata de dos bucles anidados y hay literalmente millones de código de ejemplo en la red.

El filtro FIR será la parte difícil si no sabes nada sobre el diseño del filtro. El método más fácil sería usar Matlab para generar su filtro FIR y luego copiar los coeficientes en java. Sugiero usar firpmord () y firpm () de Matlab. Dispare para una atenuación de -30 a -50 dB en la banda de parada y una ondulación de 3 dB en la banda de paso.