Skip to content

Instantly share code, notes, and snippets.

@sicktastic
Last active June 27, 2016 03:39
Show Gist options
  • Save sicktastic/2400049427b581f4be2b4b55752cef30 to your computer and use it in GitHub Desktop.
Save sicktastic/2400049427b581f4be2b4b55752cef30 to your computer and use it in GitHub Desktop.
Comparing Kalman Filter: Maximize Gaussian math
from math import *
def f(mu, sigma2, x):
return 1 / sqrt(2. * pi * sigma2) * exp(-.5 * (x - mu) **2 / sigma2)
print f(10., 4., 10.)
class KalmanFilter
def maximize_gaussian(mu:, sigma2:, x:)
return 1 / Math.sqrt(2.0 * Math::PI * sigma2) * Math.exp(-0.5 * (x - mu) **2 / sigma2)
end
end
kalman_filter = KalmanFilter.new
puts kalman_filter.maximize_gaussian(mu: 10.0, sigma2: 4.0, x: 10.0)
def update(mean1, var1, mean2, var2):
new_mean = (var2 * mean1 + var1 * mean2) / (var1 + var2)
new_var = 1 / (1 / var1 + 1 / var2)
return [new_mean, new_var]
print update(10., 8., 13., 2.)
class KalmanFilter
def update(mean1:, var1:, mean2:, var2:)
new_mean = (var2 * mean1 + var1 * mean2) / (var1 + var2)
new_var = 1.0 / (1.0 / var1 + 1.0 / var2)
return ['%.10f' % new_mean, '%.10f' % new_var]
end
end
kalman_filter = KalmanFilter.new
puts kalman_filter.update(mean1: 10.0, var1: 8.0, mean2: 13.0, var2: 2.0)
def predict(mean1, var1, mean2, var2):
new_mean = mean1 + mean2
new_var = var1 + var2
return [new_mean, new_var]
print predict(10., 4., 12., 4.)
class KalmanFilter
def predict(mean1:, var1:, mean2:, var2:)
new_mean = mean1 + mean2
new_var = var1 + var2
return ['%.10f' % new_mean, '%.10f' % new_var]
end
end
kalman_filter = KalmanFilter.new
puts kalman_filter.predict(mean1: 10.0, var1: 4.0, mean2: 12.0, var2: 4.0)
# Write a program that will iteratively update and
# predict based on the location measurements
# and inferred motions shown below.
def update(mean1, var1, mean2, var2):
new_mean = float(var2 * mean1 + var1 * mean2) / (var1 + var2)
new_var = 1./(1./var1 + 1./var2)
return [new_mean, new_var]
def predict(mean1, var1, mean2, var2):
new_mean = mean1 + mean2
new_var = var1 + var2
return [new_mean, new_var]
measurements = [5., 6., 7., 9., 10.]
motion = [1., 1., 2., 1., 1.]
measurement_sig = 4.
motion_sig = 2.
mu = 0.
sig = 10000.
#Please print out ONLY the final values of the mean
#and the variance in a list [mu, sig].
# Insert code here
for n in range(len(measurements)):
[mu, sig] = update(mu, sig, measurements[n], measurement_sig)
print 'update: ', [mu, sig]
[mu, sig] = predict(mu, sig, motion[n], motion_sig)
print 'predict: ', [mu, sig]
class KalmanFilter
def update(mean1:, var1:, mean2:, var2:)
new_mean = (var2 * mean1 + var1 * mean2) / (var1 + var2)
new_var = 1.0/(1.0/var1 + 1.0/var2)
return [new_mean, new_var]
end
def predict(mean1:, var1:, mean2:, var2:)
new_mean = mean1 + mean2
new_var = var1 + var2
return [new_mean, new_var]
end
def measurement_output
@measurements = [5.0, 6.0, 7.0, 9.0, 10.0]
@motion = [1.0, 1.0, 2.0, 1.0, 1.0]
@measurement_sig = 4.0
@motion_sig = 2.0
@mu = 0.0
@sig = 10000.0
puts "\n"
@measurements.zip(@motion).each do |measurement, motion|
update_array = update(mean1: @mu, var1: @sig, mean2: measurement, var2: @measurement_sig)
@mu = update_array[0]
@sig = update_array[1]
update_mu_and_sig = [@mu, @sig]
puts "Update: " + update_mu_and_sig.inspect
predict_array = predict(mean1: @mu, var1: @sig, mean2: motion, var2: @motion_sig)
@mu = predict_array[0]
@sig = predict_array[1]
predict_mu_and_sig = [@mu, @sig]
puts "Predict: " + predict_mu_and_sig.inspect
puts "\n ==============================================="
puts "\n"
end
end
end
@kalman_filter = KalmanFilter.new
@kalman_filter.measurement_output
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment