Advertisement
Guest User

Untitled

a guest
May 26th, 2018
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 23.93 KB | None | 0 0
  1. import random
  2. import commpy.channelcoding as cc
  3. import numpy as np
  4. import reedsolo as rs
  5. import cv2
  6. from matplotlib import pyplot as plt
  7.  
  8.  
  9. def generate(n):
  10.     code = [random.randint(0, 1) for i in range(n)]
  11.     return code
  12.  
  13.  
  14. def set_of_bites_to_list_of_bits(data):  # '100..0' = '1','0','0', ... '0',  set of 8bits as individual bit
  15.     list = []
  16.     for i in range(len(data)):
  17.         for j in str(data[i]):
  18.          list.append(int(j))
  19.  
  20.     return list
  21.  
  22.  
  23. def list_of_bits_to_set_of_bits(data):  # '1','0','0', ... '0' = '100..0'  join bits as set of 8
  24.     list = []
  25.     for i in range(0, int(len(data) / 8)):
  26.         string = ""
  27.         for j in range(0, 8):
  28.             string = string + str(data[i*8 + j])
  29.         list.append(format(int(string, 2), '08b'))
  30.     return list
  31.  
  32.  
  33. def bsc(list, p):
  34.     random.seed(9000)
  35.     bsc_list = []
  36.     for i in range(0, len(list)):
  37.         string = ""
  38.         list_sep = set_of_bites_to_list_of_bits(list[i])
  39.         for j in range(0, 8):
  40.             if (random.randint(0, 100) <= p * 100):
  41.                 if (list_sep[j] == 0):
  42.                     string = string + "1"
  43.                 else:
  44.                     string = string + "0"
  45.             else:
  46.                 string = string + str(list_sep[j])
  47.         bsc_list.append(format(int(string, 2), '08b'))
  48.     return bsc_list
  49.  
  50.  
  51. def coder(list):  # 0 = 000, 1 = 111
  52.     code = []
  53.     for i in range(0, len(list)):
  54.         if (list[i] == 0):
  55.             code.append(0)
  56.             code.append(0)
  57.             code.append(0)
  58.         else:
  59.             code.append(1)
  60.             code.append(1)
  61.             code.append(1)
  62.     return code;
  63.  
  64.  
  65. def decoder(list):  # 001 = 0, 101 = 1...
  66.     code = []
  67.     count = 0
  68.     for i in range(0, len(list) + 1):
  69.         if (i % 3 == 0 and i != 0):
  70.             if (count > 1):
  71.                 code.append(0)
  72.             else:
  73.                 code.append(1)
  74.             count = 0
  75.         if (i < len(list) and list[i] == 0):
  76.             count += 1
  77.     return code
  78.  
  79.  
  80. def change_int(int):  # 0 = 1, 1 = 0
  81.     return 1 if int == 0 else 0
  82.  
  83.  
  84. def gilbert(list, good, bad):
  85.     random.seed(9000)
  86.     code = []
  87.     flag_good = True
  88.     for i in range(0, len(list)):
  89.         if (flag_good):
  90.             if (random.randint(0, 99) > good * 100):
  91.                 code.append(change_int(list[i]))
  92.                 flag_good = False
  93.             else:
  94.                 code.append(list[i])
  95.         else:
  96.             if (random.randint(0, 99) < bad * 100):
  97.                 code.append(change_int(list[i]))
  98.             else:
  99.                 code.append(list[i])
  100.                 flag_good = True
  101.  
  102.  
  103.     return code
  104.  
  105. def read(path):  # read img
  106.     with open(path, "rb") as imageFile:
  107.         file = imageFile.read()
  108.         bytes = bytearray(file)
  109.     return bytes
  110.  
  111.  
  112. def byte_to_bit(data):  # data - list of bytes (0 : 255), 5 = 00000101, byte into 8 bits long
  113.     new_data = []
  114.     for i in range(0, len(data)):
  115.         new_data.append(format(data[i], '08b'))
  116.     return new_data
  117.  
  118.  
  119. def bit_to_byte(data):  # data - list of numbers 8 bits long, 00000101 = 5
  120.     new_data = []
  121.     for i in range(0, len(data)):
  122.         new_data.append(int(str(data[i]), 2))
  123.     return new_data
  124.  
  125.  
  126. def save(data, name):  # data - list of bytes(0 : 255), save as img
  127.     f = open(name+".bmp", "wb")
  128.     f.write(bytearray(data))
  129.  
  130.     f.close()
  131.  
  132. def diff(data1, data2):
  133.     counter = 0
  134.     for i in range(0, len(data1)):
  135.         if(data1[i] != data2[i]):
  136.             counter = counter + 1
  137.     return counter
  138.  
  139. # def diff(data1, data2, code_name):
  140. #     # tmr, hamming, interleave, viterbieg, turbocodes, LDPC, RS
  141. #     counter = 0
  142. #     for i in range(0, len(data1)):
  143. #         if(data1[i] != data2[i]):
  144. #             counter += 1
  145. #     print(code_name + " Error counter: " + str(counter))
  146.  
  147. def przeplot(string_bits):
  148.  wynik = []
  149.  for i in range(int(len(string_bits)/8)):
  150.   for k in range(8):
  151.    wynik.append(string_bits[int(len(string_bits)/8)*k+i])
  152.  return wynik
  153.  
  154. def rozplot(string_bits):
  155.  wynik = []
  156.  for i in range(8):
  157.   for k in range(int(len(string_bits)/8)):
  158.    wynik.append(string_bits[i+8*k])
  159.  return wynik
  160.  
  161.  
  162.  
  163. class Hamming:
  164.     G = np.array([[1, 1, 0, 1], [1, 0, 1, 1], [1, 0, 0, 0], [0, 1, 1, 1], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]])
  165.     H = np.array([[1, 0, 1, 0, 1, 0, 1], [0, 1, 1, 0, 0, 1, 1], [0, 0, 0, 1, 1, 1, 1]])
  166.     H = H.transpose()
  167.     list_of_data = [0, 0, 0, 0]   #i1, i2, i3, i4     wyznaczamy w ktorym miejscu sa bity, ktore zawieraja dane
  168.     diff = 0
  169.     for i in range(0, len(G)):
  170.         count = 0
  171.         for j in range(0, len(G[i])):
  172.             if(G[i][j] == 1):
  173.                 count = count + 1
  174.         if(count == 1):
  175.             for j in range(0, len(G[i])):
  176.                 if (G[i][j] == 1):
  177.                     list_of_data[j] = i
  178.  
  179.     def code(temp_data):
  180.      data = []
  181.      for i in range(0, len(temp_data)):
  182.       for j in range(0, len(temp_data[i])):
  183.              data.append(int(temp_data[i][j]))
  184.      list = []
  185.      length = int(len(data)/4)
  186.      for i in range(0, length*4, 4):                                   # dzielimy dane na macierze po 4 bity
  187.          fragment = np.array([data[i], data[i+1], data[i+2], data[i+3]])
  188.          list.append(fragment)
  189.      Hamming.diff = len(data) - length*4
  190.      if(Hamming.diff != 0):                                                   # przypadek, kiedy ilosc bitow nie dzieli sie
  191.          temp_data = []
  192.          temp_diff = Hamming.diff                                              # przez 4 bez reszty,
  193.          for i in range(length * 4, length * 4 + 4):                  # brakujace bity wypelniamy zerami
  194.              if(temp_diff > 0):
  195.                  temp_diff = temp_diff - 1
  196.                  temp_data.append(data[i])
  197.              else:
  198.                  temp_data.append(0)
  199.          fragment = np.array([temp_data[0], temp_data[1], temp_data[2], temp_data[3]])
  200.          list.append(fragment)
  201.                                                              # list zawiera teraz liste macierze o wymiarach 4x1 (czyli wektor)
  202.      for i in range(0, len(list)):
  203.       list[i] = list[i].dot(Hamming.G.transpose())                          # przemnazamy kazda macierz 4x1 z macierza G
  204.       for j in range(0, len(list[i])):
  205.           list[i][j] = list[i][j] % 2                           # od razu sprawdzamy parzystosc
  206.      temp_list = []
  207.      for i in range(0, len(list)):
  208.          for j in range(0, len(list[i])):
  209.              temp_list.append(list[i][j])
  210.      return temp_list
  211.  
  212.  
  213.     def decode(temp_list):
  214.      list = []
  215.      for i in range(0, len(temp_list)):
  216.         for j in range(0, len(temp_list[i])):
  217.                 list.append(int(temp_list[i][j]))
  218.      data = []
  219.      for i in range(0, len(list), 7):
  220.          data.append(np.array([list[i], list[i+1], list[i+2], list[i+3], list[i+4], list[i+5], list[i+6]]))
  221.      sindrom = []
  222.      sindrom_num = []
  223.      for i in range(0, len(data)):
  224.       string = ""
  225.       sindrom.append(data[i].dot(Hamming.H))
  226.       for j in range(0, len(sindrom[i])):
  227.           sindrom[i][j] = sindrom[i][j] % 2
  228.           string = string + str(sindrom[i][j])
  229.       sindrom_num.append(int(string[::-1], 2))                  # wykrywamy blad
  230.  
  231.      for i in range(0, len(data)):
  232.          if(sindrom_num[i] != 0):
  233.              if(data[i][sindrom_num[i] - 1] == 0):               # naprawiamy
  234.                  data[i][sindrom_num[i] - 1] = 1;
  235.              else:
  236.                  data[i][sindrom_num[i] - 1] = 0;
  237.                                                                 # data zawiera poprawiony kod(7 bit)
  238.      temp_data = []
  239.      for i in range(0, len(data)):
  240.          temp_data.append(np.array([data[i][Hamming.list_of_data[0]],data[i][Hamming.list_of_data[1]],data[i][Hamming.list_of_data[2]],data[i][Hamming.list_of_data[3]]]))
  241.                                                         # temp_data zawiera dane bez bitow pomocniczych
  242.      list = []
  243.      if(Hamming.diff != 0):
  244.          for i in range(0, len(temp_data) - 1):
  245.              for j in range(0, len(temp_data[i])):
  246.                  list.append(temp_data[i][j])
  247.          for i in range(0, Hamming.diff):
  248.           list.append(temp_data[len(temp_data)-1][i])
  249.      else:
  250.          for i in range(0, len(temp_data)):
  251.              for j in range(0, len(temp_data[i])):
  252.                  list.append(temp_data[i][j])
  253.      return list
  254.  
  255. def main_menu(data):
  256.     checker = 0
  257.     while(checker!='9'):
  258.         print("1. Test TMR ")
  259.         print("2. Test Hamming")
  260.         print("3. Test Interleave")
  261.         print("4. Test RS")
  262.         print("5. Test Turbocode")
  263.         print("6. Test LDPC")
  264.         print("8. Clear console")
  265.         print("9. Quit")
  266.         checker = input("\\>")
  267.         if (checker == '1'):
  268.             test_tmr(data)
  269.         if(checker == '2'):
  270.             test_hamming(data)
  271.         if(checker == '3'):
  272.             test_interleave(data)
  273.         if(checker == '4'):
  274.             test_RS(data)
  275.         if(checker == '5'):
  276.             test_turbocode(data)
  277.         if(checker == '6'):
  278.             test_LDPC(data)
  279.         if(checker == '7'):
  280.             test_BCH(data)
  281.         if(checker == '8'):
  282.             print(chr(27) + "[2J") #clear console
  283.  
  284. def test_tmr(data):
  285.     tmr_data = coder(set_of_bites_to_list_of_bits(data))
  286.     gilbert_good = float(input("Gilbert_good : "))
  287.     gilbert_bad = float(input("Gilbert_bad : "))
  288.     bsc_p = float(input("BSC_probability : "))
  289.    
  290.     pure_data_gilbert = gilbert(set_of_bites_to_list_of_bits(data),gilbert_good, gilbert_bad)
  291.     pure_data_bsc = bsc(data, bsc_p)
  292.  
  293.     tmr_gilbert = gilbert(tmr_data, gilbert_good, gilbert_bad)
  294.     tmr_gilbert_decoded = decoder(tmr_gilbert)
  295.  
  296.     tmr_bsc = bsc(list_of_bits_to_set_of_bits(tmr_data), bsc_p)
  297.     tmr_bsc_decoded = decoder(set_of_bites_to_list_of_bits(tmr_bsc))
  298.    
  299.     print("\nPure data, bsc errors : " + str(diff(data, pure_data_bsc)))
  300.     print("Pure data, gilbert errors: " + str(diff(data, list_of_bits_to_set_of_bits(pure_data_gilbert))))
  301.     print("TMR, gilbert errors: " + str(diff(data, list_of_bits_to_set_of_bits(tmr_gilbert_decoded))))
  302.     print("TMR, bsc errors: " + str(diff(data, list_of_bits_to_set_of_bits(tmr_bsc_decoded))) + "\n")    
  303.    
  304.     bytes_pure = bit_to_byte(header + data)
  305.     bytes_pure_gilbert = bit_to_byte(header + list_of_bits_to_set_of_bits(pure_data_gilbert))
  306.     bytes_pure_bsc = bit_to_byte(header + pure_data_bsc)
  307.     bytes_tmr_gilbert = bit_to_byte(header + list_of_bits_to_set_of_bits(tmr_gilbert_decoded))
  308.     bytes_tmr_bsc = bit_to_byte(header + list_of_bits_to_set_of_bits(tmr_bsc_decoded))  
  309.  
  310.     save(bytes_pure, "pure")
  311.     save(bytes_pure_gilbert, "pure_gilbert")
  312.     save(bytes_pure_bsc, "pure_bsc")
  313.     save(bytes_tmr_gilbert, "tmr_gilbert")
  314.     save(bytes_tmr_bsc, "tmr_bsc")
  315.    
  316.     pure = cv2.imread('pure.bmp')
  317.     pure_gilbert = cv2.imread('pure_gilbert.bmp')
  318.     pure_bsc = cv2.imread('pure_bsc.bmp')
  319.     tmr_gilbert = cv2.imread('tmr_gilbert.bmp')
  320.     tmr_bsc = cv2.imread('tmr_bsc.bmp')
  321.    
  322.     plt.subplot(321),plt.imshow(pure),plt.title('pure')
  323.     plt.subplot(323),plt.imshow(pure_gilbert),plt.title('pure_gilbert')
  324.     plt.subplot(324),plt.imshow(pure_bsc),plt.title('pure_bsc')
  325.     plt.subplot(325),plt.imshow(tmr_gilbert),plt.title('tmr_gilbert')
  326.     plt.subplot(326),plt.imshow(tmr_bsc),plt.title('tmr_bsc')
  327.     plt.tight_layout()
  328.     plt.show()
  329.  
  330.  
  331. def test_hamming(data):
  332.     Hamming_encode_data_part = Hamming.code(data)
  333.     gilbert_good = float(input("Gilbert_good : "))
  334.     gilbert_bad = float(input("Gilbert_bad : "))
  335.     bsc_p = float(input("BSC_probability : "))
  336.  
  337.     pure_data_gilbert = gilbert(set_of_bites_to_list_of_bits(data),gilbert_good, gilbert_bad)
  338.     pure_data_bsc = bsc(data, bsc_p)
  339.  
  340.     Hamming_gilbert = gilbert(Hamming_encode_data_part, gilbert_good, gilbert_bad)
  341.     Hamming_gilbert_decoded = list_of_bits_to_set_of_bits(Hamming.decode(list_of_bits_to_set_of_bits(Hamming_gilbert)))
  342.  
  343.     Hamming_bsc = bsc(list_of_bits_to_set_of_bits(Hamming_encode_data_part), bsc_p)
  344.     Hamming_bsc_decoded = list_of_bits_to_set_of_bits(Hamming.decode(Hamming_bsc))
  345.    
  346.     print("\nPure data, bsc errors : " + str(diff(data, pure_data_bsc)))
  347.     print("Pure data, gilbert errors: " + str(diff(data, list_of_bits_to_set_of_bits(pure_data_gilbert))))
  348.     print("Hamming, gilbert errors: " + str(diff(data, Hamming_bsc_decoded)))
  349.     print("Hamming, bsc errors: " + str(diff(data, Hamming_gilbert_decoded)) + "\n")      
  350.    
  351.     bytes_pure = bit_to_byte(header + data)
  352.     bytes_pure_gilbert = bit_to_byte(header + list_of_bits_to_set_of_bits(pure_data_gilbert))
  353.     bytes_pure_bsc = bit_to_byte(header + pure_data_bsc)
  354.     bytes_Hamming_gilbert = bit_to_byte(header + Hamming_gilbert_decoded)
  355.     bytes_Hamming_bsc = bit_to_byte(header + Hamming_bsc_decoded)
  356.  
  357.     save(bytes_pure, "pure")
  358.     save(bytes_pure_gilbert, "pure_gilbert")
  359.     save(bytes_pure_bsc, "pure_bsc")
  360.     save(bytes_Hamming_gilbert, "Hamming_gilbert")
  361.     save(bytes_Hamming_bsc, "Hamming_bsc")
  362.    
  363.     pure = cv2.imread('pure.bmp')
  364.     pure_gilbert = cv2.imread('pure_gilbert.bmp')
  365.     pure_bsc = cv2.imread('pure_bsc.bmp')
  366.     Hamming_gilbert = cv2.imread('Hamming_gilbert.bmp')
  367.     Hamming_bsc = cv2.imread('Hamming_bsc.bmp')
  368.    
  369.     plt.subplot(321),plt.imshow(pure),plt.title('pure')
  370.     plt.subplot(323),plt.imshow(pure_gilbert),plt.title('pure_gilbert')
  371.     plt.subplot(324),plt.imshow(pure_bsc),plt.title('pure_bsc')
  372.     plt.subplot(325),plt.imshow(Hamming_gilbert),plt.title('Hamming_gilbert')
  373.     plt.subplot(326),plt.imshow(Hamming_bsc),plt.title('Hamming_bsc')
  374.     plt.tight_layout()
  375.     plt.show()
  376.    
  377.  
  378. def test_interleave(data):
  379.     gilbert_good = float(input("Gilbert_good : "))
  380.     gilbert_bad = float(input("Gilbert_bad : "))
  381.     bsc_p = float(input("BSC_probability : "))
  382.    
  383.     pure_data_gilbert = gilbert(set_of_bites_to_list_of_bits(data),gilbert_good, gilbert_bad)
  384.     pure_data_bsc = bsc(data, bsc_p)
  385.  
  386.     Hamming_encode_data_part = Hamming.code(data)
  387.     interleaved_data = przeplot(Hamming_encode_data_part)
  388.  
  389.     deinterleaved_data_gilbert = rozplot(gilbert(interleaved_data, gilbert_good, gilbert_bad))
  390.     hamm_deinterleaved_data_gilbert = list_of_bits_to_set_of_bits(Hamming.decode(list_of_bits_to_set_of_bits(deinterleaved_data_gilbert)))
  391.      
  392.     deinterleaved_data_bsc = rozplot(set_of_bites_to_list_of_bits(bsc(list_of_bits_to_set_of_bits(interleaved_data), bsc_p)))  
  393.     hamm_deinterleaved_data_bsc = Hamming.decode(list_of_bits_to_set_of_bits(deinterleaved_data_bsc))
  394.    
  395.     print("\nPure data, bsc errors : " + str(diff(data, pure_data_bsc)))
  396.     print("Pure data, gilbert errors: " + str(diff(data, list_of_bits_to_set_of_bits(pure_data_gilbert))))
  397.     print("Interleave, gilbert errors: " + str(diff(data, hamm_deinterleaved_data_gilbert)))
  398.     print("Interleave, bsc errors: " + str(diff(data, list_of_bits_to_set_of_bits(hamm_deinterleaved_data_bsc))) + "\n")    
  399.    
  400.     bytes_pure = bit_to_byte(header + data)
  401.     bytes_pure_gilbert = bit_to_byte(header + list_of_bits_to_set_of_bits(pure_data_gilbert))
  402.     bytes_pure_bsc = bit_to_byte(header + pure_data_bsc)
  403.     bytes_Interleave_gilbert = bit_to_byte(header + hamm_deinterleaved_data_gilbert)
  404.     bytes_Interleave_bsc = bit_to_byte(header + list_of_bits_to_set_of_bits(hamm_deinterleaved_data_bsc))
  405.  
  406.     save(bytes_pure, "pure")
  407.     save(bytes_pure_gilbert, "pure_gilbert")
  408.     save(bytes_pure_bsc, "pure_bsc")
  409.     save(bytes_Interleave_gilbert, "Interleave_gilbert")
  410.     save(bytes_Interleave_bsc, "Interleave_bsc")
  411.    
  412.     pure = cv2.imread('pure.bmp')
  413.     pure_gilbert = cv2.imread('pure_gilbert.bmp')
  414.     pure_bsc = cv2.imread('pure_bsc.bmp')
  415.     Interleave_gilbert = cv2.imread('Interleave_gilbert.bmp')
  416.     Interleave_bsc = cv2.imread('Interleave_bsc.bmp')
  417.    
  418.     plt.subplot(321),plt.imshow(pure),plt.title('pure')
  419.     plt.subplot(323),plt.imshow(pure_gilbert),plt.title('pure_gilbert')
  420.     plt.subplot(324),plt.imshow(pure_bsc),plt.title('pure_bsc')
  421.     plt.subplot(325),plt.imshow(Interleave_gilbert),plt.title('Interleave_gilbert')
  422.     plt.subplot(326),plt.imshow(Interleave_bsc),plt.title('Interleave_bsc')
  423.     plt.tight_layout()
  424.     plt.show()
  425.    
  426.    
  427.  
  428. def test_RS(data):    
  429.     gilbert_good = float(input("Gilbert_good : "))
  430.     gilbert_bad = float(input("Gilbert_bad : "))
  431.     bsc_p = float(input("BSC_probability : "))
  432.    
  433.     pure_data_gilbert = gilbert(set_of_bites_to_list_of_bits(data),gilbert_good, gilbert_bad)
  434.     pure_data_bsc = bsc(data, bsc_p)
  435.    
  436.     rs_class = rs.RSCodec(10)
  437.     rs_enocoded_data = rs_class.encode(set_of_bites_to_list_of_bits(data))
  438.     rs_gilbert_data = gilbert(rs_enocoded_data, gilbert_good, gilbert_bad)    
  439.  
  440.    
  441.     try:
  442.         rs_gilbert_decoded = rs_class.decode(rs_gilbert_data)
  443.         bytes_rs_gilbert = bit_to_byte(header + list_of_bits_to_set_of_bits(rs_gilbert_decoded))  
  444.         save(bytes_rs_gilbert, "rs_gilbert")
  445.         rs_gilbert = cv2.imread('rs_gilbert.bmp')
  446.         plt.subplot(325),plt.imshow(rs_gilbert),plt.title('rs_gilbert')
  447.         print("\nRS, gilbert errors: " + str(diff(data, list_of_bits_to_set_of_bits(rs_gilbert_decoded))))    
  448.     except:
  449.         print("rs_gilbert: too much incorrect data! Can't decode")
  450.         rs_gilbert_decoded = 0
  451.        
  452. #    try:
  453. #        rs_bsc_decoded = rs_class.decode(rs_bsc_data)
  454. #        bytes_rs_bsc = bit_to_byte(header + list_of_bits_to_set_of_bits(rs_bsc_decoded))  
  455. #        save(bytes_rs_bsc, "rs_bsc")
  456. #        rs_bsc = cv2.imread('rs_bsc.bmp')
  457. #        plt.subplot(325),plt.imshow(rs_bsc),plt.title('rs_bsc')
  458. #        print("\nRS, bsc errors: " + str(diff(data, list_of_bits_to_set_of_bits(rs_gilbert_decoded))))    
  459. #    except:
  460. #        print("rs_bsc: too much incorrect data! Can't decode")
  461. #        rs_bsc_decoded = 0  
  462.    
  463.     print("Pure data, bsc errors : " + str(diff(data, pure_data_bsc)))
  464.     print("Pure data, gilbert errors: " + str(diff(data, list_of_bits_to_set_of_bits(pure_data_gilbert))))    
  465.  
  466.     bytes_pure = bit_to_byte(header + data)
  467.     bytes_pure_gilbert = bit_to_byte(header + list_of_bits_to_set_of_bits(pure_data_gilbert))
  468.     bytes_pure_bsc = bit_to_byte(header + pure_data_bsc)
  469.    
  470.     save(bytes_pure, "pure")
  471.     save(bytes_pure_gilbert, "pure_gilbert")
  472.     save(bytes_pure_bsc, "pure_bsc")  
  473.    
  474.     pure = cv2.imread('pure.bmp')
  475.     pure_gilbert = cv2.imread('pure_gilbert.bmp')
  476.     pure_bsc = cv2.imread('pure_bsc.bmp')
  477.    
  478.     plt.subplot(321),plt.imshow(pure),plt.title('pure')
  479.     plt.subplot(323),plt.imshow(pure_gilbert),plt.title('pure_gilbert')
  480.     plt.subplot(324),plt.imshow(pure_bsc),plt.title('pure_bsc')
  481.     plt.tight_layout()
  482.     plt.show()
  483.    
  484. def test_turbocode(data):
  485.     gilbert_good = float(input("Gilbert_good : "))
  486.     gilbert_bad = float(input("Gilbert_bad : "))
  487.     bsc_p = float(input("BSC_probability : "))
  488.    
  489.     pure_data_gilbert = gilbert(set_of_bites_to_list_of_bits(data),gilbert_good, gilbert_bad)
  490.     pure_data_bsc = bsc(data, bsc_p)
  491.    
  492.     memory = np.array([2])
  493.     g_matrix = np.array([[50, 40]])
  494.     h_matrix = np.array([[10, 10]])
  495.     interleaver = cc.RandInterlv(20, 100)
  496.     Trellis1 = cc.Trellis(memory, g_matrix)
  497.     Trellis2 = cc.Trellis(memory, h_matrix)
  498.    
  499.     turbo_encode_data = cc.turbo_encode(set_of_bites_to_list_of_bits(data), Trellis1, Trellis2, interleaver)
  500.    
  501.     turbo_gilbert = gilbert(turbo_encode_data, gilbert_good, gilbert_bad)
  502.  
  503.     turbo_bsc = bsc(list_of_bits_to_set_of_bits(turbo_encode_data), bsc_p)
  504.    
  505.     turbo_decode_gilbert = cc.turbo_decode(sys_symbols, non_sys_symbols_1, non_sys_symbols_2, trellis, noise_variance, number_iterations, interleaver)
  506.     turbo_decode_bsc = cc.turbo(sys_symbols, non_sys_symbols_1, non_sys_symbols_2, trellis, noise_variance, number_iterations, interleaver)
  507.    
  508.     print("\nPure data, bsc errors : " + str(diff(data, pure_data_bsc)))
  509.     print("Pure data, gilbert errors: " + str(diff(data, list_of_bits_to_set_of_bits(pure_data_gilbert))))
  510.     print("Turbo, gilbert errors: " + str(diff(data, turbo_gilbert)))
  511.     print("Turbo, bsc errors: " + str(diff(data, list_of_bits_to_set_of_bits(turbo_bsc))) + "\n")  
  512.    
  513.     bytes_pure = bit_to_byte(header + data)
  514.     bytes_pure_gilbert = bit_to_byte(header + list_of_bits_to_set_of_bits(pure_data_gilbert))
  515.     bytes_pure_bsc = bit_to_byte(header + pure_data_bsc)
  516.     bytes_turbo_gilbert = bit_to_byte(header + turbo_gilbert)
  517.     bytes_turbo_bsc = bit_to_byte(header + list_of_bits_to_set_of_bits(turbo_bsc))
  518.    
  519.     save(bytes_pure, "pure")
  520.     save(bytes_pure_gilbert, "pure_gilbert")
  521.     save(bytes_pure_bsc, "pure_bsc")  
  522.     save(bytes_turbo_gilbert, "turbo_gilbert")
  523.     save(bytes_turbo_bsc, "turbo_bsc")
  524.    
  525.     pure = cv2.imread('pure.bmp')
  526.     pure_gilbert = cv2.imread('pure_gilbert.bmp')
  527.     pure_bsc = cv2.imread('pure_bsc.bmp')
  528.     turbo_gilbert = cv2.imread('turbo_gilbert.bmp')
  529.     turbo_bsc = cv2.imread('turbo_bsc.bmp')
  530.    
  531.     plt.subplot(321),plt.imshow(pure),plt.title('pure')
  532.     plt.subplot(323),plt.imshow(pure_gilbert),plt.title('pure_gilbert')
  533.     plt.subplot(324),plt.imshow(pure_bsc),plt.title('pure_bsc')
  534.     plt.subplot(325),plt.imshow(turbo_gilbert),plt.title('turbo_gilbert')
  535.     plt.subplot(326),plt.imshow(turbo_bsc),plt.title('turbo_bsc')
  536.     plt.tight_layout()
  537.     plt.show()
  538.    
  539.  
  540.    
  541. def test_LDPC(data):
  542.     print()
  543.     #todo
  544.  
  545. def test_convolutional_codes(data):
  546.     print()
  547.     #todo
  548.    
  549. def int_to_string_list(data):
  550.     str_data= []
  551.     for i in data:
  552.         str_data.append(str(i))
  553.     return str_data
  554.  
  555. bytes = read("test4.bmp")
  556. bits = byte_to_bit(bytes)
  557. header = []
  558. data_part = []
  559. for i in range(0, len(bits)):
  560.      if(i < 50):
  561.       header.append(bits[i])
  562.      else:
  563.       data_part.append(bits[i])
  564. del bytes[:]
  565. data_list = set_of_bites_to_list_of_bits(data_part)
  566.  
  567. main_menu(data_part)
  568.  
  569.  
  570. # turbocode_encoded_data = cc.turbo_encode(data_list,'','','')
  571. # turbocode_gilbert_data_part = gilbert(turbocode_encoded_data, .99, .7)
  572. # turbocode_decoded_data = cc.turbo_decode(turbocode_gilbert_data_part)
  573. # turbocode_bits = header + list_of_bits_to_set_of_bits(turbocode_decoded_data)
  574. # new_turbocode = bit_to_byte(turbocode_bits)
  575. # save(new_turbocode, "turbocode")
  576.  
  577.  
  578.  
  579. # gilbert_data_part = gilbert(data_list, 0.98, .7)
  580. # turbocode_encoded_data = cc.turbo_encode(data_list)
  581. # turbocode_gilbert_data_part = gilbert(rs_enocoded_data, .99, .7)
  582. # turbocode_decoded_data = cc.turbo_decode(turbocode_gilbert_data_part)
  583. # turbocode_bits = header + list_of_bits_to_set_of_bits(turbocode_decoded_data)
  584. # new_turbocode = bit_to_byte(turbocode_bits)
  585. # save(new_rs, "turbocode")
  586.  
  587. # print(diff(gilbert_data_part, data_list))
  588.  
  589. # Hamming_encode_data_part = Hamming.code(data_part)
  590. #
  591. # interleaved_data = przeplot(Hamming_encode_data_part)
  592. #
  593. # deinterleaved_data = rozplot(gilbert(interleaved_data, .99, .7))
  594. # hamm_deinterleaved_data = Hamming.decode(list_of_bits_to_set_of_bits(deinterleaved_data))    ### !!!
  595. # # print(diff(hamm_deinterleaved_data, data_list))
  596. # bits_interleaving = header + list_of_bits_to_set_of_bits(hamm_deinterleaved_data)
  597. # bits_gilbert = header + list_of_bits_to_set_of_bits(gilbert_data_part)
  598. # new_hamming = bit_to_byte(bits_interleaving)
  599. # new_gilbert = bit_to_byte(bits_gilbert)
  600. #
  601. # save(new_gilbert, "gilbert_without_Hamming")
  602. # save(new_hamming, "gilbert_with_Hamming")
  603. #
  604. # # print(str(hamm_deinterleaved_data))
  605. #
  606. #
  607. #
  608. # bsc_data_part = bsc(data_part, 0.01)
  609. # Hamming_encode_data_part = Hamming.code(data_part)
  610. # bsc_Hamming = bsc(list_of_bits_to_set_of_bits(Hamming_encode_data_part), 0.01)
  611. # print((str(bsc_Hamming)))
  612. # decoded_bsc_Hamming = list_of_bits_to_set_of_bits(Hamming.decode(bsc_Hamming))
  613. #
  614. # bits_bsc = header + bsc_data_part
  615. # bits_bsc_Hamming = header + decoded_bsc_Hamming
  616. # print(diff(data_part, bsc_data_part))
  617. # print(diff(data_part, decoded_bsc_Hamming))
  618. # new_bytes_bsc = bit_to_byte(bits_bsc)
  619. # new_bytes_Hamming = bit_to_byte(bits_bsc_Hamming)
  620. # save(new_bytes_bsc, "bsc_without_Hamming")
  621. # save(new_bytes_Hamming, "bsc_with_Hamming")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement