卡爾曼濾波是怎麼回事?

2021-01-15 程式設計師觀察

小編準時送知識到~

每天三分鐘,就學一點點~

----

濾波

關於濾波,一位自知乎大神這樣說:

一位專業課的教授給我們上課的時候,曾談到:filtering is weighting(濾波即加權)。濾波的作用就是給不同的信號分量不同的權重。最簡單的loss pass filter, 就是直接把低頻的信號給1權重,而給高頻部分0權重。對於更複雜的濾波,比如維納濾波,則要根據信號的統計知識來設計權重。從統計信號處理的角度,降噪可以看成濾波的一種。降噪的目的在於突出信號本身而抑制噪聲影響。從這個角度,降噪就是給信號一個高的權重而給噪聲一個低的權重。維納濾波就是一個典型的降噪濾波器。

卡爾曼濾波

Kalman Filter 算法,是一種遞推預測濾波算法。

Kalman Filter 提供了一種高效可計算的方法來估計過程的狀態,並使估計均方誤差最小。卡爾曼濾波器應用廣泛且功能強大:它可以估計信號的過去和當前狀態,甚至能估計將來的狀態,即使並不知道模型的確切性質。

Kalman Filter 也可以被認為是一種數據融合算法(Data fusion algorithm),已有50多年的歷史,是當今使用最重要和最常見的數據融合算法之一。Kalman Filter 的巨大成功歸功於其小的計算需求,優雅的遞歸屬性以及作為具有高斯誤差統計的一維線性系統的最優估計器的狀態。

Kalman Filter 只能減小均值為0的測量噪聲帶來的影響。只要噪聲期望為0,那麼不管方差多大,只要迭代次數足夠多,那效果都很好。反之,噪聲期望不為0,那麼估計值就還是與實際值有偏差[3]。

卡爾曼濾波到底是如何解決實際問題的呢?

我們以機器人為例介紹卡爾曼濾波的原理,我們的任務是要預測機器人的狀態,包括位置與速度,即可表示為:

某個時刻,我們不知道真實的位置與速度到底是多少,二者存在一個所有可能性的組合,大致如下圖所示。

卡爾曼濾波假設狀態所有的變量都是隨機的且都服從高斯分布,每個變量都有其對應的均值以及方差(它代表了不確定性)。

在上圖中,位置和速度是不相關(uncorrelated)的,這意味著某個變量的狀態不會告訴你其他變量的狀態是怎樣的。即,我們雖然知道現在的速度,但無法從現在的速度推測出現在的位置。但實際上並非如此,我們知道速度和位置是有關係的(correlated),這樣一來二者之間的組合關係變成了如下圖所示的情況。

這種情況是很容易發生的,例如,如果速度很快,我們可能會走得更遠,所以我們的位置會更大。如果我們走得很慢,我們就不會走得太遠。

這種狀態變量之間的關係很重要,因為它可以為我們提供更多信息:One measurement tells us something about what the others could be。

這就是卡爾曼濾波器的目標,我們希望從不確定的測量中儘可能多地獲取信息!

這種狀態量的相關性可以由協方差矩陣表示。簡而言之,矩陣的每個元素是第i個狀態變量和第j個狀態變量之間的相關度。(顯然地可以知道協方差矩陣是對稱的,這意味著交換i和j都沒關係)。

狀態建模成高斯分布(Gaussian blob,由於二維高斯分布長得像一個個小泡泡,之所以長這個樣子,可參考連結[2])。我們需要求解/估計在時間時刻的兩個信息:

狀態建模為高斯分布[2],求解時間時刻的兩個信息:最優估計和協方差矩陣

當然,這裡我們僅使用位置和速度,但是請記住狀態可以包含任意數量的變量,並且可以表示所需的任何變量。

接下來,我們需要某種方式來查看當前狀態(時刻)並預測在時刻處的狀態。請記住,我們不知道哪個狀態是「真實」狀態,但是這裡提到的預測(prediction)並不在乎這些。

我們可以用一個矩陣來表示這個預測過程:

這個矩陣將原始估計中的每個點移動到新的預測位置。

那麼問題來了,應該如何使用上述矩陣來預測下一時刻的位置和速度呢?為了闡述這個過程,我們使用了一個非常基礎的運動學公式(初中物理中就學過)進行描述:

寫成矩陣形式:

現在我們有了一個預測矩陣或者叫做狀態轉移矩陣,該矩陣可以幫助我們計算下一個時刻的狀態。但我們仍然不知道如何更新狀態的協方差矩陣,其實過程也是很簡單,如果我們將分布中的每個點乘以矩陣,那麼其協方差矩陣會發生什麼?

將公式(3)代入公式(4)我們可以得到:

不過我們並沒有考慮到所有的影響因素。可能有一些與狀態本身無關的變化——如外界因素可能正在影響系統。

例如,我們用狀態對列車的運動進行建模,如果列車長加大油門,火車就加速。同樣,在我們的機器人示例中,導航系統軟體可能會發出使車輪轉動或停止的命令。如果我們很明確地知道這些因素,我們可以將其放在一起構成一個向量,我們可以對這個量進行某些「處理」,然後將其添加到我們的預測中對狀態進行更正。

假設我們知道由於油門設置或控制命令而產生的預期加速度。根據基本運動學原理,我們可以得到下式:

寫成矩陣形式:

其中被稱為控制矩陣,被稱為控制向量。如果我們的預測並不是100%準確模型,這會發生什麼呢?

如果狀態受到外部因素進行演進,我們只要知道這些外部因素是什麼,那麼一切仍然很好。但在實際使用中,我們有時不知道的這些外部因素到底是如何被建模的。例如,我們要跟蹤四軸飛行器,它可能會隨風搖晃;如果我們跟蹤的是輪式機器人,則車輪可能會打滑,或者因地面顛簸導致其減速。我們無法跟蹤這些外部因素,如果發生任何這些情況,我們的預測可能會出錯,因為我們並沒有考慮這些因素。

通過在每個預測步驟之後添加一些新的不確定性,我們可以對與「世界」相關的不確定性進行建模(如我們無法跟蹤的事物):

這樣一來,由於新增的不確定性原始估計中的每個狀態都可能遷移到多個狀態。因為我們非常喜歡用高斯分布進行建模,此處也不例外。我們可以說的每個點都移動到具有協方差的高斯分布內的某個位置,如下圖所示:

這將產生一個新的高斯分布,其協方差不同(但均值相同):

所以呢,我們在狀態量的協方差中增加額外的協方差,所以預測階段完整的狀態轉移方程為:

換句話說:新的最佳估計是根據先前的最佳估計做出的預測,再加上對已知外部影響的校正。

新的不確定度是根據先前的不確定度做出的預測,再加上來自環境額外的不確定度。

上述過程描繪了狀態預測過程,那麼當我們從傳感器中獲取一些測量數據時會發生什麼呢?

狀態更新

假設我們有幾個傳感器,這些傳感器可以向我們提供有關系統狀態的信息。就目前而言,測量什麼量都無關緊要,也許一個讀取位置,另一個讀取速度。每個傳感器都告訴我們有關狀態的一些間接信息(換句話說,傳感器在狀態下運作並產生一組測量讀數)。

請注意,測量的單位可能與狀態量的單位不同。我們使用矩陣對傳感器的測量進行建模。

所以我們期望傳感器的度數可以被建模成如下形式:

卡爾曼濾波器的偉大之處就在於它能夠處理傳感器噪聲。換句話說,傳感器本身的測量是不準確的,且原始估計中的每個狀態都可能導致一定範圍的傳感器讀數,而卡爾曼濾波能夠在這些不確定性存在的情況下找到最優的狀態。

根據傳感器的讀數,我們會猜測系統正處於某個特定狀態。但是由於不確定性的存在,某些狀態比其他狀態更可能產生我們看到的讀數:

將這種不確定性(如傳感器噪聲)的協方差表示為,讀數的分布均值等於我們觀察到傳感器的讀數,我們將其表示為

這樣一來,有了兩個高斯分布:一個圍繞通過狀態轉移預測的平均值,另一個圍繞實際傳感器讀數。

因此,我們需要將基於預測狀態(粉紅色)的推測讀數與基於實際觀察到的傳感器讀數(綠色)進行融合。

那麼融合後最有可能的新狀態是什麼?對於任何可能的讀數,我們都有兩個相關的概率:(1)我們的傳感器讀數是的測量值的概率,以及(2)先前估計值的概率認為是我們應該看到的讀數。

如果我們有兩個概率,並且想知道兩個概率都為真的機會,則將它們相乘。因此,我們對兩個高斯分布進行了相乘處理:

兩個概率分布相乘得到的就是上圖中的重疊部分。而且重疊部分的概率分布會比我們之前的任何一個估計值/讀數都精確得多,這個分布的均值就是兩種估計最有可能配置(得到的狀態)。

事實證明,兩個獨立的高斯分布相乘之後會得到一個新的具有其均值和協方差矩陣的高斯分布!合併兩個高斯分布,首先考慮一維高斯情況:一個均值為,方差為的高斯分布的形式為:

兩個高斯曲線相乘會發生什麼。下圖中的藍色曲線表示兩個高斯總體的(未歸一化)交集:

將公式(9)代入公式(10),我們可以得到新的高斯分布的均值和方差如下所示:

其中的一小部分重寫為:

將公式(12)和(13)的矩陣形式寫在下面:

其中表示新高斯分布的協方差矩陣,是每個維度的均值,就是大名鼎鼎的「卡爾曼增益」(Kalman gain)。

預測的觀測和實際的觀測服從高斯分布,將其代入(15)得到二者的重疊區域

從公式(14)我們可以知道,卡爾曼增益是:

然後我們將公式(16)與公式(17)中的去除,同時將後面的去除,我們可以得到最終的化簡形式的更新方程:

預測

更新後的最優狀態!接下來我們可以繼續進行預測,然後更新,重複上述過程。下圖給出卡爾曼濾波信息流:

總結

對於非線性系統,我們使用擴展卡爾曼濾波器,該濾波器通過簡單地線性化預測和測量值的均值進行工作。

記住所有知識或許不容易,但是能記得運行已經實屬不易。

這裡是為你搜小知識~

每天學一點,不可貪杯哦

歡迎留言你想了解的內容。

不想錯過三分鐘學習機會,請關注吧~

參考資料

[1]: How a Kalman filter works, in pictures, 圖解卡爾曼濾波是如何工作的:http://www.bzarg.com/p/how-a-kalman-filter-works-in-pictures/#mathybits[2]: A geometric interpretation of the covariance matrix, 協方差矩陣的幾何解釋: https://www.visiondummy.com/2014/04/geometric-interpretation-covariance-matrix[3]: Kalman Filter 卡爾曼濾波:https://sikasjc.github.io/2018/05/08/kalman_filter

相關焦點

  • 卡爾曼與卡爾曼濾波
    卡爾曼濾波的一個典型實例是從一組有限的,包含噪聲的,對物體位置的觀察序列(可能有偏差)預測出物體的位置的坐標及速度。在很多工程應用(如雷達、計算機視覺)中都可以找到它的身影。同時,卡爾曼濾波也是控制理論以及控制系統工程中的一個重要課題。
  • 詳解卡爾曼濾波原理
    意外的是很少有軟體工程師和科學家對對它有所了解,這讓我感到沮喪,因為卡爾曼濾波是一個如此強大的工具,能夠在不確定性中融合信息,與此同時,它提取精確信息的能力看起來不可思議。什麼是卡爾曼濾波?你可以在任何含有不確定信息的動態系統中使用卡爾曼濾波,對系統下一步的走向做出有根據的預測,即使伴隨著各種幹擾,卡爾曼濾波總是能指出真實發生的情況。
  • 卡爾曼濾波算法解析(一)
    在工程領域,只要涉及到信號處理問題,都繞不開一個人,那就是卡爾曼,雖然卡爾曼提出的估計理論已經過去八九十年之久
  • 卡爾曼濾波應用實例
    打開APP 卡爾曼濾波應用實例 發表於 2017-10-30 09:27:47
  • 深度解讀:卡爾曼濾波原理
    原文連結:http://www.bzarg.com/p/how-a-kalman-filter-works-in-pictures/我不得不說說卡爾曼濾波,因為它能做到的事情簡直讓人驚嘆!意外的是很少有軟體工程師和科學家對對它有所了解,這讓我感到沮喪,因為卡爾曼濾波是一個如此強大的工具,能夠在不確定性中融合信息,與此同時,它提取精確信息的能力看起來不可思議。
  • 透徹理解擴展卡爾曼濾波
    卡爾曼濾波是貝葉斯濾波的一種特例,是在線性濾波的前提下,以最小均方誤差為最佳準則的。估計線性高斯模型,是對線性模型和高斯分布的優化方法。邊緣分布和條件分布的模型:卡爾曼濾波器的主要參數卡爾曼濾波器假設x(paths), z(observations)都為線性高斯的:主要參數:A是在沒有命令的情況下,由於環境因素造成的機器人的位置移動。
  • 車載毫米波雷達之大話卡爾曼濾波
    所以,卡爾曼濾波在毫米波雷達的應用上,就扮演著至關重要的角色。卡爾曼&卡爾曼濾波什麼是卡爾曼濾波?卡爾曼濾波和傅立葉變換、泰勒級數一樣,都是以其發明人命名。稍微不同的是,卡爾曼是個現代人!卡爾曼是匈牙利數學家,1930年出生於匈牙利首都布達佩斯。
  • 卡爾曼濾波,如此強大的工具,你值得弄懂!
    原文連結:http://www.bzarg.com/p/how-a-kalman-filter-works-in-pictures/我不得不說說卡爾曼濾波,因為它能做到的事情簡直讓人驚嘆!意外的是很少有軟體工程師和科學家對對它有所了解,這讓我感到沮喪,因為卡爾曼濾波是一個如此強大的工具,能夠在不確定性中融合信息,與此同時,它提取精確信息的能力看起來不可思議。
  • 卡爾曼濾波的原理
    我們現在要學習的卡爾曼濾波器,正是源於他的博士論文和1960年發表的論文《A New Approach to Linear Filtering and Prediction Problems》(線性濾波與預測問題的新方法)。簡單來說,卡爾曼濾波器是一個「optimal recursive data processing algorithm(最優化自回歸數據處理算法)」。
  • 卡爾曼濾波及其衍生算法在SOC估計中的應用
    卡爾曼濾波作為一種去除幹擾數據,獲得優質估計結果的優秀算法,在許多領域得到應用。無人機定位、實驗數據處理以及動力電池的SOC、SOH等,需要作出參數估計的領域都有應用。本文意在初步的表述我可以理解到的卡爾曼濾波及其衍生算法的物理意義和算法間的區別。
  • 卡爾曼濾波在電容觸控螢幕坐標定位中的應用
    結果表明,卡爾曼濾波確實能夠有效去除噪聲,從而提高觸控螢幕坐標定位的準確性,具有很高的實用性。為此,針對主要影響因素——系統噪聲進行濾波,還原初始數據的有效信號有利於提高觸控螢幕的坐標定位準確度。在眾多的濾波方法中,經過實驗分析和對比,最終證實,卡爾曼濾波在還原原始數據和算法實現方面都有較好的優勢。
  • 深入淺出講解卡爾曼濾波(附Matlab程序)
    在學習卡爾曼濾波器之前,首先看看為什麼叫「卡爾曼」。跟其他著名的理論(例如傅立葉變換,泰勒級數等等)一樣,卡爾曼也是一個人的名字,而跟他們不同的是,他是個現代人!學過控制的應該都知道,卡爾曼是現代控制理論的奠基人!卡爾曼全名Rudolf Emil Kalman,匈牙利數學家,1930年出生於匈牙利首都布達佩斯。
  • 深度解讀:卡爾曼濾波,如此強大的工具 你值得弄懂!
    意外的是很少有軟體工程師和科學家對對它有所了解,這讓我感到沮喪,因為卡爾曼濾波是一個如此強大的工具,能夠在不確定性中融合信息,與此同時,它提取精確信息的能力看起來不可思議。什麼是卡爾曼濾波?你可以在任何含有不確定信息的動態系統中使用卡爾曼濾波,對系統下一步的走向做出有根據的預測,即使伴隨著各種幹擾,卡爾曼濾波總是能指出真實發生的情況。
  • 看完這篇卡爾曼濾波原理,我被驚到了!
    在網上看了不少與卡爾曼濾波相關的博客、論文,要麼是只談理論、缺乏感性,或者有感性認識,缺乏理論推導。能兼顧二者的少之又少,直到我看到了國外的一篇博文,真的驚豔到我了,不得不佩服作者這種細緻入微的精神,翻譯過來跟大家分享一下。 我不得不說說卡爾曼濾波,因為它能做到的事情簡直讓人驚嘆!
  • 深度解讀:卡爾曼濾波,如此強大的工具 你值得弄懂
    意外的是很少有軟體工程師和科學家對對它有所了解,這讓我感到沮喪,因為卡爾曼濾波是一個如此強大的工具,能夠在不確定性中融合信息,與此同時,它提取精確信息的能力看起來不可思議。什麼是卡爾曼濾波?你可以在任何含有不確定信息的動態系統中使用卡爾曼濾波,對系統下一步的走向做出有根據的預測,即使伴隨著各種幹擾,卡爾曼濾波總是能指出真實發生的情況。
  • 卡爾曼濾波應用於自動駕駛
    自主車輛的組成部分卡爾曼濾波器使用的數據來自LIDAR和RADAR 。所以現在只關注這兩個方面。為何使用卡爾曼濾波器?我們可以使用卡爾曼濾波器進行有根據的猜測,在我們對某些動態系統有不確定信息的任何地方,系統將要做什麼。在自主車輛的情況下,卡爾曼濾波器可用於根據我們的車輛接收的數據預測我們的自動駕駛車輛前方的車輛將採取的下一組動作。這是一個使用兩步預測和更新的迭代過程。
  • 卡爾曼濾波 – Kalman Filter 通俗的解釋及原理
    我們最終的預測值或濾波值是後驗預測值^X(k+1|k+1),因此最後的預測也應使 ~X(k+1|k+1) 的期望為0且方差最小(這與讓8式兩端的差最小是一致的,下面的式9體現了這一點),這樣預測值才最可靠。下面詳細說明。
  • 中科大發展出基於卡爾曼濾波的實時地震定位算法
    為此,中國科學技術大學地球和空間科學學院、地震與地球內部物理實驗室、科技部蒙城野外觀測站張海江教授研究組與加拿大卡爾加裡大學David Eaton教授合作,發展了一種基於卡爾曼濾波的實時地震定位算法。新的實時地震定位算法把基於地震震相到時的線性地震定位算法表示為信號處理中常用的卡爾曼濾波系統,可以實現當一個新的臺站被觸發後,地震的位置和發震時刻及對應的不確定性可以實時地進行估算。實時地震定位的初始地震位置假定為第一個觸發的地震臺站。新的算法利用合成地震數據以及美國加州Parkfield地區發生的地震進行了有效性測試。
  • 技術|基於改進擴展卡爾曼濾波的鋰電池SOC估計
    【能源人都在看,點擊右上角加'關注'】導讀為了減小模型參數發生變化帶來的影響,提高鋰電池荷電狀態(SOC)的估計精度,提出了一種改進的擴展卡爾曼濾波算法(I-EKF)。電池荷電狀態(SOC)的定義是電池剩餘電量佔可用總電量的百分比。
  • 一篇教你看懂航天領域殿堂級理論——卡爾曼濾波
    在航天領域,卡爾曼濾波是一種殿堂級的理論,應用的到處都是,比如各種衛星軌道/姿態確定、狀態估計和預測、軌道任務設計等。這篇文章,筆者儘可能通俗解釋卡爾曼濾波理論。先來點背景音樂:我種下一顆種子,終於長出了果實。。好吧,假設你在去一個風景區旅遊的時候,種下了一棵果樹,但顯然從果樹幼苗到果實不是一天兩天能完成的啊,需要慢慢長高。