Guest User

Untitled

a guest
Apr 20th, 2018
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.19 KB | None | 0 0
  1. #!/usr/bin/env python
  2. import string
  3.  
  4. def denary2binary(n):
  5.     '''convert denary integer n to binary string bStr'''
  6.     bStr = ''
  7.     if n < 0: raise ValueError, "must be a positive integer"
  8.     if n == 0: return '0'
  9.     while n > 0:
  10.         bStr = str(n % 2) + bStr
  11.         n = n >> 1
  12.     return bStr
  13.  
  14. def lfsr2a(r, iterations):
  15.         j = 0
  16.         while j < iterations:
  17.                 yield r[0]
  18.                 i1 = (r[0] + r[2] + r[3] + r[6] + r[7] + r[9] + r[11] + r[12]) % 2
  19.  
  20.                 i = 0
  21.                 while i < len(r)-1:
  22.                         r[i] = r[i+1]
  23.                         i += 1
  24.  
  25.                 r[13-1] = (i1) % 2
  26.                 j += 1
  27.  
  28. def lfsr2b(r, iterations):
  29.         j = 0
  30.         while j < iterations:
  31.                 yield r[0]
  32.                 i1 = (r[0] + r[2] + r[4] + r[5] + r[8] + r[9] + r[11] + r[13]) % 2
  33.  
  34.                 i = 0
  35.                 while i < len(r)-1:
  36.                         r[i] = r[i+1]
  37.                         i += 1
  38.  
  39.                 r[15-1] = (i1) % 2
  40.                 j += 1
  41.  
  42. def lfsr2c(r, iterations):
  43.         j = 0
  44.         while j < iterations:
  45.                 yield r[0]
  46.                 i1 = (r[0] + r[1] + r[4] + r[7] + r[9] + r[12] + r[13] + r[15]) % 2
  47.  
  48.                 i = 0
  49.                 while i < len(r)-1:
  50.                         r[i] = r[i+1]
  51.                         i += 1
  52.  
  53.                 r[17-1] = (i1) % 2
  54.                 j += 1
  55.  
  56. def similarity(test_seq):
  57.     output_seq = map(int, list("0111011010111000010001111111111011110000010111111001111011101011111100000000110000011001011111000001000110000000001111011011101011111011101100010001101011101011111010100000101110011111100101000"))
  58.  
  59.     diff = 0;
  60.     for i in range(0, len(output_seq)):
  61.         if output_seq[i] != test_seq[i]:
  62.             diff += 1
  63.  
  64.     return 1 - float(diff)/len(output_seq)
  65.  
  66. def test_all_lfsr(r1, r2, r3, n):
  67.     a = list(lfsr2a(r1, n))
  68.     b = list(lfsr2b(r2, n))
  69.     c = list(lfsr2c(r3, n))
  70.  
  71.     for i in range(0, n):
  72.         if a[i]+b[i]+c[i] >= 2:
  73.             print 1,
  74.         else:
  75.             print 0,
  76.  
  77.     print "\n"
  78.  
  79. # First LFSR
  80. highest = 0
  81. highest_seq = 0
  82. for i in range(0,8192):
  83.     test = list(denary2binary(i).zfill(13))
  84.     test = map(int, test)
  85.  
  86.     #print "-----------"
  87.     #print test
  88.     lfsr_seq = list(lfsr2a(list(test), 193)) #Additional list to get it as a copy so we don't modify #test
  89.     #print lfsr_seq
  90.  
  91.     score = similarity(lfsr_seq)
  92.     if score > highest:
  93.         highest = score
  94.         highest_seq = test
  95.         #print test
  96.         #print "New max: " + str(score) + " out=" + "".join(map(str,lfsr_seq)) + " in=" +  "".join(map(str,test))
  97.  
  98. r1 = highest_seq
  99. print "Best for LFSR A: "  + str(highest) + " " + "".join(map(str,highest_seq))
  100.  
  101. # Second LFSR
  102. highest = 0
  103. highest_seq = 0
  104. for i in range(0,32768):
  105.     test = list(denary2binary(i).zfill(15))
  106.     test = map(int, test)
  107.  
  108.     lfsr_seq = list(lfsr2b(list(test), 193)) #Additional list to get it as a copy so we don't modify #test
  109.  
  110.     score = similarity (lfsr_seq)
  111.     if score > highest:
  112.         highest = score
  113.         highest_seq = test
  114.         #print "New max: " + str(score) + " out=" + "".join(map(str,lfsr_seq)) + " in=" +  "".join(map(str,test))
  115.  
  116. r2 = highest_seq
  117. print "Best for LFSR B: "  + str(highest) + " " + "".join(map(str,highest_seq))
  118.  
  119. # Third LFSR
  120. highest = 0
  121. highest_seq = 0
  122. for i in range(0,131072):
  123.     test = list(denary2binary(i).zfill(17))
  124.     test = map(int, test)
  125.  
  126.     lfsr_seq = list(lfsr2c(list(test), 193)) #Additional list to get it as a copy so we don't modify #test
  127.  
  128.     score = similarity (lfsr_seq)
  129.     if score > highest:
  130.         highest = score
  131.         highest_seq = test
  132.         #print "New max: " + str(score) + " out=" + "".join(map(str,lfsr_seq)) + " in=" +  "".join(map(str,test))
  133.  
  134. r3 = highest_seq
  135. print "Best for LFSR C: "  + str(highest) + " " + "".join(map(str,highest_seq))
  136.  
  137.  
  138. print "Feeding back sequence into LFSR"
  139.  
  140. test_all_lfsr(r1, r2, r3, 193)
  141.  
  142. """
  143. #test_all_lfsr(map(int,list("0111110110111")), map(int,list("000001101101100")), map(int,list("11110010101010100")), 193)
  144.  
  145. for a in ['0111110110111', '0101001000110', '0001001010001']:
  146.     for b in ['000001101101100', '000001001101011', '000000110001001']:
  147.         for c in ['11110010101010100', '01110100000100001', '01110001111010110']:
  148.             test_all_lfsr(map(int,list(a)), map(int,list(b)), map(int,list(c)), 193)
  149. """
Add Comment
Please, Sign In to add comment