卡爾曼濾波python及陀螺儀例子

2021-08-28 17:47:40 字數 1665 閱讀 5201

import matplotlib.pyplot as plt

import numpy as np

#建立雜訊

num = 300

np.random.seed(4)

noise= np.random.randn(num) #高斯分布隨機雜訊

noise_std = np.random.randn(num) #測量雜訊

x = [0]*num

y = [0]*num

#建立資料集

for i in range(1,num):

x[i] = np.sin(0.2*i)

noise_std_ = np.square(np.var(noise_std)) #求方差

noise_ = np.square(np.var(noise))

p = [0]* num #每次的最優偏差

k = [0]* num #卡爾曼增益

s = x + noise_std #測量值

for i in range(1,num):

p[i] = np.square(p[i-1]) + 0.1*noise_

k[i] = 0.1*np.sqrt( p[i]/( noise_std_ + p[i]))

y[i] = y[i-1] + k[i] * (s[i] - y[i-1])

p[i] = np.sqrt((1-k[i])*p[i])

print(p[i])

plt.plot(x,color = 'r',label = '資料集')

plt.plot(s,color = 'g',label = '資料測量獲取值(帶雜訊)')

plt.plot(y,color = 'b',label = '過濾後的資料')

一般的對於我們嵌入式來說,在處理陀螺儀資料上面比較經典,有很多陀螺儀雖然都是自帶卡爾曼濾波處理,但是仍然值得學習嘗試處理。

#include "math.h"

//在穩定情況下採集陀螺儀資料

//測定其雜訊的均值

float getnoisegyro()

temp /= i;

return temp;

}float xw[5] = ;

short count = 0;

float p = 0;

float noise = 0; //noise = getnoisegyro()

float xa_ = 0;

float getgyrosw()

temp /= 5;

p1 = p * p + 0.002; 為角速度的閾值誤差

k = 0.1*p1 / (p1 + pow(noise,2) ); //計算增益

xa_ = xa_ + k * (temp - xa_);

p = sqrt((1-k) * p1 ); //跟新偏差

return xa_;

}

以上就是乙個簡單嘗試。

卡爾曼濾波原理及實現

前一段時間,做專案研究了一下卡爾曼濾波,並且在專案當中實現了乙個物體跟蹤的功能,所以,藉著新鮮勁兒,本次部落格對卡爾曼濾波進行一次整理。假設我們手頭有一輛diy的移動小車。這輛車的外形是這樣的 這輛車可以在荒野移動,為了便於對它進行控制,需要知道它的位置以及移動速度。所以,建立乙個向量,用來儲存小車...

Python 卡爾曼濾波器實現

去年我們在設計一款新產品的時候,由於選用定製開發的乙個soc器件,導致我們在用adc讀取經由這個soc晶元放大後的訊號時,出現了極其不穩定的情況。正常情況下adc讀取出來的訊號應當為一條平穩的直線,而現實上讀取出來的訊號確上下波動極其大,遠遠超出了我們理論計算水平。雖然後來通過大量的研究分析,得出時...

Python 實現 卡爾曼濾波器 非常簡單

整體思路很簡單,卡爾曼濾波器就是做資料融合的,先給乙個gps的資料 z 和乙個里程計資料 u 讓他們融合吧。usr bin env python3 coding utf 8 created on tue dec 18 19 37 13 2018 author sc args explanition ...