БПФ - Пик-Пик, Пик, RMS
Я работаю с вибрацией и пытаюсь получить следующую информацию по амплитуде БПФ:
- Пик Пик
- Пик
- RMS
Я выполняю БПФ для простой функции синусоидальной волны, учитывая окно Ханнинга. Обратите внимание, что "полная амплитуда" из функции синусоидальной волны равна 5, а выполнение кода ниже БПФ дает мне 2,5 результата амплитуды. Итак, в этом случае я получаю пик от БПФ. Как насчет пика до пика и RMS?
P.-S. - Меня не интересует среднеквадратичное значение частоты полосы пропускания (т. Е. Теорема Парсевалла). Меня интересует 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 ответ
Вы получаете пик 2,5 в частотной области, потому что это средняя амплитуда оконного сигнала, и вы не компенсируете вес окна. После нормализации результатов в частотной области для учета окна используется следующее:
plt.plot(yf,2.0/win.sum() * np.abs(FFT[0:N//2]))
вы должны получить амплитуду 5, как во временной области. Обратите внимание, что это работает при условии, что частота входного сигнала кратна f_s/N
(который в вашем случае равен 0,1 Гц), и при условии, что верное предположение о том, что входной сигнал является либо чистым тоном, либо состоит из тонов, которые достаточно разделены по частоте, является действительным.
Пиковое значение будет просто вдвое больше амплитуды, поэтому 10 в вашем примере.
Для значения RMS вас, вероятно, интересует значение RMS соответствующего синусоидального тонального компонента во временной области (при условии, что входной сигнал действительно состоит из синусоидального компонента, частоты которого достаточно разделены по частоте). СКО синусоидальной амплитуды во временной области A
является A/sqrt(2)
так что вам просто нужно разделить на sqrt(2)
чтобы получить соответствующее эквивалентное среднеквадратичное значение из ваших значений амплитуды, так 5/sqrt(2) ~ 3.53
в вашем примере.