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

时间:2017-12-14 01:51:02

标签: python numpy scipy fft

我的数据是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。

1 个答案:

答案 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()

enter image description here

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

enter image description here