【发布时间】:2019-02-14 01:42:58
【问题描述】:
我处理振动,我试图从 FFT 幅度中获取以下信息:
- 峰到峰
- 峰值
- 有效值
考虑到汉宁窗,我正在对简单的正弦波函数执行 FFT。 请注意,正弦波函数的“全幅度”为 5,运行 FFT 下方的代码会得到 2.5 幅度的结果。所以,在这种情况下,我从 FFT 中得到了峰值。那么峰峰值和 RMS 呢?
P.-S. - 我对带宽频率的 RMS(即 parsevall 定理)不感兴趣。我对每个峰值的 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()
【问题讨论】:
-
请澄清:
x的幅度为 5。“全幅度”是什么意思? -
RMS,是平方 x[i] 的均值的根。因此,
i处的单个峰值的 RMS 将为sqrt(mean(x[i]**2)) = x[i]。请澄清您的问题。 -
嗨,何塞。请您澄清一下您在以下表达式中使用 2.0 乘数的原因是什么:
plt.plot(yf,2.0/N * np.abs(FFT[0:N//2]))
标签: python signal-processing fft vibration