Descarga la aplicación para disfrutar aún más
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
Compartir