Я пытаюсь реализовать RMS с плавающим окном в python. Я моделирую входящий поток данных измерений, упрощая итерацию во времени и вычисляя синусоидальную волну. Поскольку это идеальная синусоида, сравнивать результаты легко с помощью математики. Я также добавил расчет numpy, чтобы убедиться, что мои массивы заполнены правильно.
Однако моя плавающая RMS не возвращает правильные значения, не связанные с размером моей выборки.
Код:
import matplotlib.pyplot as plot
import numpy as np
import math
if __name__ == '__main__':
# sine generation
time_array = []
value_array = []
start = 0
end = 6*math.pi
steps = 100000
amplitude = 10
#rms calc
acc_load_current = 0
sample_size = 1000
for time in np.linspace(0, end, steps):
time_array.append(time)
actual_value = amplitude * math.sin(time)
value_array.append(actual_value)
# rms calc
acc_load_current -= (acc_load_current/sample_size)
# square here
sq_value = actual_value * actual_value
acc_load_current += sq_value
# mean and then root here
floating_rms = np.sqrt(acc_load_current/sample_size)
fixed_rms = np.sqrt(np.mean(np.array(value_array)**2))
math_rms = 1/math.sqrt(2) * amplitude
print(floating_rms)
print(fixed_rms)
print(math_rms)
plot.plot(time_array, value_array)
plot.show()
Результат:
2.492669969708522
7.071032456438027
7.071067811865475