符号翻转傅里叶变换 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()
我的数据是 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()