import numpy as np
from numpy import *
import matplotlib
matplotlib.use('TkAgg')
from matplotlib import pyplot as plt
from matplotlib import animation

lfsr = 100

def lfsr11():
	# 11 bit lfsr
	global lfsr
	order = 11
	taps = [0,10] #subtract 1

	bit = (((lfsr >> (taps[0])) ^ (lfsr >> (taps[1]))) & 1)
	lfsr = (lfsr>>1) | (bit << order-1)

	# print(bin(x))
	# print(x)
	number = int(lfsr)
	return lfsr

def lfsr_vector():
	# x1, x2
	x1 = lfsr11()*1.0/(pow(2,11)-1)
	x2 = lfsr11()*1.0/(pow(2,11)-1)
	
	return x1, x2

def transform(x1,x2):
	# y1, y2
	y1 = sqrt(-2.*log(x1))*sin(x2)
	y2 = sqrt(-2.*log(x1))*cos(x2)

	return y1, y2

yy1 = []
yy2 = []
xx1 = []
xx2 = []
for i in range(pow(2,11)-1):
	x1,x2 = lfsr_vector()
	y1,y2 = transform(x1,x2)

	xx1.append(x1)
	xx2.append(x2)
	yy1.append(y1)
	yy2.append(y2)

fig = plt.figure()
plt.hist(yy1+yy2,100)
plt.hist(xx1+xx2,100)
plt.show()



