FFT-峰到峰,峰,RMS

时间:2018-09-09 11:17:28

标签: python signal-processing fft vibration

我处理振动,我试图从FFT振幅中获取以下信息:

  • 峰到峰
  • 峰值
  • RMS

考虑到汉宁开窗,我正在对简单的正弦波函数执行FFT。 请注意,正弦波函数的“全振幅”为5,在FFT以下运行代码可获得2.5振幅结果。因此,在这种情况下,我从FFT得到了峰值。峰间和均方根值呢?

P.-S。-我对带宽频率的RMS不感兴趣(即parsevallall定理)。我对每个峰值的RMS感兴趣,这在振动软件中通常很常见。

import numpy as np
import matplotlib.pyplot as plt


f_s = 100.0 # Hz  sampling frequency
f = 1.0 # Hz
time = np.arange(0.0, 10.0, 1/f_s)
x = 5 * np.sin(2*np.pi*f*time)
N = len(time)
T = 1/f_s

# apply hann window and take the FFT
win = np.hanning(len(x))
FFT = np.fft.fft(win * x)   
n = len(FFT)
yf =  np.linspace(0.0,1.0/(2.0*T),N//2)

plt.figure(1)
plt.plot(yf,2.0/N * np.abs(FFT[0:N//2]))
plt.grid()

plt.figure(2)
plt.plot(time,x)
plt.xlabel('time')
plt.ylabel('Amplitude')
plt.grid()
plt.show()

1 个答案:

答案 0 :(得分:1)

您在频域中获得2.5的峰值,因为这是加窗信号的平均幅度,并且您没有补偿窗重。在将频域结果归一化后,使用以下方法说明窗口:

plt.plot(yf,2.0/win.sum() * np.abs(FFT[0:N//2]))

您应该获得5的振幅,就像在时域中一样。请注意,如果输入信号频率是f_s/N的精确倍数(在您的情况下为0.1Hz),并且假设输入信号是纯音或包含以下音调的基本假设,则此方法有效在频率上充分分开是有效的。

峰峰值将仅仅是幅度的两倍,因此在您的示例中为10。

对于RMS值,您可能会对相应的时域正弦音调分量的RMS值感兴趣(在这种情况下,输入信号的确是由正弦分量组成,其频率在频率上已充分分开)。振幅为A的时域正弦波的RMS为A/sqrt(2),因此您只需要除以sqrt(2)即可从振幅值中获得相应的等效RMS值,因此{{1 }}。