Фильтр Калмана - очень полезная вещь для выравнивания сингалов, к примеру от датчиков. Вот пример
import math
import random
import matplotlib.pyplot as plt
# -----------------------------------
# среднее отклонение
varVolt = 0.85
# скорость реакции на изменение
varProcess = 0.01
Pc = 0.0
G = 0.0
P = 1.0
Xp = 0.0
Zp = 0.0
Xe = 0.0
def filter(v):
global varVolt, varProcess, Pc, G, P, G, Xp, Zp, Xe
Pc = P + varProcess
G = Pc/(Pc+varVolt)
P = (1-G)*Pc
Xp = Xe
Zp = Xp
Xe = G*(v-Zp)+Xp
return Xe
# -----------------------------------
fig = plt.figure()
Q=320
RX = list(range(Q))
RY = list(range(Q))
x=0
for n in range(Q):
delta = random.uniform(-15,15)
RX[n] = x
RY[n] = 60*math.sin(3.1415/180*x)+delta
x = x+1
plt.plot(RX, RY, color='red')
#plt.scatter(RX, RY)
for n in range(Q):
RY[n] = filter(RY[n])
plt.plot(RX, RY, color='green')
plt.grid(True)
plt.savefig(fname='pic02', fmt='png')
plt.show()
Справочник алгоритмов v0.05 © 2007-2025 Igor Salnikov aka SunDoctor