亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python怎么實現卡爾曼濾波數據處理

發布時間:2022-05-05 09:41:18 來源:億速云 閱讀:564 作者:iii 欄目:開發技術

這篇文章主要介紹“python怎么實現卡爾曼濾波數據處理”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“python怎么實現卡爾曼濾波數據處理”文章能幫助大家解決問題。

什么是卡爾曼濾波

先看看百度百科解釋哈:卡爾曼濾波(Kalman filtering)是一種利用線性系統狀態方程,通過系統輸入輸出觀測數據,對系統狀態進行最優估計的算法。由于觀測數據中包括系統中的噪聲和干擾的影響,所以最優估計也可看作是濾波過程。

重要的事說三遍:

還不如不看!

還不如不看!!

還不如不看!!!

其實大家并不需要把卡爾曼濾波當作一種很復雜的東西,用通俗的話來講,卡爾曼濾波算法只是一種 濾波算法,它的功能就是 濾波,濾波的作用就是減少噪聲與干擾對數據測量的影響。

卡爾曼濾波是怎么濾波的

接下來我會用一句話概括卡爾曼濾波的操作過程:

卡爾曼濾波是一種通過 歷史數據、歷史積累誤差、當前測量數據與當前誤差 聯合計算出的當前被測量的最優預測值。

首先大家要先理解什么是當前被測量的最優預測值:

里面有兩個重要的概念,分別是 最優 和 預測值 :

這意味著:

1、卡爾曼濾波的結果不是確確實實被測量出來的,而是利用公式計算出來的預測結果(并不是說預測結果就不好,測量還存在誤差呢!);

2、最優是因為卡爾曼濾波考慮的非常多,它結合了四個參數對當前的被測量進行預測,所以效果比較好。

接下里大家要理解 歷史數據、歷史積累誤差、當前測量數據與當前誤差 的概念。

我會通過實例給大家講講這四個東西的概念。

卡爾曼濾波實例

假設我們現在在用超聲波測距離!現在是t時間,我們需要用t-1時間的距離來估計t時間的距離。

設在t-1時刻,超聲波的被測量的最優預測值為50cm,而到t-1時刻的積累誤差3cm,你自己對預測的不確定誤差為4cm,那么在t-1時刻,其總誤差為(32+42)1/2=5cm。

在t時刻,超聲波測得的實際值53cm,測量誤差為2cm,那我們要怎么去相信上一時刻的預測值和這一時刻的實際值呢?因為二者都不是準的,我們可以利用誤差來計算。

因此,我們結合 歷史數據、歷史積累誤差、當前測量數據與當前誤差 來計算:

python怎么實現卡爾曼濾波數據處理

所以當前的最優預測值為52.59。

卡爾曼濾波的python代碼實現

import numpy as np
import matplotlib.pyplot as plt
# Q為這一輪的心里的預估誤差
Q = 0.00001
# R為下一輪的測量誤差
R = 0.1
# Accumulated_Error為上一輪的估計誤差,具體呈現為所有誤差的累計
Accumulated_Error = 1
# 初始舊值
kalman_adc_old = 0
SCOPE = 50
def kalman(ADC_Value):
    global kalman_adc_old
    global Accumulated_Error
    # 新的值相比舊的值差太大時進行跟蹤
    if (abs(ADC_Value-kalman_adc_old)/SCOPE > 0.25):
        Old_Input = ADC_Value*0.382 + kalman_adc_old*0.618
    else:
        Old_Input = kalman_adc_old
    # 上一輪的 總誤差=累計誤差^2+預估誤差^2
    Old_Error_All = (Accumulated_Error**2 + Q**2)**(1/2)
    # R為這一輪的預估誤差
    # H為利用均方差計算出來的雙方的相信度
    H = Old_Error_All**2/(Old_Error_All**2 + R**2)
    # 舊值 + 1.00001/(1.00001+0.1) * (新值-舊值)
    kalman_adc = Old_Input + H * (ADC_Value - Old_Input)
    # 計算新的累計誤差
    Accumulated_Error = ((1 - H)*Old_Error_All**2)**(1/2)
    # 新值變為舊值
    kalman_adc_old = kalman_adc
    return kalman_adc
array = np.array([50]*200)
s = np.random.normal(0, 5, 200)
test_array = array + s
plt.plot(test_array)
adc=[]
for i in range(200):
    adc.append(kalman(test_array[i]))
plt.plot(adc)   
plt.plot(array)   
plt.show()

實驗結果為:

python怎么實現卡爾曼濾波數據處理

關于“python怎么實現卡爾曼濾波數據處理”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

资兴市| 建德市| 太仆寺旗| 桃园县| 黄骅市| 巴马| 太保市| 乌鲁木齐县| 石门县| 无极县| 富顺县| 兴和县| 吴忠市| 平阴县| 曲水县| 高碑店市| 富宁县| 西和县| 奉化市| 麻城市| 汉源县| 绥德县| 富源县| 灵川县| 白银市| 寻乌县| 肥东县| 涞水县| 澄迈县| 祁连县| 伊通| 墨脱县| 临湘市| 黄冈市| 平湖市| 怀安县| 高密市| 晋江市| 大化| 余姚市| 永川市|