微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

当去趋势或减去均值不起作用时,如何使用 numpy.fft.fft() 从 FFT 中去除零频率伪影

如何解决当去趋势或减去均值不起作用时,如何使用 numpy.fft.fft() 从 FFT 中去除零频率伪影

我正在尝试计算以下数据的 FFT:data.txt

y_array = np.loadtxt('data.txt',dtype='complex')
plt.plot(np.real(y_array))

Original Data

y_array_fft = np.fft.fftshift(np.fft.fft(y_array))
x_array = np.linspace(-125,125,len(y_array))

FFT 图:

enter image description here

我想去除零频率的伪影,我认为这是直流偏移。为此,我尝试从原始信号中减去平均值,并使用 scipy.signal.detrend() 从 fft 之前的数据中去除线性趋势。然而,这两种操作似乎对 FFT 没有任何影响。

y_array_detrend = signal.detrend(y_array)
y_array_mean_subtracted = y_array-np.mean(y_array)

y_array_detrend_fft = np.fft.fftshift(np.fft.fft(y_array_detrend))
y_array_mean_subtracted_fft  = np.fft.fftshift(np.fft.fft(y_array_mean_subtracted))

使用 scipy.detrend() 转换数据后的 FFT:

fft_after_detrend

从数据中减去平均值后的FFT:

FFT after mean subtraction

非常感谢任何帮助或评论

解决方法

如果减去平均值,那么剩下的不是 0 Hz 伪影,而是一些低频频谱(可能在您的图中介于 2 到 10 Hz 之间,具体取决于您的尺寸)。试试高通滤波器。

此外,由于是复杂数据,请确保减去复杂平均值。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。