首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >消除fft图中的噪声

消除fft图中的噪声
EN

Stack Overflow用户
提问于 2017-12-04 17:38:57
回答 0查看 1.9K关注 0票数 2

你知道如何从快速傅立叶变换中去除这么多噪声吗?以下是我的FFT代码:

代码语言:javascript
复制
import numpy as np

fft1 = (Bx[51:-14])
fft2 = (By[1:-14])


# Loop for FFT data
for dataset in [fft1]:
    dataset = np.asarray(dataset)
    psd = np.abs(np.fft.fft(dataset))**2
    freq = np.fft.fftfreq(dataset.size, float(300)/dataset.size)
    plt.semilogy(freq[freq>0], psd[freq>0]/dataset.size**2, color='r')


for dataset2 in [fft2]:
    dataset2 = np.asarray(dataset2)
    psd2 = np.abs(np.fft.fft(dataset2))**2
    freq2 = np.fft.fftfreq(dataset2.size, float(300)/dataset2.size)
    plt.semilogy(freq2[freq2>0], psd2[freq2>0]/dataset2.size**2, color='b')

我得到的是:

我需要的是:

有什么想法吗?韦尔奇不工作,所以正如你所看到的,我不想平滑我的图表,而是将如此多的噪音消除到第二张图片中所示的水平。

这就是Welch所做的:

和一些代码:

代码语言:javascript
复制
freqs, psd = scipy.signal.welch(dataset, fs=300, window='hamming')

更新的Welch:

下面是一些代码:

代码语言:javascript
复制
# Loop for FFT data
for dataset in [fft1]:
    dataset = np.asarray(dataset)
    freqs, psd = welch(dataset, fs=266336/300, window='hamming', nperseg=512)
    plt.semilogy(freqs, psd/dataset.size**2, color='r')

for dataset2 in [fft2]:
    dataset2 = np.asarray(dataset2)
    freqs2, psd2 = welch(dataset2, fs=266336/300, window='hamming', nperseg=512)
    plt.semilogy(freqs2, psd2/dataset2.size**2, color='b')

如你所见,Welch配置良好,它显示了60 Hz的电线和谐波模式。它几乎是好的,但它完全平滑了我的图。请参见所需的图表二。顺便说一句。Y标度在Welch图中是错误的,但这只是两者的幂数据的一个例子。

我已经更改为nperseg=8192,并且它起作用了。看看结果。

EN

回答

页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47630350

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档