汉明窗,蟒蛇2.7

时间:2017-12-02 22:16:35

标签: python python-2.7 numpy hamming-code hamming-window

嗨,我有一个非常嘈杂的FFT。如何申请我的代码汉明窗口,以减少噪音。看看我的代码:

plt.subplot(212)
plt.title('Fast Fourier Transform')
plt.ylabel('Power [a.u.]')
plt.xlabel('Frequency Hz')
fft1 = (Bx[51:-14])
fft2 = (By[1:-14])

for dataset in [fft1]:
    dataset = np.asarray(dataset)
    psd = np.abs(np.fft.fft(dataset))**2.5
    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.5
    freq2 = np.fft.fftfreq(dataset2.size, float(300)/dataset2.size)
    plt.semilogy(freq2[freq2>0], psd2[freq2>0]/dataset2.size**2, color='b')

plt.show()是什么 enter image description here

我需要的是: enter image description here

我已经看过(https://docs.scipy.org/doc/scipy-0.13.0/reference/generated/scipy.signal.hamming.html)和这个(https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.hamming.html),但仍然不知道如何将它应用到我的代码中。有任何想法吗?正如我所说,你在第二张照片中看到我需要什么。 也许Blackman窗口也适用,但仍然不知道如何添加它。

申请:

freqs, psd = scipy.signal.welch(dataset, fs=300, window='hamming')

给我这个,这看起来不像我想要的图表。

enter image description here

2 个答案:

答案 0 :(得分:3)

您似乎正在尝试估算信号的功率谱。如果是这种情况,您可以使用scipy.signal.welch函数之类的函数,该函数通过计算重叠数据段的FFT来估算平滑频谱。您可以直接传递方法window关键字参数,例如'hamming''blackman'

编辑:

将此应用于您的数据,您可以执行以下操作:

freqs, psd = scipy.signal.welch(dataset, fs=300, window='hamming')

这将返回这些频率的频率和功率。我在这里假设300是您的采样率(根据您在问题中计算freq)。

答案 1 :(得分:0)

似乎welch方法是正确的,所以我想到了我的问题,这就是答案。

   # Loop for FFT data
    for dataset in [fft1]:
        dataset = np.asarray(dataset)
        freqs, psd = welch(dataset, fs=266336/300, window='hamming', nperseg=8192)
        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=8192)
        plt.semilogy(freqs2, psd2/dataset2.size**2, color='b')
相关问题