卡爾曼濾波

  1. 初見Kalman

假設我養了一只豬:

一周前,這只豬的體重是46±0.5kg。注意,在這里我用了±0.5,表示其實我對這只豬一周前的體重并不是那么確定的,也就是說,46kg這個體重有0.5kg的誤差。現在,我又養了這只豬一個星期。那么我想要知道它一個星期之后多重,又大概有多少的誤差?

為了得到一周后的體重,我有兩種方法:一是根據我多年的養豬經驗得到的豬體重公式推求出一個大概的值,另一個就是直接去稱它的體重。當然,兩種方法都有一定的誤差。假設經驗公式得到的體重是48kg,誤差2kg;直接稱體重得到的是49kg,誤差1kg:為了得到一周后的體重,我有兩種方法:一是根據我多年的養豬經驗得到的豬體重公式推求出一個大概的值,另一個就是直接去稱它的體重。當然,兩種方法都有一定的誤差。假設經驗公式得到的體重是48kg,誤差2kg;直接稱體重得到的是49kg,誤差1kg:

可是,我是一個處女座的人,不管是經驗公式得到的值,還是直接稱量得到的值,我都覺得不夠準。我希望有一種方法,可以同時結合這只豬一周前的體重、用經驗公式估計的值以及直接稱量得到的值,綜合考慮,得出一個最接近豬真實體重的,誤差最小的值。這就是卡爾曼濾波要完成的任務。現在我們來把養豬的模型抽象成數學公式:

上圖的左邊,上一周的豬的體重,可以抽象為也k-1時刻的狀態值,用k-1時刻的最優估計值加上一個誤差項來表示,右邊同理。其中,

這一項表示的是估計值的協方差。這里要說明兩點:

  1. 上圖中所有的變量都是用粗體,表示這是一個向量或者一個矩陣;
  2. 之所以用(列)向量而非一個數來表示狀態值,是因為,雖然一只豬的體重可以用一個值來表示,但是在實際的應用中很多狀態并不是一個數就能表示的(比如導彈在空間中的位置,同時有x、y、z三個坐標)。
    圖中右邊表示k時刻的狀態值,這個值可以通過預測模塊(也就是根據經驗公式估計豬的體重)和糾錯模塊(也就是直接去稱量豬的體重值)來估計。同樣,預測模塊和糾錯模塊都有著對應的誤差和誤差協方差矩陣。卡爾曼濾波要做的,就是根據貝葉斯估計的相關理論,同時考慮預測模塊和糾錯模塊的協方差,對誤差小的項賦予較大的權重,對誤差大的項賦予較小的權重,并使預測的誤差最小。

具體的實現過程如下:

參考:
https://www.zhihu.com/question/23971601/answer/137325095

  1. Kalman的數學原理

假設我們要研究的對象是一個房間的溫度。根據你的經驗判斷,這個房間的溫度是恒定的。(這里的假設相當于狀態方程的系數A為1)假設你對你的經驗不是100%的相信,可能會有上下偏差幾度,我們把這些偏差看成是高斯白噪聲(這里就是W(k))。另外,我們在房間里放一個溫度計,但是這個溫度計也不準確的,測量值會比實際值偏差。我們也把這些偏差看成是高斯白噪聲。(溫度計的測量值就是Z(k),而由于溫度測到的溫度就是溫度,不用再換算,所以系數H就是1,偏差就是V(k))。好了,現在對于某一分鐘我們有兩個有關于該房間的溫度值:你根據經驗的預測值(系統的預測值X(k|k-1))和溫度計的值(測量值Z(k))。下面我們要用這兩個值結合他們各自的噪聲來估算出房間的實際溫度值。

假如我們要估算k時刻的是實際溫度值。首先你要根據k-1時刻的溫度值,來預測k時刻的溫度。因為你相信溫度是恒定的,所以你會得到k時刻的溫度預測值是跟k-1時刻一樣的,假設是23度,同時該值的高斯噪聲的偏差是5度(5是這樣得到的:如果k-1時刻估算出的最優溫度值的偏差(p(k-1|k-1)就是上一時刻的p(k|k))是3,你對自己預測的不確定度是4度,他們平方相加再開方,就是5(算出來的就是P(k|k-1)))。然后,你從溫度計那里得到了k時刻的溫度值(測量值Z(k)),假設是25度,同時該值的偏差是4度(這個就是R了)。由于我們用于估算k時刻的實際溫度有兩個溫度值,分別是23 度和25度。究竟實際溫度是多少呢?相信自己還是相信溫度計呢?究竟相信誰多一點,我們可以用他們的covariance(協方差)來判斷。因為 Kg2=52/(52+42)(該式的計算相當于上面的(4)式子),所以Kg=0.78,我們可以估算出k時刻的實際溫度值是:23+0.78*(25-23)=24.56度(該式對應(3)式,就是算出最優估算值)。可以看出,因為溫度計的covariance比較小(比較相信溫度計),所以估算出的最優溫度值偏向溫度計的值。

現在我們已經得到k時刻的最優溫度值了,下一步就是要進入 k+1時刻,進行新的最優估算。到現在為止,好像還沒看到什么自回歸的東西出現。對了,在進入k+1時刻之前,我們還要算出k時刻那個最優值(24.56 度)的偏差。算法如下:((1-Kg)*52)0.5=2.35(該式對應(5)式)。這里的5就是上面的k時刻你預測的那個23度溫度值的偏差,得出的2.35就是進入 k+1時刻以后k時刻估算出的最優溫度值的偏差(對應于上面的3)。就是這樣,卡爾曼濾波器就不斷的把 covariance遞歸,從而估算出最優的溫度值。他運行的很快,而且它只保留了上一時刻的covariance。上面的Kg,就是卡爾曼增益(Kalman Gain)。他可以隨不同的時刻而改變他自己的值,是不是很神奇!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/38743.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/38743.shtml
英文地址,請注明出處:http://en.pswp.cn/news/38743.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java基礎(十二)面向對象編程 OOP

一、抽象數據類型 1.面向對象基本概念 1. 面向對象 面向對象程序設計(OOP)是一種基于對象概念的軟件開發方法,是目前軟件開發的主流方式。 常見面向對象的語言:C 、Python 、Java 常見面向過程的語言:C 面向對象的三…

計算機競賽 python+opencv+機器學習車牌識別

0 前言 🔥 優質競賽項目系列,今天要分享的是 🚩 基于機器學習的車牌識別系統 🥇學長這里給一個題目綜合評分(每項滿分5分) 難度系數:4分工作量:4分創新點:3分 該項目較為新穎,適…

使用插件實現pdf,word預覽功能

效果 代碼&#xff1a; 插件地址&#xff1a; https://github.com/501351981/vue-office <a-modalv-model:visible"visible":title"title"ok"handleOk":bodyStyle"bodyStyle":width"1200":maskClosable"false"…

如何在Vue表單處理中實現表單的條件渲染

在Vue開發中&#xff0c;我們經常會遇到需要根據某些條件來渲染表單的情況。這種情況下&#xff0c;我們需要靈活地根據條件來展示或隱藏一些表單字段。本文將介紹如何在Vue中實現表單的條件渲染&#xff0c;并提供了代碼示例。 一、使用v-if指令實現簡單的條件渲染 在Vue中&a…

2023年網絡安全比賽--綜合滲透測試(超詳細)

一、競賽時間 180分鐘 共計3小時 二、競賽階段 競賽階段 任務階段 競賽任務 競賽時間 分值 1.掃描目標靶機將靶機開放的所有端口,當作flag提交(例:21,22,23); 2.掃描目標靶機將靶機的http服務版本信息當作flag提交(例:apache 2.3.4); 3.靶機網站存在目錄遍歷漏洞,請將…

Linux設備樹詳解

Linux 設備樹詳解 Linux 操作系統早期是針對個人電腦設備而開發的操作系統&#xff0c;而個人電腦處理器產商較為單一&#xff08;例如只有 Intel&#xff0c;AMD&#xff09;同時個人電腦產商均使用 Intel 或 AMD 制造的處理器&#xff0c;業界形成了統一的總線/硬件接口標準…

JavaScript進階 第二天

深入對象內置構造函數 一. 深入對象 創建對象三種方式構造函數實例成員&靜態成員 1.1 創建對象三種方式 ① 利用對象字面量創建對象 const o {name: 哈哈 } ② 利用new Object 創建對象 const o new Object({ name: 哈哈 }) ③ 構造函數創建對象 1.2 構造函數 …

探索規律:Python地圖數據可視化藝術

文章目錄 一 基礎地圖使用二 國內疫情可視化圖表2.1 實現步驟2.2 完整代碼2.3 運行結果 一 基礎地圖使用 使用 Pyecharts 構建地圖可視化也是很簡單的。Pyecharts 支持多種地圖類型&#xff0c;包括普通地圖、熱力圖、散點地圖等。以下是一個構建簡單地圖的示例&#xff0c;以…

認識Transformer:入門知識

視頻鏈接&#xff1a; https://www.youtube.com/watch?vugWDIIOHtPA&listPLJV_el3uVTsOK_ZK5L0Iv_EQoL1JefRL4&index60 文章目錄 Self-Attention layerMulti-head self-attentionPositional encodingSeq2Seq with AttentionTransformerUniversal Transformer Seq2Seq …

淺談 EMP-SSL + 代碼解讀:自監督對比學習的一種極簡主義風

論文鏈接&#xff1a;https://arxiv.org/pdf/2304.03977.pdf 代碼&#xff1a;https://github.com/tsb0601/EMP-SSL 其他學習鏈接&#xff1a;突破自監督學習效率極限&#xff01;馬毅、LeCun聯合發布EMP-SSL&#xff1a;無需花哨trick&#xff0c;30個epoch即可實現SOTA 主要…

08 qt進程和網絡編程(cs模型)

一 、qt進程 qt中進程最主要的任務就是啟動額外應用程序 并且跟他們之間通信。進程類為QProcess 定義用途Header:#include qmake:QT += coreInherits:QIODevice//繼承于IO設備類1.1 QProcess基本使用 第一步:創建一個QProcess對象 // process = new QProcess(this); //說明…

資訊速遞 | ArkUI-X 預覽版已正式開源!

OpenHarmony項目群技術指導委員會&#xff08;以下簡稱“TSC”&#xff09;-跨平臺應用開發框架TSG所孵化項目 —— ArkUI-X&#xff0c;近期已正式開源 &#xff0c;開發者基于一套主代碼&#xff0c;就可以將在OpenHarmony上開發的精美、高性能應用同時運行在Android、iOS等其…

LNMP環境搭建wordpress以及跳轉后臺報404解決

基于上文配置好的LNMP環境繼續搭建wordpress 目錄 一.到官網下載tar.gz包&#xff0c;并上傳到Linux上&#xff0c;也可以通過復制鏈接地址進行下載 二. 將wordpress中的所有文件移動到你nginx.conf中指定目錄中 三.為wordpress配置數據庫 四.到瀏覽器進行注冊 1.剛開始…

maven編譯始終提示無效的目標發行版的解決方法

摘自個人印象筆記2021-05-07&#xff1a;https://app.yinxiang.com/fx/55e1d5f4-aeea-446a-a768-0f1a48195f5b(圖顯示不完整可查看原筆記內容)1&#xff1a;確保IDE中的編譯版本正確 在idea中&#xff0c;主要看項目屬性中和setting的java compiler中對應的jdk版本是否正確&…

好用的安卓手機投屏到mac分享

工具推薦&#xff1a;scrcpy github地址&#xff1a;https://github.com/Genymobile/scrcpy/tree/master mac使用方式 安裝環境&#xff0c;打開terminal&#xff0c;執行以下命令&#xff0c;沒有brew的先安裝brew brew install scrcpy brew install android-platform-too…

學習 Iterator 迭代器

今天看到一個面試題&#xff0c; 讓下面解構賦值成立。 let [a,b] {a:1,b:2} 如果我們直接在瀏覽器輸出這行代碼&#xff0c;會直接報錯&#xff0c;說是 {a:1,b:2} 不能迭代。 看了es6文檔后&#xff0c;具有迭代器的就一下幾種類型&#xff0c;沒有Object類型&#xff0c;…

404. 左葉子之和

給定二叉樹的根節點 root &#xff0c;返回所有左葉子之和。 示例 1&#xff1a; 輸入: root [3,9,20,null,null,15,7] 輸出: 24 解釋: 在這個二叉樹中&#xff0c;有兩個左葉子&#xff0c;分別是 9 和 15&#xff0c;所以返回 24示例 2: 輸入: root [1] 輸出: 0提示: 節點…

【NetCore】09-中間件

文章目錄 中間件&#xff1a;掌控請求處理過程的關鍵1. 中間件1.1 中間件工作原理1.2 中間件核心對象 2.異常處理中間件:區分真異常和邏輯異常2.1 處理異常的方式2.1.1 日常錯誤處理--定義錯誤頁的方法2.1.2 使用代理方法處理異常2.1.3 異常過濾器 IExceptionFilter2.1.4 特性過…

go web框架 gin-gonic源碼解讀02————router

go web框架 gin-gonic源碼解讀02————router 本來想先寫context&#xff0c;但是發現context能簡單講講的東西不多&#xff0c;就準備直接和router合在一起講好了 router是web服務的路由&#xff0c;是指講來自客戶端的http請求與服務器端的處理邏輯或者資源相映射的機制。&…

react實現對數組做增刪改操作自定義hook

需求 實現對數組的增刪改操作。 實現 import { useState } from react;const useArray (currList) > {const [list, setList] useState(currList);// 增const addItem (item) > {setList([...list, item]);};// 刪const removeItem (idx) > {const _arr [...l…