海明 Window, python 2.7
Hamming Window, python 2.7
您好,我的 FFT 噪声很大。如何应用到我的代码 Hamming window 以减少噪音。看我的代码:
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() 是什么
我需要的是:
我已经看过 (https://docs.scipy.org/doc/scipy-0.13.0/reference/generated/scipy.signal.hamming.html) and this (https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.hamming.html) 但仍然不知道如何将它应用到我的代码中。有任何想法吗?正如我所说,您在第二张图片中看到了我需要的东西。
也许布莱克曼 window 也可以申请,但仍然不知道如何添加它。
应用这个:
freqs, psd = scipy.signal.welch(dataset, fs=300, window='hamming')
给了我那个,它看起来不像我想要的图表。
您似乎在尝试估算信号的功率谱。如果是这种情况,您可以使用 scipy.signal.welch
函数之类的东西,它通过计算重叠数据段的 FFT 来估计平滑频谱。您可以直接向方法传递一个 window
关键字参数,例如 'hamming'
或 'blackman'
.
编辑:
将此应用于您的数据,您将执行如下操作:
freqs, psd = scipy.signal.welch(dataset, fs=300, window='hamming')
这将 return 频率和这些频率下的功率。我在这里假设 300 是您的采样率(根据您在问题中对 freq
的计算)。
看来韦尔奇方法是正确的,所以我想了想我的问题,这里是答案。
# 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')
您好,我的 FFT 噪声很大。如何应用到我的代码 Hamming window 以减少噪音。看我的代码:
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() 是什么
我需要的是:
我已经看过 (https://docs.scipy.org/doc/scipy-0.13.0/reference/generated/scipy.signal.hamming.html) and this (https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.hamming.html) 但仍然不知道如何将它应用到我的代码中。有任何想法吗?正如我所说,您在第二张图片中看到了我需要的东西。 也许布莱克曼 window 也可以申请,但仍然不知道如何添加它。
应用这个:
freqs, psd = scipy.signal.welch(dataset, fs=300, window='hamming')
给了我那个,它看起来不像我想要的图表。
您似乎在尝试估算信号的功率谱。如果是这种情况,您可以使用 scipy.signal.welch
函数之类的东西,它通过计算重叠数据段的 FFT 来估计平滑频谱。您可以直接向方法传递一个 window
关键字参数,例如 'hamming'
或 'blackman'
.
编辑:
将此应用于您的数据,您将执行如下操作:
freqs, psd = scipy.signal.welch(dataset, fs=300, window='hamming')
这将 return 频率和这些频率下的功率。我在这里假设 300 是您的采样率(根据您在问题中对 freq
的计算)。
看来韦尔奇方法是正确的,所以我想了想我的问题,这里是答案。
# 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')