def dft_test(bits):
n = len(bits)
if (n % 2) == 1: # Make it an even number
bits = bits[:-1]
ts = list() # Convert to +1,-1
for bit in bits:
ts.append((bit*2)-1)
ts_np = numpy.array(ts)
fs = numpy.fft.fft(ts_np) # Compute DFT
mags = abs(fs)[:n/2] # Compute magnitudes of first half of sequence
T = math.sqrt(math.log(1.0/0.05)*n) # Compute upper threshold
N0 = 0.95*n/2.0
print " N0 = %f" % N0
N1 = 0.0 # Count the peaks above the upper theshold
for mag in mags:
if mag < T:
N1 += 1.0
print " N1 = %f" % N1
d = (N1 - N0)/math.sqrt((n*0.95*0.05)/4) # Compute the P value
p = math.erfc(abs(d)/math.sqrt(2))
success = (p >= 0.01)
return (success,p,None)
评论列表
文章目录