Documentos de Académico
Documentos de Profesional
Documentos de Cultura
El objetivo de esta prctica es familiarizar al alumno con la codificacin de forma de onda (con prdidas) mediante tcnicas de Modulacin por Impulsos Codificados MIC- (Pulse Code Modulation PCM). Para llevar a cabo la prctica, desarrolle cada ejercicio en un fichero matlab dentro del directorio P2. Se proporcionan dos cdigos Matlab accesibles desde la pgina de la asignatura: o Grabando.m: permite grabar un fichero de audio discreto (muestreado a 8 Khz) de 4 segundos de duracin y almacenarlo en el fichero sample_audio.mat Leyendo.m: Es una funcin que permite leer un fichero de audio discreto (sample_audio.mat) , lo sonifica y dibuja sus grficas caractersticas. Adems devuelve un vector con la secuencia contenida en el fichero.
Todos estos ficheros estn accesibles en el archivo correspondiente a la prctica 2 en la pgina web de la asignatura. Justo antes de finalizar la prctica, comprima todo el directorio P2 en un fichero TxDatosP2GXxx.zip (siendo X el grupo A, B o C- y xx el nmero de pareja), conctese al sistema de entrega de prcticas de la Intranet y entrguelo en el grupo que corresponda (A, B o C). Gurdese adicionalmente una copia personal, para posibles futuras reutilizacin del cdigo en prcticas posteriores.
2.1.1
Implemente una funcin que calcule los ndices (desde 0 hasta el nmero mximo) de intervalo a los correspondientes una coleccin de muestras que respete la siguiente sintaxis:
function [Scuan] = getIndicesUniformes (S,nNiveles,vinf,vsup)1 Recibe: o o o o Devuelve: o Scuan == ndices de los intervalos de cuantificacin calculados para la seal de entrada. S == Secuencia de audio grabada. nNiveles == Nmero de niveles de cuantificacin. vinf == Valor mnimo de la seal. vsup == Valor mximo de la seal.
Haciendo uso de esta funcin escriba el cdigo de una funcin que implemente un cuantificador uniforme simtrico, sin nivel de reconstruccin igual a 0, de n bits, que ser guardado en PCMUniforme.m. La sintaxis de la funcin ser la siguiente:
function [Scuan] = PCMUniforme (S,nbits,v) Recibe: o o o Devuelve: o Scuan == ndices de los intervalos de cuantificacin calculados para la seal de entrada. S == Secuencia de audio grabada. nbits == Nmero de bits a utilizar para la codificacin de cada muestra. v == Valor de sobrecarga.
Implementar una funcin decodificaPCM para llevar a cabo la reconstruccin de una seal cuantificada que respete la siguiente sintaxis:
function [Srecon] = decodificaPCM (Scuan,nbits,v) Recibe: o o o Devuelve: Scuan == ndices de los intervalos cuantificacin calculados para la seal original. nbits == Nmero de bits utilizados en la cuantificacin de la seal original v == Valor de sobrecarga utilizado en la cuantificacin de la seal original.
Recomendaciones: Compruebe la correccin de cada una de las funciones con secuencias cortas de las que pueda calcular analticamente el resultado esperado.
Recuerde comprobar dentro de esta misma funcin que ninguno de los ndices resultantes es mayor que nNiveles-1 ni menor que 0.
Recuerde que la potencia de matlab reside en su capacidad para el calculo matricial (i.e. Puede dividir todos los elementos de una matriz o vector por un escalar con UNA sola operacin).
Dibuje e indique los valores de decisin y reconstruccin de un cuantificador uniforme simtrico (sin nivel de reconstruccin igual a 0) de 2 bits, y valor de sobrecarga V.
Dibuje e indique los valores de decisin y reconstruccin de un cuantificador uniforme simtrico de 3 bits, y valor de sobrecarga V.
Calcule los cdigos, valores de reconstruccin y error de las siguientes muestras: o V1(2)=0.7507 voltios con valor de sobrecarga 2 voltios (cuantificador 2 bits)
A partir de las funciones implementadas anteriormente, desarrolle un script Matlab con nombre Ejercicio1.m en el que se lea el fichero de audio sample_audio.mat y se lleve a cabo su cuantificacin y reconstruccin (con 8 bits y valor de sobrecarga adecuado para evitar el error en el proceso de cuantificacin por saturacin) y dibuje las grficas correspondientes a las seales cuantificada y reconstruida, indicando los valores de los ejes. Dibuje las grficas obtenidas: o Seal original
z(t)
Hist z(t)
Seal cuantificada
z(qt)
Hist zq(t)
Seal reconstruida
z(wt)
Hist zw(t)
Seal de error
error(t)
Hist error(t)
uniforme, se cuantifica el rango mediante 16 intervalos de cuantificacin uniformes. La codificacin consiste en asignar un bit al signo (1 si positivo), 3 bits al segmento, y 4 bits al intervalo de cuantificacin.
2.1.2
Para el desarrollo del codificador G711 se implementarn por separado las funciones para calcular los valores para el signo, intervalo y segmento. Lleve a cabo la implementacin de dichas funciones como se indica a continuacin:
function [signos] = getSigno (Snorm) Recibe: o Devuelve: Snorm == Secuencia de audio grabada NORMALIZADA.
1 , Menor que 0
0.
Escriba la funcin getSegmento que devuelve los ndices de los segmentos a los que pertenece una coleccin de muestras normalizadas (para ello deber definir a mano dentro de la funcin los lmites para cada segmento)
function [segmentos] = getSegmento (Snorm) Recibe: o Devuelve: o segmentos == Segmentos de las muestras de entrada: de 0 a 7. Snorm == Secuencia de audio grabada NORMALIZADA.
A partir de la informacin de a qu segmento pertenece cada muestra y haciendo uso de la funcin implementada anteriormente getIndicesUniformes implemente la funcin getIntervalo que devolver el resultado de realizar una cuantificacin uniforme con 16 niveles (4 bits) de cada muestra sobre el segmento que le corresponda:
function [intervalos] = getIntervalo (Snorm,segmentos)2 Recibe: o o Devuelve: o intervalos == Intervalos de las muestras de entrada: de 0 a 15. Snorm == Secuencia de audio grabada NORMALIZADA. segmentos == Segmentos de las muestras de entrada: de 0 a 7.
Implemente una funcin que calcule los valores de cuantificacin correspondientes a una coleccin de
muestras mediante el uso de las tres funciones anteriores y que respete la siguiente sintaxis:
function [Scuan] = getCuantificacionG711 (Snorm) Recibe: o Devuelve: Snorm == Secuencia de audio grabada NORMALIZADA.
Escriba el cgigo de una funcin PCMG711 en la que se lleve a cabo el proceso de normalizacin y cuantificacin de una seal mediante las funciones implementadas anteriormente:
function [Scuan] = PCMG711 (S,v) Recibe: o o Devuelve: S == Secuencia de audio grabada. v == Valor de sobrecarga.
Haciendo uso de los conceptos aplicados para el proceso de codificacin implemente una funcin decodificaG711 que lleve a cabo la decodificacin de una seal cuantificada previamente. En caso de considerarlo necesario implemente las funciones auxiliares que considere oportuno. La sintaxis de la funcin ser la siguiente:
function [Srecon] = decodificaG711 (Scuan,v) Recibe: o o Devuelve: o Srecon == Seal reconstruida. Scuan == ndices de los intervalos de entrada para la seal de entrada. v == Valor de sobrecarga.
Recomendaciones: Elija un par de valores de muestras e inicie el desarrollo probando sobre una seal ficticia de una muestra (cuyo resultado haya calculado tericamente). La secuencia de entrada S se obtendr mediante la funcin Leyendo.m La funcin getCuantificacionG711 espera una seal de entrada que vare entre -1 y 1.
Calcule analticamente los cdigos, valores de reconstruccin y error de las siguientes muestras: o V1(G)=0.7507 voltios con valor de sobrecarga 2 voltios
Desarrolle un script Matlab con nombre Ejercicio2.m en el que se lea el fichero de audio sample_audio.mat y se lleve a cabo su cuantificacin y reconstruccin mediante las funciones implementadas y dibuje las grficas correspondientes a las seales cuantificada y reconstruida, indicando los valores de los ejes. Dibuje las grficas obtenidas: o Seal original
z(t)
Hist z(t)
Seal cuantificada
z(qt)
Hist zq(t)
Seal reconstruida
z(wt)
Hist zw(t)
Seal de error
error(t)
Hist error(t)
10
secuencia == Vector fila en el que cada posicin se corresponde con un bit de la secuencia Scuan en formato binario.
Desarrolle un script Matlab con nombre Ejercicio3.m en el que se lea el fichero de audio sample_audio.mat y se lleve a cabo la codificacin uniforme con 4 y 8 bits y la G711 aplicando la funcin getSecuenciaBits a los resultados obtenidos. Comente los resultados:
11