Вы получаете пик 2,5 в частотной области, потому что это средняя амплитуда оконного сигнала, и вы не компенсируете вес окна.После нормализации результатов в частотной области для учета окна с использованием следующего:
plt.plot(yf,2.0/win.sum() * np.abs(FFT[0:N//2]))
вы должны получить амплитуду 5, как во временной области.Обратите внимание, что это работает при условии, что частота входного сигнала является точным кратным f_s/N
(который в вашем случае равен 0,1 Гц), и при условии, что в основе лежит предположение, что входной сигнал является либо чистым тоном, либо состоит из тонов, которые достаточнодопустимо разделение по частоте.
Пиковое значение будет просто вдвое больше амплитуды, поэтому в вашем примере - 10.
Для среднеквадратичного значения вас, вероятно, интересует среднеквадратичное значениезначение соответствующей синусоидальной тональной составляющей во временной области (в предположении, что входной сигнал действительно состоит из синусоидальной составляющей, частоты которой достаточно разделены по частоте).Среднеквадратическое значение синусоидальной амплитуды во временной области A
равно A/sqrt(2)
, поэтому вам просто нужно разделить на sqrt(2)
, чтобы получить соответствующее эквивалентное среднеквадратичное значение из значений амплитуды, поэтому в вашем примере 5/sqrt(2) ~ 3.53
.