def autocorrelation_test(generator, n_bits, d, sig_level=None, misc=None):
if not (1 <= d <= n_bits // 2):
raise ValueError("Parameter d must be between 1 and [n/2]=%d" % (n_bits // 2))
# random bits from i to i+d
generated_bits = deque([generator.random_bit() for _ in range(d)], maxlen=d)
a = 0
for i in range(n_bits - d):
# a += sequence[i] ^ sequence[i + d]
s_i_d = generator.random_bit()
s_i_0 = generated_bits.popleft()
generated_bits.append(s_i_d)
a += s_i_0 ^ s_i_d
# Calculate the statistic
x5 = 2 * (a - (n_bits - d) / 2) / sqrt(n_bits - d)
if type(misc) is dict:
misc.update(a=a)
if sig_level is None:
return x5
else:
limit = -norm.ppf(sig_level / 2)
if type(misc) is dict:
misc.update(x=x5, limit=limit)
return -limit <= x5 <= limit
评论列表
文章目录