ELO-330: Programación de Sistemas
Tarea 2: Reparración de audio afectado por pérdidas de paquetes
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
La transmisión de audio paquetizado usando UDP genera
pérdidas de paquetes debido a paquetes descartados por la red y
descartados en receptor por llegada tardía. Varias técnicas se han
estudiado para reparar la pérdia de tales paquetes [1], entre ellas
están: sustitución por silencio, parte superior de Figura 1;
sustitución por ruido, similar a la anterior pero poner ruido gausiano
de fondo en lugar de ceros; repetición del paquete previo; y
sustitución de forma de onda. Ver referencia [1] por más técncias si
usted lo desea. La literatura indica que la reparación se mejora en el
mismo orden en que estas técnicas son listadas aquí. En esta tarea
exploraremos el resultado de reemplazar paquetes permidos por silencio
y repetir el paquete previo.
Figura
1: Señal de archivo saludo. Superior: segmento de señal original; señal
inferior: misma señal con segmentos de 20 [ms] perdidos, tasa de
pérdida 20%.
Cuando la señal es reempalzada por silencio o cuando se repite
el paquete previo, se producen discontinuidades de la señal. En esta
tarea usted escuchará el efecto de ambas técnicas y usando
interpolación polinomial de matlab u octave mitigará en parte la
distorsión generada por la discontinuidad al replicar un paquete.
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: rpas : reparador de pérdidas en audio streaming.
Sintaxis: rpas <archivo_de_audio_original> <tasa_de_pérdida> <offset> <srand> [p]
El archivo de audio original contiene 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 tasa de pérdida es un número real entre 0 y 30% y corresponde al porcentaje de paquetes perdidos a simular en la reparación.
Offset permite especificar el tiempo en [ms] desde el inicio del archivo a mostrar en los gráficos generados por la aplicación.
srand es un número entero usado para definir la semilla para el cálculo de los números aleatorios.
Si el parámetro p es
ingresado, rpas reproduce el archivo de audio completo usando
reparación con silencios, luego la versión reparada con repetición de
paquetes y finalmente la original.
Descripción
rpas muestra tres gráficos de
400 milisegundos desde el tiempo especificado por offset respecto del
inicio del archivo: el primer gráfico muestra el segmento de señal de
audio
reparado con silencios, el segundo muestra el segmento de la señal
reparada con repetición de paquetes y el tercero muestra el
segmento de la señal original. Si bien los gráficos muestran
solo 400 milisegundos de la señal, el procesamiento se hace sobre toda
la señal. Para reducir la distorsión de los extremos del paquete
intertado reemplace las primeras 10 muestras de éste por la
interpolación obtenida al tomar las últimas 5 muestras de señal de
audio previas a la pérdida y las 5 muestras de audio posteriores a esas
16 muestras a reemplazar. Haga la mejora equivalente en el extremo con
el paquete siguiente.
Luego de mostrar los tres gráficos, rpas muestra un índice
de error para la corrección hecha. El índice de error E se calcula usando:
E = Suma de i=0 a i=N de (Si - si)2. donde Si es la señal original, si
es la señal corregida, N es el número de muestras del archivo de audio.
rpas termina cuando el usuario presiona cualquier tecla.
Evaluación de la Tarea y qué entregar: revisar las instrucciones para entregar y evaluar su tarea.
Recomendaciones
* Para analizar el archivo de audio, este código puede ser de ayuda.
* Revise uso de octave y ejemplo para generar gráficos.
* Sobre interpolación: Su grupo
debe reemplazar los primeros y últimos 10 puntos por los resultantes de evaluar un
polinomio de orden 6 que ajuste de mejor forma los 10 puntos. Insito que el
detalle fino no es tan relevante para esta tarea. La tarea de
obtener el polinomio de 6° orden que ajuste los puntos
seleccionados será encargada a octave. Para ello revise la
función p = polyfit (x, y, n). La evaluación del polimonio resultante puede ser hecha usando al función y = polyval (p, x).
* Sobre reproducción de audio en Linux: Su programa se apoyará en la
aplicación aplay para reproducir las muestras de audio. Por ejemplo,
para reproducir el archivo de ejemplo, usted puede ejecutar:
$aplay --format=S16_LE -t raw SaludoAudacity.raw
Naturalmente su aplicación no será probada en aragorn con la opión p.
* Más ayuda puede ser incluida en la medida que surjan vuestras preguntas.
* Haga su tarea de a poco y con tiempo. Con gusto atenderé todas sus preguntas en especial en clases y horas de atención.
Referencias
[1] Perkins, C.; Hodson, O.; Hardman, V., "A survey of packet loss
recovery techniques for streaming audio", IEEE Network, 1998, Volume:
12, Issue: 5, Pages: 40 - 48.