Códigos lineales
En esta sesión vamos a ver las definiciones básicas de los códigos lineales. Recordemos que un código puede venir dado por una matriz generatriz (traspuesta en SAGE) o por una matriz de control.
Vamos a empezar por considerar un código sobre .
Podemos definir un código a partir de su matriz generatriz:
Veamos algunos parámetros del código:
C es un subconjunto de :
También podemos calcular una matriz de control a partir de .
Como hemos visto en teoría, si es una matriz generatriz y es una matriz de control, necesariamente debe ser Recordemos que en SAGE, la matriz es la traspuesta de nuestra matriz :
Tambiés es posible construir un código a partir de la matriz de control:
Veamos si es posile decodificar una palabra recibida (suponiendo que hemos cometido un sólo error):
SAGE puede usar los dos métodos de decodificación que hemos visto en clase: método del síndrome y método de distancia mínima. En general, ambos tienen que dar la misma decodificación:
Pero si la palabra recibida tiene más de errores, pasan cosas malas:
La suma directa de subespacios es un subespacio, así que podemos sumar códigos:
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-3-ae49577c5322> in <module>()
----> 1 C1=codes.random_linear_code(F,Integer(10),Integer(4))
2 C2=codes.random_linear_code(F,Integer(8),Integer(3))
3 D=C1.direct_sum(C2)
4 D
NameError: name 'F' is not defined
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-1-57b8d7453841> in <module>()
----> 1 D
NameError: name 'D' is not defined
Ejercicio 1 Construya una función parametros(C) que dado un código C devuelva todos los parámetros que hemos dado en clase: , , y redundancia.
Ejercicio 2 Consideramos el código lineal sobre , definido por la matriz generatriz (por columnas) Halle los parámetros del código y una matriz de control. Calcular todos los síndromes con líder de peso menor o igual que . Si recibimos la palabra y sabemos que se han cometido, a lo sumo, dos errores, ¿cuál es la palabra enviada y cuál el error cometido?
La idea de este ejercicio es aprender a calcular los síndromes. Para ello, puede empezar por construir la función peso(v) a idea de este ejercicio es aprender a calcular los síndromes. Para ello, puede empezar por construir la función peso(v) que calcule el peso del vector v. A continuación, se pueden seleccionar los vectores de peso menor o igual que dos con una comprensión de lista:
y calcular los posibles síndromes.
Ejercicio 3 Por el procedimiento de generar códigos aleatorios (muchos, al menos 100), ¿cuál es el mejor código lineal de longitud 8 y dimensión 5 sobre que puede conseguir? (En términos de distancia mínima, tasa de transmisión, etc.) Compare con el mejor código conocido en www.codetables.de
(Usa la función codes.RandomLinearCode(8,3,F2)