A la hora de realizar un prototipo en JAVA sobre un proyecto que me encuentro realizando, me he encontrado con que no hay mucho material disponible escrito para dicho lenguaje de fácil uso para el procesado de señal. Por ello, yo mismo he tenido que programar métodos para realizar funciones que necesitaba de procesado. Mi proyecto versa sobre el tratamiento del audio por lo que, básicamente, el código escrito está orientado a ello. Muchas de las funciones son muy concretas, pues no quise complicarme escribiendo algo muy genérico pero, otras tantas, sí se pueden usar de forma genérica (también está la opción de modificar según la necesidad).
Podéis descargar la API como fichero con extensión .java haciendo clic aquí.
A continuación presento una descripción breve sobre las funciones incluidas, ya que la clase escrita no está documentada.
- Suavizado de Pitch
La función admite como entrada un vector de números reales en doble precisión representantes de un contorno de frecuencia de pitch en el tiempo (también podría usarse con otros propósitos). Como salida devuelve el mismo contorno suavizado. Este suavizado se basa en umbrales heurísticos supuesto que el contorno de pitch es el logaritmo en base e de la secuencia de frecuencias de pitch en hertzios. La realización de este método se encuentra motivada por el hecho de que, en muchas ocasiones, durante la detección del pitch a partir del espectro o funciones de autocorrelación, existen armónicos más energéticos que el tono fundamental, lo que se traduce en picos erróneos dentro de la secuencia. Se considera errónea una ráfaga de valores cuando dicha ráfaga es inferior a 10 cifras consecutivas y la pendiente generada en su entorno es superior a 0.5.
- Cálculo de la PSD
Calcula la PSD (módulo de la FFT pero no en dB) entre $0$ y $2\pi$ de una secuencia de muestras dada como un vector de números reales en doble precisión. La secuencia de salida tiene la misma longitud y se calcula según:
$Y(k) = \left | \sum_{n=0}^{N-1}x(n)e^{-i\frac{2\pi nk}{N}} \right |$
- Filtro de Mediana de Orden 5
Muy útil para la eliminación de ruido aditivo impulsivo. Realmente puede modificarse en su interior el orden, siempre y cuando este sea impar. La muestra k-ésima filtrada se obtiene a partir del cálculo de la mediana como:
$y(k) = mediana(x(k - (n-1)/2),...,x(k + (n+1)/2))$
- Cuantizador Musical
Aproxima una secuencia de valores de pitch frecuencial dados en forma logarítmica a semitonos de la escala musical. Esto sólo se encuentra habilitado en el rango frecuencial que va del Sol2 al Sol5.
- Cálculo de la Energía
Calcula la energía de una secuencia de muestras dadas en un vector de datos reales de doble precisión. Dicha energía se obtiene de la forma:
$E(dB) = 10log_{10}\sum_{n=0}^{N-1}x(n)^{2}$
- Interpolador de Orden 5
Este interpolador aumenta la resolución en un factor 5 de un conjunto de muestras dadas en el formato ya mentado. Este orden de interpolación es inamovible ya que el funcionamiento del método se basa en la inserción de ceros y en la aplicación de un filtro FIR simétrico especial (cuyos coeficientes sólo son válidos para este orden de interpolación).
- Enventanador de Hamming
Enventana una secuencia de muestras con Hamming. La función de la ventana de Hamming es:
$w(n) = a_{0}-a_{1}\cos(\frac{2\pi n}{N-1})$
- Cálculo de la Media
Calcula la media de un vector de datos de entrada como:
$\mu = \frac{1}{N}\sum_{n=0}^{N-1}x(n)$
- Cálculo de la Varianza
Calcula la varianza de un vector de datos de entrada como:
$\sigma^2 = \frac{1}{N-1}\sum_{n=0}^{N-1}(x(n)-\mu)^2$
- Normalizador
Normaliza un vector de muestras de entrada por el máximo del vector en valor absoluto.
- Filtrado
Método para el filtrado de un vector de datos reales en doble precisión de entrada. Devuelve otro vector del mismo tamaño al que se le ha aplicado un filtrado dados los coeficientes del correspondiente filtro FIR o IIR. Dado un filtro de orden (p,q), la salida n-ésima filtrada se obtiene como:
$y(n) = b_{0}x(n)+...+b_{q}x(n-q) - a_{1}y(n-1)-...-a_{p}y(n-p)$
- Cálculo de la Autocorrelación
Dada una secuencia de muestras de entrada, este método calcula su autocorrelación haciendo uso del estimador sesgado, el cual es de uso preferente debido a su inferior varianza, lo que se traduce en una mejor convergencia de las muestras de autocorrelación lejanas. Se devuelve un vector de salida de la misma dimensión que el de entrada, el cual contiene las muestras correspondientes a la parte positiva del eje de abscisas. El estimador sesgado de la autocorrelación para la parte positiva del eje de abscisas se define como:
$r_{x}(k) = \frac{1}{N}\sum_{n=0}^{N-1-k}x(n)x(n+k)$
- Análisis LPC
Se encarga de obtener hasta un total de 13 coeficientes del predictor lineal que modela, como un filtro todo-polos, la respuesta del tracto vocal. Estos coeficientes se obtienen a partir de la resolución de las ecuaciones de Yule-Walker a partir del cálculo de muestras de autocorrelación dado un vector de muestras reales en doble precisión de entrada.
- Detector de Pico Máximo
Esta función detecta la presencia de un pico máximo absoluto en una secuencia de valores de entrada. Es la misma función que ya presenté en otra entrada escrita en MatLab.
- Remuestreador de Orden 5
No sólo es un remuestreador de orden 5 sino que, únicamente, funciona como remuestreador para pasar de una frecuencia de 8kHz a 1.6kHz. Esto es así ya que, al principio, se aplica un filtrado FIR de fase lineal cuyos coeficientes son estáticos y almacenados para este propósito. Una vez filtrado el vector de entrada, se selecciona una de cada 5 muestras.



















