海明窗口,python 2.7

海明窗口,python 2.7

问题描述:

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

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),但仍不要没有线索如何将其应用于我的代码。有任何想法吗?正如我所说你在第二张照片中看到了我需要的东西。 也许布莱克曼的窗户也会很好的应用,但是还不知道如何添加它。

应用此:

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

给我说,它不会出现像我期望的图表。

enter image description here

+0

它看起来像300不是实际的采样率。我猜根据你的问题,所以使用你的实际采样率(可能在900左右)。另外,请记住,Welch的方法通过牺牲频率分辨率来计算功率谱的更平滑估计。 – bnaecker

似乎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') 

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

编辑:

将此应用于你的数据,你会做这样的事情:

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

这将在这些频率返还的频率和功率。我在这里假设300是你的采样率(从你的问题中计算freq)。

+0

你能建议代码的样子吗? – Hiddenguy

+0

@Hiddenguy你是什么意思?您可以查看文档以了解如何使用它的详细信息。简单地说,传递一个信号和采样率,它将返回这些频率的频率和功率。 – bnaecker

+0

我向我的问题申请了两个文档的网页,但我不知道如何将它们实现到我的代码中。那么你能帮忙吗? – Hiddenguy