Objetivos:
En esta tarea usted aplicará: creación de procesos, manejo de señales, comunicación entre
procesos usando pipes
e integración de servicios provistos por otras aplicaciones. En este
caso se solicitará servicios de GNU octave y aplay (Player for ALSA
sound-card driver, Linux).
Introducción
En grabaciones de audio se produce saturación de la
señal cuando ésta supera el valor máximo posible para cada muestra de
audio grabada. Para evitar este problema, se debe reducir el nivel de
la señal a grabar -bajando su volumen- o reducir la sensibilidad de
la entrada de grabación -bajando la sensibilidad del "micrófono". Cuando
la
grabación queda recortada y no podemos repetir la grabación, se
introduce distorsión como se aprecia en la Figura 1 (señal superior altamente saturada).
Cuando a saturación es leve, es posible un buen nivel de restauración través de interpolación. Para esto primero se debe atenuar la señal saturada y luego reemplazar los puntos saturados por puntos interpolados en esa zona. Ésta fue la estrategia usada el año 2014. Este año su grupo debe utilizar otra estrategia. Cuando la señal es recortada se generan componentes de alta frecuencia. Se trabajará con señal de audio codificada en PCM, little endian, con signo y 16 bits. En lugar de atenuar la señal, usted puede representar cada muestra en 32 bits. Se pide usar la siguiente heurística: filtrar la señal con filtro pasa bajos, luego reemplazar la sección recortada de la señal por la porción obtenida luego de filtrar. Así se obtiene la misma señal original, excepto los intervalos donde la señal estaba recortada donde éstos son reemplazados por los segmentos de la señal filtrada. Para filtrar la señal, se pide tomar la FFT (Fast Fourier Transform), extraer las componentes de alta frecuencia y volver al plano del tiempo tomando la FFT inversa. Recordar que el foco es experimentar con los mecanismos útiles en la programación de sistemas, no llegar a una solución óptima para el problema.
Nombre: csa : corrector de saturación de audio.Sintaxis: csa <archivo_de_audio_original> <ganancia> <offset> [p]
Como archivo de audio original usa uno con muestras de audio mono canal en formato PCM, little endian,
con signo y de 16 bits. La frecuencia de muestreo debe ser de 8KHz.
Puede usar este archivo de ejemplo.
La ganancia es un número
real mayor que 1 usado para simular saturación en el proceso de
grabado. Es decir, la saturación será generada artificialmente
amplificando la señal y recortándola para valores fuera del rango [-
2^15,2^15).
Offset permite especificar el tiempo en [ms] desde el inicio del archivo a mostrar en los gráficos generados su programa.
Si el parámetro p es ingresado, csa reproduce el archivo de audio
original completo, luego la versión saturada y finalmente la corregida.