UNIVERSIDAD CATÓLICA BOLIVIANA “SAN PABLO” CARRERA DE INGENIERÍA DE TELECOMUNICACIONES SISTEMAS DE TELEFONÍA FIJA TEL – 222 TALLER: AUDIO COMPANDING DOCENTE: ING. JOSÉ CAMPERO BUSTILLOS.
ESTUDIANTES: JUAN SEBASTIAN CORTEZ NOYA. JUAN PABLO CONTRERAS ALARCON IVER GERSON ARANDIA FUENTES SEMESTRE: 2 / 2016 LA PAZ - BOLIVIA
SISTEMAS DE TELEFONIA FIJA TEL-222. LABORATORIO 1: AUDIO COMPANDING 1. OBJETIVOS: - Realizar un programa en Matlab que sea capaz de descomprimir un archivo de audio (formato WAV), previamente comprimido de acuerdo a la ley de compresión µ. - Realizar un programa en Matlab capaz de comprimir y expandir un nuevo audio utilizando la ley A. 2. MARCO TEORICO:
En el proceso de digitalización de una señal, tras la fase de muestreo se procede a cuantificar las muestras.
La cuantificación es un proceso imprescindible en el proceso de digitalización porque, aunque el número de muestras es finito, el valor de cada muestra sigue siendo un valor analógico y se necesitaría una cantidad de memoria infinita para representar exactamente cada una de las muestra.
Sea la señal que se desea digitalizar y sea la señal muestreada, donde recordemos, define la distancia entre los instantes de muestreo. La fase de cuantificación
representa
las
muestras
mediante
valores
analógicos
aproximados de forma que se minimice el error de cuantificación.
2.1 CUANTIFICACION NO LINEAL: CARACTERISTICAS, NECESIDAD DE USO, DIFERENCIAS CON LA CUANTIFICACION LINEAL La cuantificación es un proceso que consiste en asignar valores de una determinada cantidad de bits, a cada uno de los valores de amplitud muestreados. Consiste en representar la señal muestreada mediante una serie finita, asignándole a cada muestra el valor más próximo a ella, dentro de una escala de valores fijos conocidos. La cuantificación no lineal, conocida también como cuantificación no uniforme, es aplicada cuando se procesan señales no homogéneas, que son sensibles en una
determinada banda de frecuencias, por ejemplo la voz. De este modo se asigna mayor número de niveles para los márgenes en que la amplitud cambia más rápidamente. Distribuye la relación señal–ruido de manera más uniforme. Difiere con la cuantificación lineal debido a la distancia entre niveles de reconstrucción que es siempre la misma, es decir, no hacen un análisis de la señal a cuantificar, sin embargo son más fáciles y baratas para implementar. Hay que tomar en cuenta que en la cuantificación lineal los niveles de cuantificación no están espaciados regularmente. También se puede usar cuantificación uniforme y previamente expandir y comprimir la señal analógica, dando más ganancia a los niveles más bajos. Como en la señal resultante la amplitud del voltaje sufre variaciones menos abruptas, la posibilidad de que se produzca un ruido de cuantificación grande disminuye. Antes de reproducir la señal digital, ésta tendrá que pasar por un expansor, que realiza la función inversa al compresor. El procedimiento conjunto de compresión y expansión se denomina companding. En la práctica, la cuantificación no uniforme se realiza transformando, antes de cuantificar, los valores de x mediante una función adecuada. Existen dos estándares: ley μ en Norteamérica, y la ley A en Europa que definen la curva de conversión. En ambos casos se utiliza una expresión logarítmica que aumenta la separación de los valores bajos y disminuye la de los altos. Figura 1: función de la ley μ, de la ley A. Donde se señalan los rangos de x, y los valores de μ = 255, y de A=87.6
Figura 2: comparación de cuantificación uniforme vs cuantificación no uniforme. En este grafico se observa la distancia entre los diferentes niveles.
El error de cuantificación se produce cuando el valor real de la muestra no equivale a ninguno de los escalones disponibles para su aproximación y la distancia entre el valor real y el que se toma como aproximación es muy grande. 2.2 LEY μ El algoritmo Ley μ es un sistema de cuantificación logarítmica de una señal de audio. Es utilizado principalmente para audio de voz humana dado que explota las características de ésta. Su aplicación cubre el campo de comunicaciones telefónicas. Este sistema de codificación es usado en Estados Unidos y Japón. Las señales de voz están formadas en gran parte por amplitudes pequeñas, debido a que son las más importantes para la percepción del habla, por lo tanto estas son muy probables. En cambio, las amplitudes grandes no aparecen tanto, por lo que tiene una probabilidad de aparición muy baja. El algoritmo Ley Mu explota el factor de que los altos niveles de amplitud no necesitan tanta resolución como los bajos. Por lo tanto, si damos más niveles de cuantificación a las bajas amplitudes y menos a las altas conseguiremos más resolución, un error de cuantificación inferior y por lo tanto una relación señal/ruido (SNR) superior que si efectuáramos directamente una cuantificación uniforme para todos los niveles de la señal.
Esto provoca que si para un determinada SNR necesitamos por ejemplo 16 bits usando una cuantificación uniforme, para la misma SNR usando la codificación Ley μ necesitamos 8 bits, dado que el error de cuantificación es menor y podemos permitirnos usar menos bits para obtener la misma SNR. Entre sus características: - complejidad baja, utilizado para aplicaciones de voz, no es adecuado para enviar paquetes. Digitalmente, el algoritmo ley μ es un sistema de compresión con pérdida en comparación con la codificación lineal normal. Esto significa que al recuperar la señal, ésta no será exactamente igual a la original. Figura 3: Esta figura muestra que el rango de los valores de entrada (línea horizontal) contenidos en el intervalo [-0.2,0.2] (amplitudes pequeñas) están representados en la salida (línea vertical) en el intervalo [-0.6,0.6]. Podemos comprobar que hay una expansión. Por otra parte vemos que los valores de entrada contenidos en el intervalo [-1,-0,6] y [0.6,1] son representados en la salida en los intervalos [-0.9,-1] y [0.9,1]. Podemos comprobar que se produce una compresión.
2.3 LEY A La ley A es un sistema de cuantificación logarítmica de señales de audio, usado habitualmente con fines de compresión en aplicaciones de voz humana. Está estandarizada por la ITU-T en G.711 y es similar a la ley Mu. Es un algoritmo estandarizado, definido en el estándar ITU-T G.711
Tiene una complejidad baja, utilizado en aplicaciones de voz humana, dada su baja complejidad no introduce retardo algorítmico, tampoco es bueno para la transmisión por paquetes. Digitalmente, factor de compresión aproximadamente de 2:1 El algoritmo Ley A basa su funcionamiento en un proceso de compresión y expansión llamado companding. Se aplica una compresión/expansión de las amplitudes y posteriormente una cuantificación uniforme. Las amplitudes de la señal de audio pequeñas son expandidas y las amplitudes más elevadas son comprimidas. Esto se puede entender de la siguiente forma; cuando una señal pasa a través de un compander, el intervalo de las amplitudes pequeñas de entrada es representado en un intervalo más largo en la salida, y el intervalo de las amplitudes más elevadas pasa a ser representado en un intervalo más pequeño en la salida. Figura 4: La ley A para el proceso de cuantificación no uniforme. En el eje horizontal de la curva se representa la amplitud (normalizada) de la señal de entrada, mientras que en el vertical se representa el número de valores de decisión. La parte positiva de la curva presenta ocho segmentos de pendiente distinta, salvo los dos primeros tramos que en realidad son uno sólo. Ya que se considera que en cada segmento hay una señal escalonada de 16 niveles
iguales
en total se tienen 128 valores de
cuantificación. De igual manera, en la parte negativa se tienen otros 128 valores de cuantificación.
En la figura 1 observamos las ecuaciones de ambas leyes para comprimir un audio. A continuación se mostrará las correspondientes para expandir dichos audios.
Figura 5: Ecuaciones de expansion de ambas leyes.
3. ESPECIFICACIONES DEL LABORATORIO: Este laboratorio consta de tres partes. A continuación se detallará cada una de ellas y se explicará el procedimiento.
3.1 PRIMERA PARTE: proyecto_1.m En esta primera parte realizamos lo siguiente: - Cargar el audio que ya está comprimido con la ley μ, donde μ=255. - Reproducir el audio usando comandos de Matlab. - Graficar el audio en el dominio del tiempo (escala de tiempos calibrada a 10 segundos). Detalle del programa: o=0; disp(' AUDIO COMPANDING '); disp(' MENU'); while o<=8 disp('1. Reproducir y graficar la señal del audio comprimido previamente con la ley mu'); disp('2. Descomprimir audioulaw.wav mediante la ley mu'); disp('3. Reproducir y graficar la señal del audio descomprimido');
disp('4. Graficar la señal del audio descomprimido y audio comprimido'); disp('5. Reproducir el audio ley "a"'); disp('6. Comprimir audio con la ley "a"'); disp('7. Descomprimir audio con la ley "a"'); disp('8. Graficar la señal del audio(original, comprimida, descomprimida)'); disp('9. Fin.'); o=input('ingrese el numero de opcion a realizar: '); disp(' '); Fs=11025;%frecuencia de muestreo ac = audioread('audioulaw.wav'); switch o case 1, sound(ac,Fs); plot(ac,'g'),title('SEÑAL COMPRIMIDA'),grid on; xlabel('Tiempo (s)') ylabel('Amplitud') case 2, clc; ad = expansor(ac,255); case 3, sound(ad,Fs); plot(ad,'b'),title('SEÑAL DESCOMPRIMIDA'),grid on; xlabel('Tiempo (s)') ylabel('Amplitud') case 4, subplot(2,1,1); plot(ac,'r'),title('SEÑAL COMPRIMIDA'),grid on; xlabel('Tiempo (s)') ylabel('Amplitud') subplot(2,1,2); plot(ad,'b'),title('SEÑAL DESCOMPRIMIDA'),grid on; ylim([-1 1]); xlabel('Tiempo (s)') ylabel('Amplitud') case 5, %IMPLEMENTACION DE LA LEY A w = audioread('pru.wav'); sound(w,44100); plot(w,'g'),title('señal original'),grid on; xlabel('Tiempo (s)') ylabel('Amplitud') case 6, clc; z = acompresor(w,87.6); sound(z,44100); ylim([-1 1]); plot(z,'r'),title('SEÑAL COMPRIMIDA'),grid on; ylim([-1 1]); xlabel('Tiempo (s)') ylabel('Amplitud') case 7, clc; i = aexpansor(z,87.6); sound(i,44100); ylim([-1 1]); plot(i,'y'),title('SEÑAL DESCOMPRIMIDA'),grid on; xlabel('Tiempo (s)') ylabel('Amplitud') case 8,
ylim([-1 1]); subplot(3,1,1); plot(w,'g'),title('señal original'),grid on; xlabel('Tiempo (s)') ylabel('Amplitud') subplot(3,1,2); plot(z,'r'),title('señal comprimida'),grid on; xlabel('Tiempo (s)') ylabel('Amplitud') subplot(3,1,3); plot(i,'y'),title('señal descomprimida'),grid on; xlabel('Tiempo (s)') ylabel('Amplitud') otherwise, break; end end
3.2 SEGUNDA PARTE: expansor.m En esta parte del trabajo, se precisa expandir el audio comprimido con la ley μ. Para ello se crea un archivo “m” en Matlab que lleva el nombre de expansor.m y que tiene la finalidad de incluir la ecuación de expansión de la ley μ (ver figura 4), tomando como datos Fs = 11025, utilizado para registros de n muestras de una señal de audio, en la muestra a una velocidad de Fs (Hz muestras por segundo), siendo este un valor determinado, porque el audio en Matlab, al ser reproducido sin esta Fs, toma un valor por defecto que es muy lento. Detalle del programa: function [f] = expansor(a,mu) f = sign(a).*(((a<=1)&(a>=-1)).*((((1 + mu).^ abs(a)) -1)./mu)); end
3.3 TERCERA PARTE: Para finalizar el trabajo, se debe comprimir y expandir un nuevo audio usando la ley A. Es así que utilizamos una página para convertir audio a formato wav (http://www.online-convert.com) y de paso determinamos los
segundos de la
reproducción que queremos. Como en el caso anterior, utilizamos las formulas que se señalan en el informe para poder hacer la compresión y por consiguiente, la expansión del audio original.
Detalle del programa: Compresor: function [g] = acompresor(d,a) g =((sign(d).*(abs(d)<=(1./a)).*((a.*abs(d))./(1.+ log(a))))+(sign(d).*(((abs(d)>=(1./a))&(abs(d)<=1.)).*((1.+log(a.*abs( d)))./(1.+log(a)))))); end
Expansor: function [r] = aexpansor(s,a) r = sign(s).*(((abs(s)<(1./(1.+log(a)))).*(((abs(s)).*(1.+log(a)))./a))+(( (abs(s)>=(1./(1.+log(a))))&(abs(s)<1)).*((exp(abs(s).*(1.+log(a)))1)./a))); end
GRAFICOS DEL PROYECTO: Figura 6: gráfico de la señal comprimida (parte 1 del laboratorio – audiolaw.wav)
Figura 7: señal expandida – (parte 2 del laboratorio – audiolaw.wav)
Figura 8: comparación de ambas señales – audiolaw.wav
Figura 9: señal original (parte 3 del laboratorio – pru.wav)
Figura 10: señal comprimida (parte 3 del laboratorio – pru.wav)
Figura 11: señal expandida (parte 3 del laboratorio – pru.wav)
Figura 12: comparación de la señal (parte 3 del laboratorio –pru.wav)
4. CONCLUSIONES Y RECOMENDACIONES: - Un cuantificador logarítmico de 8 bits aporta aproximadamente la misma calidad que un cuantificador lineal de 16 bits. Por esto, la cuantificación logarítmica se utiliza intensivamente en telefonía. - La cuantificación es un proceso irreversible porque, en general, produce una pérdida definitiva de información de la señal digitalizada. - En esta cuantificación (no lineal) tendremos pequeños pasos de cuantificación para los valores pequeños de amplitud y pasos de cuantificación grandes para los valores grandes de amplitud, lo que proporciona mayor resolución en señales débiles al compararse con una cuantificación uniforme de igual bit rate, pero menor resolución en señales de gran amplitud. - En el caso de que una señal de audio tuviera una probabilidad de aparición de todos los niveles de amplitud por igual, la cuantificación ideal sería la uniforme, pero en el caso de la voz humana esto no ocurre, estadísticamente aparecen con mucha más frecuencia niveles bajos de amplitud. - La ley A para el proceso de cuantificación no uniforme, es una función logarítmica que divide la escala de cuantificación en 16 segmentos de longitudes diferentes, dividido cada uno a su vez en 16 intervalos iguales. Los cuatro segmentos centrales, que son similares entre sí porque poseen la misma pendiente, a veces se les considera agrupados en un único segmento de manera que la ley A se la denomina de 13 segmentos. - Respecto al laboratorio, es importante recalcar que el nombre de las funciones que usamos, debe permanecer igual para que podamos llamarlas desde otros programas. - Todos los programas que se elaboren deben ser guardados en una misma carpeta, incluido los audios. - Los objetivos se cumplieron, desarrollamos las tres partes del laboratorio, implementándolas con un software en Matlab.
5. REFERENCIAS WEB http://www.arqhys.com/contenidos/cuantificaciones-digitales.html http://ceres.ugr.es/~alumnos/luis/mycuan.htm http://www.sc.ehu.es/acwarila/PDI/Tema%207/muestreo.pdf http://telemarenas.blogspot.com/2010/09/ley-y-ley-mu.html http://octave.sourceforge.net/signal/function/pulstran.html http://www.mathworks.com/help/matlab/ref/wavrecord.html