符号翻转傅里叶变换 Python Numpy 数组

Sign flipping Fourier transform Python Numpy Array

我的数据是 numpy 数组中数据的符号:

Data=[-1,1,-1,1,1,1,-1,1,-1,1,...,N]

检查中有一个明显的模式,其中每 3 个元素都是负数:

Pattern=[1,1-1,1,1,-1,1,1,-1...]

但是有噪音,所以我不能直接量化这个,所以我想做一个傅立叶变换,看看这个空间重复有多强。

我希望在 frequency=N/3 处看到一个大峰值,因为这种模式似乎每 3 个值重复一次。

到目前为止我已经尝试过:

一个N=401的数据我试过:

y=numpy.fft.fft(Data)
x = np.linspace(0,400,401)

plt.plot(x,y.real) 
plt.show()

但我收到噪音并且没有我知道存在的清晰峰值。我感觉我没有正确实现 fft。

我用玩具示例做了一些测试,它似乎有效。 您可能应该绘制绝对值或 PSD,但如果您只绘制实部,峰值也在那里。

# array with a -1 every third element
a = np.tile([1,1,-1], 100)

# add some noise
b = a * np.random.choice([-1, 1], len(a), p=[0.1, 0.9])

x = np.linspace(0, len(a), len(a+1))
y = np.fft.fft(b)

plt.plot(x[1:], y[1:].real); plt.show()

plt.plot(x[1:], np.abs(y[1:]**2)); plt.show()