import json
import numpy as np
from numpy.linalg import inv
import matplotlib.pyplot as plt
data = open("./position_list.json", encoding='utf-8')
position_list = json.load(data)
def get_lat(position):
return float(position["latitude"])
def get_long(position):
return float(position["longitude"])
def get_time(position):
return int(position["time"])
def wrap_position(lat, long, time):
position = {}
position["latitude"] = lat
position["longitude"] = long
position["time"] = time
return position
# Q
def covariance4d(interval):
sigma = 0.0625
part1 = sigma * ((interval ** 4) / 4.0)
part2 = sigma * ((interval ** 3) / 2.0)
part3 = sigma * (interval ** 2)
cov_matrix = np.array([[part1, part2, 0, 0],
[part2, part3, 0, 0],
[0, 0, part1, part2],
[0, 0, part1, part2]])
return cov_matrix
# Initial Estimation Covariance Matrix
P = covariance4d(0)
# Initial State Matrix
pre_lat = get_lat(position_list[0])
pre_long = get_long(position_list[0])
pre_time = get_time(position_list[0])
X = np.array([[pre_lat],
[0],
[pre_long],
[0]])
n = 4
raw_position_list = [wrap_position(pre_lat, pre_long, pre_time)]
kalman_position_list = [wrap_position(pre_lat, pre_long, pre_time)]
for position in position_list[1:10]:
t_interval = (get_time(position) - pre_time) / 1000.0
A = np.array([[1, t_interval, 0, 0],
[0, 1, 0, 0],
[0, 0, 1, t_interval],
[0, 0, 0, 1]])
print("A State Matrix:\n", A)
print("X State Matrix:\n", X)
X = A.dot(X)
print("X State Matrix:\n", X)
P = A.dot(P).dot(A.T) + covariance4d(t_interval)
print("P State Matrix:\n", P)
R = np.diag([29, 29, 29, 29])
S = P + R
print("S State Matrix:\n", S)
K = P.dot(inv(S))
print("K State Matrix:\n", K)
# Reshape the new data into the measurement space.
curr_lat = get_lat(position)
v_y = (curr_lat - pre_lat) / t_interval
curr_long = get_long(position)
v_x = (curr_long - pre_long) / t_interval
Y = np.array([[curr_lat],[v_y],[curr_long],[v_x]])
print("Y State Matrix:\n", Y)
# Update the State Matrix
# Combination of the predicted state, measured values, covariance matrix and Kalman Gain
print("X State Matrix:\n", X)
print("fix:\n", K.dot(Y - X))
X = X + K.dot(Y - X)
print("Kalman Filter State Matrix:\n", X)
# Update Process Covariance Matrix
P = (np.identity(len(K)) - K).dot(P)
pre_lat = curr_lat
pre_long = curr_long
pre_time = get_time(position)
raw_position_list.append(wrap_position(pre_lat, pre_long, pre_time))
kalman_position_list.append(wrap_position(X[0][0], X[2][0], pre_time))
print("Raw Matrix:\n", raw_position_list)
print("Kalman Filter State Matrix:\n", kalman_position_list)
Python版本卡爾曼濾波算法
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
- 文/潘曉璐 我一進(jìn)店門(mén)杜漠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)极景,“玉大人,你說(shuō)我怎么就攤上這事驾茴〈鞫福” “怎么了?”我有些...
- 文/不壞的土叔 我叫張陵沟涨,是天一觀的道長(zhǎng)恤批。 經(jīng)常有香客問(wèn)我,道長(zhǎng)裹赴,這世上最難降的妖魔是什么喜庞? 我笑而不...
- 正文 為了忘掉前任诀浪,我火速辦了婚禮,結(jié)果婚禮上延都,老公的妹妹穿的比我還像新娘雷猪。我一直安慰自己,他們只是感情好晰房,可當(dāng)我...
- 文/花漫 我一把揭開(kāi)白布求摇。 她就那樣靜靜地躺著,像睡著了一般殊者。 火紅的嫁衣襯著肌膚如雪与境。 梳的紋絲不亂的頭發(fā)上,一...
- 那天猖吴,我揣著相機(jī)與錄音摔刁,去河邊找鬼。 笑死海蔽,一個(gè)胖子當(dāng)著我的面吹牛共屈,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播党窜,決...
- 文/蒼蘭香墨 我猛地睜開(kāi)眼拗引,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了幌衣?” 一聲冷哼從身側(cè)響起寺擂,我...
- 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎泼掠,沒(méi)想到半個(gè)月后怔软,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
- 正文 獨(dú)居荒郊野嶺守林人離奇死亡择镇,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
- 正文 我和宋清朗相戀三年挡逼,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片腻豌。...
- 正文 年R本政府宣布苏携,位于F島的核電站做瞪,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜装蓬,卻給世界環(huán)境...
- 文/蒙蒙 一著拭、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧牍帚,春花似錦儡遮、人聲如沸。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至蹂随,卻和暖如春十嘿,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背糙及。 一陣腳步聲響...
- 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像版姑,于是被迫代替她去往敵國(guó)和親柱搜。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
推薦閱讀更多精彩內(nèi)容
- 依舊是Python課程 _(:з」∠)_ 期末需要完成小組作業(yè)剥险,選題內(nèi)容主要是用卡爾曼濾波來(lái)實(shí)現(xiàn)交通參數(shù)的...
- 姓名:周小蓬 16019110037 轉(zhuǎn)載自:http://blog.csdn.net/MangZuo/artic...
- 一:前言 濾波算法 用于過(guò)濾掉連續(xù)的數(shù)據(jù)中出現(xiàn)偏差較大的數(shù)據(jù) 二:卡爾曼濾波算法 <0>卡爾曼濾波的原理請(qǐng)自行百度...
- 照片總是拍出來(lái)那么淡健爬, 真希望自己有個(gè)單反哈, 不過(guò)為了給自己的畫(huà)拍照么介, 入個(gè)單反是不是有點(diǎn)傻娜遵。 已經(jīng)畫(huà)了三個(gè)女孩...