Logo Studenta

CRC

Esta es una vista previa del archivo. Inicie sesión para ver el archivo original

CRC/CRC.pdf
Redes locales 
 
CRC (Cyclic Redundancy Check) 
 
 
 
Presentado por: 
Roosevelt Daniel Santos Vanegas 
Sebastián Ricardo Cárdenas 
 
 
Presentado a: 
RICHARD ADOLFO CRAWFORD VIDAL 
 
 
 
Universidad de Córdoba 
 
Ingeniería de Sistemas 
 
 
Montería - 2023 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
CRC/index (1).py
#Primero debemos establecer la funcion XOR con el fin de identificar bit a bit dependiendo del numero al que realizaremos el calculo
def xor(a, b):
 """Función de operación XOR bit a bit"""
 result = []
 for i in range(1, len(b)):
 if a[i] == b[i]:
 result.append('0')
 else:
 result.append('1')
 return ''.join(result)
#En esta ocasion estableceremos la funcion para verificar el CRC 
def crc_check(data, generator):
 """Función para verificar el CRC"""
 data_len = len(data)
 generator_len = len(generator)
 remainder = data[:generator_len]
 for i in range(generator_len, data_len):
 if remainder[0] == '1':
 remainder = xor(generator, remainder) + data[i]
 else:
 remainder = xor('0' * generator_len, remainder) + data[i]
 if remainder[0] == '1':
 remainder = xor(generator, remainder)
 else:
 remainder = xor('0' * generator_len, remainder)
 if '1' in remainder:
 return False
 else:
 return True
#Esta funcion como lo dice espara calcular el residuo del CRC para conocer si se
#da el resultado esperado o no segun el residuo soltado en el calculo de la operacion XOR
def crc_remainder(data, generator):
 """Función para calcular el residuo del CRC"""
 data_len = len(data)
 generator_len = len(generator)
 remainder = data[:generator_len]
 for i in range(generator_len, data_len):
 if remainder[0] == '1':
 remainder = xor(generator, remainder) + data[i]
 else:
 remainder = xor('0' * generator_len, remainder) + data[i]
 if remainder[0] == '1':
 remainder = xor(generator, remainder)
 else:
 remainder = xor('0' * generator_len, remainder)
 return remainder
#Segun la posicion como dice, se reemplazaran los bit segun el residuo que nos arroje,
#para su correcta agregacion de R para un residuo posterior satisfactorio y resultado neto obtenido
def replace_with_remainder(data, remainder, n):
 """Función para reemplazar los bits desde la posición n con el residuo"""
 data_list = list(data)
 for i in range(len(remainder)):
 data_list[n + i] = remainder[i]
 return ''.join(data_list)
#Aqui establecemos n ceros que dependeran de los bits o de R que nos proveera el sujeto,
#donde sera n-1 lo que se le agregara a la cadena de bit segun R
def add_zeros(data, n, m):
 """Función para agregar n ceros en la posición m de la cadena de datos"""
 data_list = list(data)
 for i in range(n):
 data_list.insert(m, '0')
 return ''.join(data_list)
# Ejemplo de uso con las instrucciones y
# datos solicitados necesarios para correr el ejercicio de prueba
done = False
cont = 0
#Ingresamos el bit por el cual realizaremos la prueba CRC
data = input("Ingrese la cadena de bits de datos: ")
#Indicamos los bits por los cuales el bit de datos sera dividido
generator = input("Ingrese la cadena de bits del generador CRC: ")
data_with_zeros = add_zeros(data, len(generator)-1, len(data))
data = data_with_zeros
while not done:
 # Datos de entrada en forma de cadenas de bits
 
 # Se calcula el residuo del CRC
 remainder = crc_remainder(data, generator)
 print("El residuo del CRC es:", remainder)
 data_with_remainder = replace_with_remainder(data, remainder, len(data) - len(remainder) )
 
 # Verificamos el CRC para que nos arroje si hubo errores o no
 # en la trasmision segun lo antes mencionado
 if crc_check(data, generator):
 print("El CRC es correcto. No se detectaron errores en la transmisión.")
 print("Data final: ", data)
 done = True 
 else:
 print("El CRC es incorrecto. Se detectaron errores en la transmisión.")
 print("Data con el residuo: ", data_with_remainder)
 done = False
 data = data_with_remainder
 cont = cont+1
 if cont >4: done = True

Continuar navegando