Codificación de Canal PRÁCTICA 7 ( 1 sesión) Laboratorio de Señales y Comunicaciones (LSC) 3er curso, Ingeniería de Telecomunicación Curso 2005 – 2006 Javier Ramos López, Fernando Díaz de María, Fernando Pérez Cruz y David Luengo García 1. Objetivos Los principales objetivos de esta práctica son los siguientes: • Construir códigos de canal capaces de proporcionar una cierta protección frente a errores: códigos de Hamming. • Entender lo que es el síndrome y como se realiza la decodificación por síndrome. • Aprender lo que es la ganancia de codificación y conocer las diferentes formas que existen para su cálculo. 2. Cuestionario previo 2.1. Rellene las tablas de los ejercicios 3.1 y 3.5 en las que se relaciona el síndrome obtenido con cada uno de los posibles vectores de error. 2.2. Desarrolle sobre el papel la función decod necesaria para el ejercicio 3.1. 2.3. Desarrolle sobre el papel las funciones encod2 y sindrome2 (versiones modificadas de encod y sindrome) necesarias para el nuevo código del ejercicio 3.5. 2.4. Una fórmula aproximada para la probabilidad de error de una señal codificada mediante un código de Hamming es la siguiente: ( pc = pe 1 − (1 − pe ) n −1 ), donde pe es la probabilidad de error antes de codificar, pc es la probabilidad de error tras la codificación, y n es el número de bits de salida por cada bloque del codificador. Suponiendo que la probabilidad de error sin codificar viene dada por ⎛ 2 Eb pe = Q⎜⎜ ⎝ N0 ⎞ ⎟, ⎟ ⎠ calcule la probabilidad de error codificando con un código de Hamming (7, 4) y con un código de Hamming (15, 11) para Pe = 0.0003, 0.001, 0.003, 0.01, 0.03, 0.1 y 0.3 en dos casos: a) Cuando se mantiene la tasa binaria, disminuyendo por tanto la tasa de información real transmitida (esto es, como en el ejercicio 3.2). b) Cuando se aumenta la tasa binaria para mantener la tasa de información transmitida (es decir, como en el ejercicio 3.3). 3. Codificación de Canal Ejercicio 3.1. Desarrolle una función que decodifique una secuencia de bits con un código de Hamming (n = 15 y k = 11), m = decod(s,r). Para ello se dispone de la función c = encod(m) que realiza la codificación con la matriz generadora, ⎡1 ⎢0 ⎢ ⎢0 ⎢ ⎢0 ⎢0 ⎢ G = ⎢0 ⎢0 ⎢ ⎢0 ⎢ ⎢0 ⎢0 ⎢ ⎢⎣0 0 0 0 0 0 0 0 0 0 0 0 0 1 1⎤ 1 0 0 0 0 0 0 0 0 0 0 1 0 1⎥⎥ 0 1 0 0 0 0 0 0 0 0 0 1 1 0⎥ ⎥ 0 0 1 0 0 0 0 0 0 0 0 1 1 1⎥ 0 0 0 1 0 0 0 0 0 0 1 0 0 1⎥ ⎥ 0 0 0 0 1 0 0 0 0 0 1 0 1 0⎥ = [I P ] , 0 0 0 0 0 1 0 0 0 0 1 0 1 1⎥ ⎥ 0 0 0 0 0 0 1 0 0 0 1 1 0 0⎥ ⎥ 0 0 0 0 0 0 0 1 0 0 1 1 0 1⎥ 0 0 0 0 0 0 0 0 1 0 1 1 1 0⎥ ⎥ 0 0 0 0 0 0 0 0 0 1 1 1 1 1⎥⎦ cuya primera parte es una matriz identidad, de modo que los 11 primeros bits de c son los de m (este es un ejemplo de un código sistemático), y de una función que calcula los bits de síndrome s, s = sindrome(c), mediante la matriz H mostrada a continuación. s E 0000 000000000000000 0001 ... ... ... 1111 ... ⎡0 ⎢0 H=⎢ ⎢1 ⎢ ⎣1 0 0 0 1 1 1 1 1 1 1 1 0 0 0⎤ 1 1 1 0 0 0 1 1 1 1 0 1 0 0⎥⎥ = PT 0 1 1 0 1 1 0 0 1 1 0 0 1 0⎥ ⎥ 1 0 1 1 0 1 0 1 0 1 0 0 0 1⎦ [ I ] Para realizar la decodificación va a necesitar obtener el error asociado a cada síndrome. Por lo tanto, se le pide que rellene de forma previa a la práctica la Tabla 1. Compruebe que cada síndrome distinto del vector nulo se corresponde con una de las columnas de H, y que la posición de la columna indica el bit erróneo. Esta información va a resultar imprescindible para realizar la función de decodificación. Nota: Para llevar a cabo el decodificador se recomienda el uso de las funciones ser2par2 y par2ser2, que son variantes de las ya empleadas en la práctica anterior. Síndrome Vector de error 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 Tabla 1: Síndrome y vector de error asociado para el código de Hamming (15, 11). Ejercicio 3.2. Genere una secuencia de 110000 bits aleatorios y equiprobables. Dese cuenta de que esto lo puede hacer con la función chan_bin de la sesión anterior (indique cómo). Codifique dichos bits con el codificador de canal, introdúzcalos en el canal discreto equivalente implementado por chan_bin con Pe = 0.0003, 0.001, 0.003, 0.01, 0.03, 0.1 y 0.3 (promedie 100 realizaciones para obtener resultados fiables), y calcule la probabilidad de error de bit entre la entrada y la salida de chan_bin? Introduzca la salida de chan_bin en el decodificador de canal y compruebe la probabilidad de error de bit a la salida. Obtenga la razón entre el número de errores a la salida de decod y a su entrada. ¿Qué ocurre cuando crece Pe?¿Qué significa esto? Ejercicio 3.3. En el ejercicio anterior se pudo comprobar que al emplear la codificación de canal los errores producidos por el canal se reducían de forma muy significativa. En este ejercicio se va a explorar un método alternativo de medir la calidad del sistema codificado y sin codificar. Suponga que la probabilidad de error del canal de comunicaciones es Pe = Q ( 2 Eb N 0 ) , y que para mantener la tasa de bits de información por segundo se ha reducido el tiempo de bit, de modo que la probabilidad de error se incrementa en el canal a Pe = Q( 2 Eb N 0 k n ) . Genere 110000 bits aleatorios, codifí- quelos con encod, y páselos por un canal discreto equivalente para diversos valores de Eb N 0 entre 0 y 10 dB (utilice un paso de 1 dB) usando la probabilidad de error dada por la segunda fórmula. Decodifique los bits obtenidos a la salida del canal y calcule la probabilidad de error (promedie 100 realizaciones para obtener resultados fiables). Represente gráficamente, empleando la función semilogy, la probabilidad de error a la salida del decodificador en función de Eb N 0 (en dBs) y dibuje sobre ésta la probabilidad de error del sistema sin codificar, empleando la primera fórmula de probabilidad de error. ¿Observa algún resultado “extraño”? En caso afirmativo. ¿A qué cree que puede ser debido? Ejercicio 3.4. La ganancia de codificación se define como el valor M por el que hay que multiplicar Eb N 0 (en unidades naturales) para que las probabilidades de error del sistema sin codificación y con codificación de canal produzcan la misma BER. Calcule dicha ganancia para los resultados de los ejercicios 3.2 y 3.3 (promediando 100 realizaciones como siempre) y represéntela en decibelios. ¿Cómo se comporta la ganancia de codificación en cada caso? ¿Existen diferencias apreciables entre ambos métodos de medida? En caso afirmativo, ¿a qué cree que son debidas? Ejercicio 3.5. Repita los Ejercicios 3.1 a 3.4 para un código de Hamming con n = 7 y k = 4, cuyas matrices G y H se muestran a continuación (genere 80000 bits en este caso, promediando de nuevo 100 realizaciones). Para ello tendrá que modificar las funciones encod y sindrome para ajustarlas a este código (desarrolle dos nuevas funciones encod2 y sindrome2), y rellenar la Tabla 4 (página siguiente) con los vectores de error asociados a cada síndrome en este caso. ⎡1 ⎢0 G=⎢ ⎢0 ⎢ ⎣0 0 1 0 0 0 0 1 0 0 0 0 1 0 1 1 1 1 0 1 1 1⎤ 1⎥⎥ 0⎥ ⎥ 1⎦ ⎡0 1 1 1 1 0 0 ⎤ H = ⎢⎢1 0 1 1 0 1 0⎥⎥ ⎢⎣1 1 0 1 0 0 1⎥⎦ A la vista de los resultados de la práctica, ¿cuál de los dos códigos ofrece una mayor protección frente a errores? Un código de Hamming (127, 120), ¿ofrecería mayor o menor protección que los dos anteriores? Síndrome Vector de error 000 001 010 011 100 101 110 111 Tabla 2: Síndrome y vector de error asociado para el código de Hamming (7, 4).