137 lines
2.4 KiB
Python
137 lines
2.4 KiB
Python
|
# -*- coding: utf-8 -*-
|
||
|
"""
|
||
|
Created on Thu May 15 16:07:26 2014
|
||
|
|
||
|
@author: RL
|
||
|
"""
|
||
|
from __future__ import division
|
||
|
import matplotlib.pyplot as plt
|
||
|
import numpy.random as random
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
def g_h_filter (data, x, dx, g, h, dt=1.):
|
||
|
results = []
|
||
|
for z in data:
|
||
|
x_est = x + (dx*dt)
|
||
|
residual = z - x_est
|
||
|
|
||
|
dx = dx + h * (residual / float(dt))
|
||
|
x = x_est + g * residual
|
||
|
print('gx',dx,)
|
||
|
|
||
|
results.append(x)
|
||
|
|
||
|
|
||
|
return results
|
||
|
|
||
|
|
||
|
'''
|
||
|
computation of x
|
||
|
x_est = weight + gain
|
||
|
residual = z - weight - gain
|
||
|
x = weight + gain + g (z - weight - gain)
|
||
|
|
||
|
w + gain + gz -wg -ggain
|
||
|
w -wg + gain - ggain + gz
|
||
|
|
||
|
w(1-g) + gain(1-g) +gz
|
||
|
|
||
|
(w+g)(1-g) +gz
|
||
|
|
||
|
'''
|
||
|
'''
|
||
|
gain computation
|
||
|
|
||
|
gain = gain + h/t* (z - weight - gain)
|
||
|
= gain + hz/t -hweight/t - hgain/t
|
||
|
|
||
|
= gain(1-h/t) + h/t(z-weight)
|
||
|
|
||
|
'''
|
||
|
'''
|
||
|
gain+ h*(z-w -gain*t)/t
|
||
|
|
||
|
gain + hz/t -hw/t -hgain
|
||
|
|
||
|
gain*(1-h) + h/t(z-w)
|
||
|
|
||
|
|
||
|
'''
|
||
|
def weight2():
|
||
|
w = 0
|
||
|
gain = 200
|
||
|
t = 10.
|
||
|
weight_scale = 1./6
|
||
|
gain_scale = 1./10
|
||
|
|
||
|
weights=[2060]
|
||
|
for i in range (len(weights)):
|
||
|
z = weights[i]
|
||
|
w_pre = w + gain*t
|
||
|
|
||
|
new_w = w_pre * (1-weight_scale) + z * (weight_scale)
|
||
|
|
||
|
print('new_w',new_w)
|
||
|
|
||
|
gain = gain *(1-gain_scale) + (z - w) * gain_scale/t
|
||
|
|
||
|
print (z)
|
||
|
print(w)
|
||
|
|
||
|
#gain = new_gain * (gain_scale) + gain * (1-gain_scale)
|
||
|
w = new_w
|
||
|
print ('w',w,)
|
||
|
print ('gain=',gain)
|
||
|
|
||
|
|
||
|
def weight3():
|
||
|
w = 160.
|
||
|
gain = 1.
|
||
|
t = 1.
|
||
|
weight_scale = 6/10.
|
||
|
gain_scale = 2./3
|
||
|
|
||
|
weights=[158]
|
||
|
for i in range (len(weights)):
|
||
|
z = weights[i]
|
||
|
w_pre = w + gain*t
|
||
|
|
||
|
new_w = w_pre * (1-weight_scale) + z * (weight_scale)
|
||
|
|
||
|
print('new_w',new_w)
|
||
|
|
||
|
gain = gain *(1-gain_scale) + (z - w) * gain_scale/t
|
||
|
|
||
|
print (z)
|
||
|
print(w)
|
||
|
|
||
|
#gain = new_gain * (gain_scale) + gain * (1-gain_scale)
|
||
|
w = new_w
|
||
|
print ('w',w,)
|
||
|
print ('gain=',gain)
|
||
|
weight3()
|
||
|
'''
|
||
|
#zs = [i + random.randn()*50 for i in range(200)]
|
||
|
zs = [158.0, 164.2, 160.3, 159.9, 162.1, 164.6, 169.6, 167.4, 166.4, 171.0]
|
||
|
|
||
|
#zs = [2060]
|
||
|
data= g_h_filter(zs, 160, 1, .6, 0, 1.)
|
||
|
|
||
|
'''
|
||
|
|
||
|
data = g_h_filter([2060], x=0, dx=200, g=1./6, h = 1./10, dt=10)
|
||
|
print data
|
||
|
|
||
|
|
||
|
'''
|
||
|
print data
|
||
|
print data2
|
||
|
plt.plot(data)
|
||
|
plt.plot(zs, 'g')
|
||
|
plt.show()
|
||
|
'''
|