Televisión – Plan 2010 ETSIT-UPM – Curso 2016-17 Trabajos propuestos sobre tema 2 Se debe realizar obligatoriamente el trabajo propuesto en la primera sección y uno de los propuestos en la segunda. Se debe entregar un fichero PDF llamado “TVtrabajo2.pdf” con una memoria que responda en detalle a las cuestiones planteadas e incluya gráficos, imágenes, etc., más un archivo llamado “TVtrabajo2.zip” (o “TVtrabajo2.rar”) con el código desarrollado, a través de la página de TV del repositorio Moodle de la UPM antes del domingo 2016-10-16 @ 23:59:59 CEST. 0. Consideraciones previas • El objetivo de estos ejercicios es construir, experimentar y razonar sobre un pequeño sistema de codificación. No se pretende una implementación eficiente sino fácil de comprender y modificar. Se recomienda desarrollar en MATLAB el código, que se usará para resolver cualquier posible duda sobre la memoria. Si se utiliza otro entorno de programación, debería disponer de un buen soporte para la representación de gráficos (e.g., Python, Mathematica, Maple). • El enunciado incluye una serie de cuestiones cuya respuesta es opcional, y que pueden ser más complejas o laboriosas, por lo que se recomienda abordarlas una vez que se han cumplimentado todos los apartados obligatorios. Dicho esto, también se advierte de que la calificación dependerá del número de apartados resueltos (y de la calidad de la memoria en general), por lo que los apartados opcionales servirán, en su caso, para mejorar la nota. • En todo caso, tenga en cuenta que el resultado de un apartado puede ser una pieza fundamental para la resolución del siguiente. Es imprescindible que verifique que la construcción es correcta. Para ello debe contrastar los resultados obtenidos con lo que se ha explicado en teoría y poder justificar las diferencias, si es que existen. • Para la confección de la memoria, pueden utilizarse las imágenes de prueba contenidas en http://www.gti.ssr.upm.es/tv/pix/Lena.rar. 1. Cuantificador 1. Construir un cuantificador uniforme simétrico sin memoria. Dicho cuantificador debe recibir como argumento la señal a cuantificar, el número de bits del cuantificador y el tamaño del escalón de cuantificación, y entregar el índice del intervalo cuantificado. Ejemplo: i = Q(Delta, N, x). 2. Construir el descuantificador correspondiente. Ejemplo: y = DQ(Delta, N, i). 3. [Opcional: Verificar el conjunto cuantificador+descuantificador introduciendo muestras de una señal con distribución uniforme. Calcular la distorsión de sobrecarga y el ruido granular teóricos, y verificar que los valores obtenidos experimentalmente son compatibles con ellos.] 4. Representar gráficamente el resultado de cuantificar un periodo de una señal sinusoidal cuyo rango coincida con el del cuantificador para 2, 4 y 8 b. 5. [Opcional: Calcular el ruido de cuantificación para la señal anterior y estimar, en base a ese ruido, la distribución espectral del ruido de cuantificación para cada uno de los casos anteriores.] 2. Codificador Una vez construido el [des]cuantificador de la sección anterior, común a los dos [de]codificadores que se proponen a continuación, se debe desarrollar uno de ellos. 2.1 Codificador diferencial 6. Calcular un predictor óptimo de orden 1 basado en la muestra anterior de la misma fila utilizando las estadísticas de la imagen de prueba. 7. Construir un codificador diferencial sin cuantificador utilizando el predictor anterior. Si una muestra no está disponible (e.g., por estar fuera de los límites de la imagen), el predictor utilizará un valor arbitrario (e.g., 128). [Opcional: ¿Cuál es el mejor valor y por qué?] 8. Aplicar el codificador diferencial sobre la imagen y obtener el histograma de frecuencias del error de predicción, dividiendo su rango en intervalos de anchura unidad. Justificar el resultado obtenido. 9. Construir un codificador/decodificador diferencial utilizando el predictor anterior, pero sin cuantificador. Comprobar que es posible la decodificación sin pérdidas. 10. Construir un codificador diferencial combinando el cuantificador y el predictor óptimo anterior. Representar la relación S/N de la imagen obtenida para 1, 2, ... 8 b/muestra, y extraer conclusiones. 11. Repetir el experimento anterior utilizando como predictor la muestra precedente en vez del predictor óptimo, y extraer conclusiones. 12. [Opcional: Calcular un código Huffman para el codificador diferencial basado en la muestra precedente y un cuantificador de 4 bits. Calcular la relación de compresión que puede alcanzarse.] 2.2 Codificador de transformadas 6. Construir la matriz de la transformación unidimensional (DCT-II) de orden 8. Verificar que la transformada es unitaria y ortogonal. 7. Construir funciones que calculen la DCT bidimensional de un bloque de tamaño 8×8 y su inversa utilizando la matriz anterior. Verificar que la transformación es invertible. 8. Descomponer la imagen de prueba en un mosaico de sub-imágenes de tamaño 8×8. Aplicar las transformadas directa e inversa obtenidas en el apartado anterior sobre las sub-imágenes, y reconstruir la imagen de prueba. Explicar el resultado obtenido. 9. Utilizando las matrices obtenidas en el apartado anterior, representar el histograma de los coeficientes de las transformadas de posiciones (0,0), (0,1), (1,0), (2,2), (3,3) y (7,7), donde el primer índice representa el número de la fila y el segundo el de la columna, ambos numerados a partir de 0. Razonar si deben utilizarse diferentes cuantificadores o puede emplearse siempre el mismo. 10. [Opcional: Utilizar las estadísticas de la imagen de prueba para asignar el número de bits a cada cuantificador.] 11. Utilizando el cuantificador uniforme desarrollado previamente y el esquema de asignación de bits que se considere más apropiado, construir un codificador/decodificador de transformadas y aplicarlo sobre la imagen de prueba. 12. Calcular la relación S/N obtenida para la imagen de prueba para 4, 2, 1, 0,5 y 0,1 bpp.