我的数据是numpy数组中数据的符号:
Data=[-1,1,-1,1,1,1,-1,1,-1,1,...,N]
检查中有一个明显的模式,每个第3个元素都是负数:
Pattern=[1,1-1,1,1,-1,1,1,-1...]
但是有噪音,所以我无法直接量化这个,所以我想做一个傅立叶变换,看看这个空间重复有多强。
我希望在频率= N / 3时看到一个大的峰值,因为这个模式似乎每3个值重复一次。
到目前为止,我已经尝试过:
对于N = 401的数据,我尝试过:
y=numpy.fft.fft(Data)
x = np.linspace(0,400,401)
plt.plot(x,y.real)
plt.show()
但是我得到了噪音,没有明确的峰值我知道存在。我有一种感觉,我没有正确实现fft。
答案 0 :(得分:2)
我用玩具示例进行了一些测试,似乎有效。 您应该绘制绝对值或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()