def kalman_filter(self, z):
'''
:param z: 待滤波的数组
:return: 滤波之后的数组
'''
# intial parameters
n_iter = len(z)
sz = (n_iter,) # size of array
x = -0.37727 # truth value (typo in example at top of p. 13 calls this z)
Q = 1e-5 # process variance
# allocate space for arrays
xhat = np.zeros(sz) # a posteri estimate of x
P = np.zeros(sz) # a posteri error estimate
xhatminus = np.zeros(sz) # a priori estimate of x
Pminus = np.zeros(sz) # a priori error estimate
K = np.zeros(sz) # gain or blending factor
R = 0.1 ** 2 # estimate of measurement variance, change to see effect
# intial guesses
xhat[0] = 0.0
P[0] = 1.0
for k in range(1, len(z)):
# time update
xhatminus[k] = xhat[k - 1] # X(k|k-1) = AX(k-1|k-1) + BU(k) + W(k),A=1,BU(k) = 0
Pminus[k] = P[k - 1] + Q # P(k|k-1) = AP(k-1|k-1)A' + Q(k) ,A=1
# measurement update
K[k] = Pminus[k] / (Pminus[k] + R) # Kg(k)=P(k|k-1)H'/[HP(k|k-1)H' + R],H=1
xhat[k] = xhatminus[k] + K[k] * (z[k] - xhatminus[k]) # X(k|k) = X(k|k-1) + Kg(k)[Z(k) - HX(k|k-1)], H=1
P[k] = (1 - K[k]) * Pminus[k] # P(k|k) = (1 - Kg(k)H)P(k|k-1), H=1
return xhat
#####################################################
def my_media_filter(data):
index_data_x = len(data)
# print(index_data_x)
dat = np.mean(data)
# print(dat)
for m in range(index_data_x):
if data[m] > dat + 0.4:
data[m] = dat
elif data[m] < dat - 0.4:
data[m] = dat
else:
pass
return data
###################################################
from scipy.signal import savgol_filter
savgol_filter(data, 9, 3)