Advertisement
Stingaleed

Adamar_codes

May 23rd, 2022
658
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import numpy as np
  2. def adamar(data):
  3.     length = len(data)
  4.     adamar2_2 = [[1, 1], [1, -1]]
  5.     adamar_data = [[1, 1], [1, -1]]
  6.     #создаем матрицу адамара
  7.     for i in range(length-1):
  8.         adamar_data = np.kron(adamar_data,adamar2_2)
  9.     # меняем или нет матрицу в зависимости от нашего сообщения
  10.     if int(data,2)>(pow(2,length)/2):
  11.         for i in range(pow(2,length)):
  12.             for j in range(pow(2,length)):
  13.                 if adamar_data[i][j] == -1:
  14.                     adamar_data[i][j]=1
  15.                 else:
  16.                     adamar_data[i][j] = -1
  17.     #for i in adamar_data:
  18.     #   print(i)
  19.     print("Матрица Адмамара")
  20.     print(adamar_data)
  21.  
  22.     message = [] # сообщение которое получаем c 0
  23.     message_adamar = []# сообщение которое получаем, просто копируем из матрицы адамара, но при этом там будут -1 и 1
  24.     # заполняем два вектора
  25.     for j in range(pow(2, length)):
  26.             if adamar_data[int(data,2)][j] == -1:
  27.                 message.append(0)
  28.                 message_adamar.append(-1)
  29.             else:
  30.                 message.append(1)
  31.                 message_adamar.append(1)
  32.     message_adamar[7] = 1  #допускаем ошибку
  33.     print("Сообщение которое нам пришло. В нем присутствует ошибка")
  34.     print(message)
  35.     print("Вектор F из которого восстанавляваем сообщение")
  36.     F = adamar_data.dot(message_adamar)
  37.     print(F)
  38.  
  39.     # ищем индекс максимального элемента
  40.     max_number = -1
  41.     for i in range(len(F)):
  42.         if abs(F[i])>= max_number:
  43.             max_number_position = i
  44.             max_number = abs(F[i])
  45.     if max_number_position>0:
  46.         recieved =str(bin(max_number_position)) # переводим позицию в строку и двоичную систему
  47.         print("Отправленное сообщение = "+recieved[2:])
  48.     else:
  49.         print(str(bin(max_number_position)))
  50.  
  51.  
  52. data = '10011'
  53. adamar(data)
Advertisement
RAW Paste Data Copied
Advertisement