Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import numpy as np
- def adamar(data):
- length = len(data)
- adamar2_2 = [[1, 1], [1, -1]]
- adamar_data = [[1, 1], [1, -1]]
- #создаем матрицу адамара
- for i in range(length-1):
- adamar_data = np.kron(adamar_data,adamar2_2)
- # меняем или нет матрицу в зависимости от нашего сообщения
- if int(data,2)>(pow(2,length)/2):
- for i in range(pow(2,length)):
- for j in range(pow(2,length)):
- if adamar_data[i][j] == -1:
- adamar_data[i][j]=1
- else:
- adamar_data[i][j] = -1
- #for i in adamar_data:
- # print(i)
- print("Матрица Адмамара")
- print(adamar_data)
- message = [] # сообщение которое получаем c 0
- message_adamar = []# сообщение которое получаем, просто копируем из матрицы адамара, но при этом там будут -1 и 1
- # заполняем два вектора
- for j in range(pow(2, length)):
- if adamar_data[int(data,2)][j] == -1:
- message.append(0)
- message_adamar.append(-1)
- else:
- message.append(1)
- message_adamar.append(1)
- message_adamar[7] = 1 #допускаем ошибку
- print("Сообщение которое нам пришло. В нем присутствует ошибка")
- print(message)
- print("Вектор F из которого восстанавляваем сообщение")
- F = adamar_data.dot(message_adamar)
- print(F)
- # ищем индекс максимального элемента
- max_number = -1
- for i in range(len(F)):
- if abs(F[i])>= max_number:
- max_number_position = i
- max_number = abs(F[i])
- if max_number_position>0:
- recieved =str(bin(max_number_position)) # переводим позицию в строку и двоичную систему
- print("Отправленное сообщение = "+recieved[2:])
- else:
- print(str(bin(max_number_position)))
- data = '10011'
- adamar(data)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement