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 ...