0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

卡爾曼濾波算法的基本原理

CHANBAEK ? 來(lái)源:撞上電子 ? 作者: 墨竹公子 ? 2023-12-07 18:26 ? 次閱讀

卡爾曼濾波(Kalman Filter)是一種遞歸的、自適應(yīng)的濾波算法,廣泛應(yīng)用于估計(jì)系統(tǒng)狀態(tài)和觀測(cè)過程中的噪聲。它最初在1960年被提出,被認(rèn)為是控制理論和信號(hào)處理領(lǐng)域中最重要的發(fā)展之一??柭?a href="http://ttokpm.com/tags/濾波器/" target="_blank">濾波器在許多領(lǐng)域,包括導(dǎo)航、機(jī)器人、金融和通信系統(tǒng)中都有廣泛的應(yīng)用。

1,基本原理:

卡爾曼濾波器的核心思想是融合系統(tǒng)的動(dòng)態(tài)模型和實(shí)際的觀測(cè)數(shù)據(jù),通過對(duì)過程和測(cè)量噪聲的估計(jì),提供對(duì)系統(tǒng)狀態(tài)的最優(yōu)估計(jì)。其基本原理可以分為兩個(gè)步驟:預(yù)測(cè)(Predict)和更新(Update)。

預(yù)測(cè)(Predict):

在預(yù)測(cè)階段,卡爾曼濾波器使用系統(tǒng)的動(dòng)態(tài)模型,以及先前的狀態(tài)估計(jì)來(lái)預(yù)測(cè)系統(tǒng)的下一個(gè)狀態(tài)。這一過程基于系統(tǒng)的狀態(tài)方程和控制輸入,考慮系統(tǒng)的動(dòng)態(tài)演變。預(yù)測(cè)的結(jié)果是對(duì)系統(tǒng)狀態(tài)的先驗(yàn)估計(jì),其中考慮了系統(tǒng)的動(dòng)態(tài)行為??柭鼮V波的狀態(tài)方程通常表示為:

圖片

其中,Xk是系統(tǒng)狀態(tài)向量,F(xiàn) 是狀態(tài)轉(zhuǎn)移矩陣,B 是輸入矩陣,Uk是控制輸入向量,Wk是過程噪聲。

更新(Update):

在更新階段,卡爾曼濾波器使用實(shí)際的測(cè)量數(shù)據(jù)來(lái)校正先前的狀態(tài)估計(jì)。這一過程基于測(cè)量方程和測(cè)量噪聲,考慮了觀測(cè)到的系統(tǒng)輸出。更新的結(jié)果是對(duì)系統(tǒng)狀態(tài)的后驗(yàn)估計(jì),其中融合了測(cè)量信息

卡爾曼濾波的測(cè)量方程通常表示為:

圖片

其中,Zk是測(cè)量向量,H是測(cè)量矩陣,Vk測(cè)量噪聲。

2,狀態(tài)估計(jì)的迭代過程:

卡爾曼濾波是一個(gè)迭代的過程,其更新步驟依賴于預(yù)測(cè)和測(cè)量的相互作用。以下是卡爾曼濾波的迭代過程:

初始化: 首先,需要初始化卡爾曼濾波器的狀態(tài)估計(jì)(X0)和協(xié)方差矩陣(P0)

預(yù)測(cè): 使用系統(tǒng)的狀態(tài)方程進(jìn)行狀態(tài)的預(yù)測(cè),并更新狀態(tài)的協(xié)方差矩陣。這一步考慮了系統(tǒng)的動(dòng)態(tài)演變和過程噪聲。其中,Xk是先驗(yàn)狀態(tài)估計(jì),Pk是先驗(yàn)協(xié)方差矩陣,Q是過程噪聲協(xié)方差矩陣。

圖片

測(cè)量更新: 使用測(cè)量方程將預(yù)測(cè)的狀態(tài)與實(shí)際的測(cè)量數(shù)據(jù)進(jìn)行比較,從而校正狀態(tài)估計(jì),并更新協(xié)方差矩陣。這一步考慮了觀測(cè)到的系統(tǒng)輸出和測(cè)量噪聲。其中,Kk 是卡爾曼增益,R是測(cè)量噪聲協(xié)方差矩陣,Xk 是后驗(yàn)狀態(tài)估計(jì),Pk 是后驗(yàn)協(xié)方差矩陣。

圖片

重復(fù): 重復(fù)預(yù)測(cè)和測(cè)量更新步驟,將后驗(yàn)狀態(tài)估計(jì)作為下一步的先驗(yàn)狀態(tài)估計(jì),持續(xù)迭代。

3,關(guān)鍵概念:

卡爾曼增益: 卡爾曼增益是一個(gè)關(guān)鍵的概念,它決定了預(yù)測(cè)和測(cè)量更新之間的相對(duì)權(quán)重。卡爾曼增益越大,系統(tǒng)對(duì)測(cè)量數(shù)據(jù)的依賴性越強(qiáng),反之亦然。

協(xié)方差矩陣: 協(xié)方差矩陣描述了狀態(tài)估計(jì)的不確定性。通過在迭代過程中更新協(xié)方差矩陣,卡爾曼濾波器能夠動(dòng)態(tài)調(diào)整對(duì)狀態(tài)估計(jì)的信任程度。

過程噪聲和測(cè)量噪聲: 過程噪聲和測(cè)量噪聲是卡爾曼濾波中的兩個(gè)關(guān)鍵參數(shù),它們用于描述系統(tǒng)動(dòng)態(tài)模型和測(cè)量過程中的不確定性。適當(dāng)估計(jì)和調(diào)整這些噪聲是卡爾曼濾波器性能的關(guān)鍵。

4,示例代碼:

#include < stdio.h >
// 定義狀態(tài)向量的維度
#define STATE_DIM 2
// 定義測(cè)量向量的維度
#define MEASURE_DIM 1


// 定義卡爾曼濾波器結(jié)構(gòu)體
typedef struct {
    // 狀態(tài)估計(jì)向量
    float x[STATE_DIM];
    // 狀態(tài)協(xié)方差矩陣
    float P[STATE_DIM][STATE_DIM];
    // 過程噪聲協(xié)方差矩陣
    float Q[STATE_DIM][STATE_DIM];
    // 測(cè)量噪聲協(xié)方差矩陣
    float R[MEASURE_DIM][MEASURE_DIM];
    // 狀態(tài)轉(zhuǎn)移矩陣
    float F[STATE_DIM][STATE_DIM];
    // 測(cè)量矩陣
    float H[MEASURE_DIM][STATE_DIM];
} KalmanFilter;


// 初始化卡爾曼濾波器
void kalmanFilterInit(KalmanFilter *kf, float initialX, float initialP);
// 卡爾曼濾波預(yù)測(cè)步驟
void kalmanPredict(KalmanFilter *kf, float controlInput);
// 卡爾曼濾波更新步驟
void kalmanUpdate(KalmanFilter *kf, float measurement);


int main() {
    // 初始化卡爾曼濾波器
    KalmanFilter kf;
    kalmanFilterInit(&kf, 0.0, 1.0);


    // 模擬輸入數(shù)據(jù)
    float controlInput = 0.1;
    float measurementNoise = 0.5;


    // 模擬10次迭代
    for (int i = 0; i < 10; ++i) {
        // 預(yù)測(cè)步驟
        kalmanPredict(&kf, controlInput);
        // 模擬測(cè)量
        float trueMeasurement = 2.0 * kf.x[0] + measurementNoise;

        // 更新步驟
        kalmanUpdate(&kf, trueMeasurement);


        // 打印結(jié)果
        printf("Iteration %d - True Value: %f, Estimated Value: %fn", i + 1, trueMeasurement, kf.x[0]);
    }


    return 0;
}




// 初始化卡爾曼濾波器
void kalmanFilterInit(KalmanFilter *kf, float initialX, float initialP) {
    // 初始化狀態(tài)估計(jì)向量
    kf- >x[0] = initialX;
    kf- >x[1] = 0.0;
    // 初始化狀態(tài)協(xié)方差矩陣
    kf- >P[0][0] = initialP;
    kf- >P[0][1] = 0.0;
    kf- >P[1][0] = 0.0;
    kf- >P[1][1] = initialP;
    // 初始化過程噪聲協(xié)方差矩陣
    kf- >Q[0][0] = 0.001;
    kf- >Q[0][1] = 0.0;
    kf- >Q[1][0] = 0.0;
    kf- >Q[1][1] = 0.001;
    // 初始化測(cè)量噪聲協(xié)方差矩陣
    kf- >R[0][0] = 0.01;


    // 初始化狀態(tài)轉(zhuǎn)移矩陣
    kf- >F[0][0] = 1.0;
    kf- >F[0][1] = 1.0;
    kf- >F[1][0] = 0.0;
    kf- >F[1][1] = 1.0;
    // 初始化測(cè)量矩陣
    kf- >H[0][0] = 1.0;
    kf- >H[0][1] = 0.0;
}




// 卡爾曼濾波預(yù)測(cè)步驟
void kalmanPredict(KalmanFilter *kf, float controlInput) {
    // 預(yù)測(cè)狀態(tài)估計(jì)
    kf- >x[0] = kf- >F[0][0] * kf- >x[0] + kf- >F[0][1] * kf- >x[1] + controlInput;
    // 預(yù)測(cè)狀態(tài)協(xié)方差矩陣
    kf- >P[0][0] = kf- >F[0][0] * kf- >P[0][0] * kf- >F[0][0] + kf- >F[0][1] * kf- >P[1][0];
    kf- >P[0][1] = kf- >F[0][0] * kf- >P[0][1] * kf- >F[0][1] + kf- >F[0][1] * kf- >P[1][1];
    kf- >P[1][0] = kf- >F[1][0] * kf- >P[0][0] * kf- >F[0][0] + kf- >F[1][1] * kf- >P[1][0];
    kf- >P[1][1] = kf- >F[1][0] * kf- >P[0][1] * kf- >F[0][1] + kf- >F[1][1] * kf- >P[1][1] + kf- >Q[1][1];
}
// 卡爾曼濾波更新步驟
void kalmanUpdate(KalmanFilter *kf, float measurement) {
    // 計(jì)算卡爾曼增益
    float K[STATE_DIM][MEASURE_DIM];
    float S;


    // 計(jì)算卡爾曼增益
    S = kf- >H[0][0] * kf- >P[0][0] * kf- >H[0][0] + kf- >R[0][0];
    K[0][0] = kf- >P[0][0] * kf- >H[0][0] / S;
    K[1][0] = kf- >P[1][0] * kf- >H[0][0] / S;


    // 更新狀態(tài)估計(jì)
    kf- >x[0] = kf- >x[0] + K[0][0] * (measurement - kf- >H[0][0] * kf- >x[0]);
    kf- >x[1] = kf- >x[1] + K[1][0] * (measurement - kf- >H[0][0] * kf- >x[0]);


    // 更新狀態(tài)協(xié)方差矩陣
    kf- >P[0][0] = (1 - K[0][0] * kf- >H[0][0]) * kf- >P[0][0];
    kf- >P[0][1] = (1 - K[0][0] * kf- >H[0][0]) * kf- >P[0][1];
    kf- >P[1][0] = -K[1][0] * kf- >H[0][0] * kf- >P[0][0] + kf- >P[1][0];
    kf- >P[1][1] = -K[1][0] * kf- >H[0][0] * kf- >P[0][1] + kf- >P[1][1];
}

卡爾曼濾波的優(yōu)勢(shì)在于它能夠提供對(duì)系統(tǒng)狀態(tài)的最優(yōu)估計(jì),同時(shí)適應(yīng)于線性和高斯噪聲的系統(tǒng)。然而,卡爾曼濾波也有一些限制,例如對(duì)非線性系統(tǒng)的適應(yīng)性較差,且需要對(duì)系統(tǒng)動(dòng)態(tài)模型和噪聲參數(shù)進(jìn)行良好的估計(jì)。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 濾波器
    +關(guān)注

    關(guān)注

    160

    文章

    7703

    瀏覽量

    177476
  • 濾波算法
    +關(guān)注

    關(guān)注

    2

    文章

    88

    瀏覽量

    13705
  • 卡爾曼濾波算法
    +關(guān)注

    關(guān)注

    0

    文章

    12

    瀏覽量

    2098
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    卡爾濾波的原理和C代碼

    濾波器在許多領(lǐng)域,包括導(dǎo)航、機(jī)器人、金融和通信系統(tǒng)中都有廣泛的應(yīng)用。1,基本原理卡爾濾波器的核心思想是融合系統(tǒng)的動(dòng)態(tài)模型和實(shí)際的觀測(cè)數(shù)據(jù)
    的頭像 發(fā)表于 12-07 08:08 ?2766次閱讀
    <b class='flag-5'>卡爾</b><b class='flag-5'>曼</b><b class='flag-5'>濾波</b>的原理和C代碼

    卡爾濾波

    卡爾濾波的估計(jì)值能很好的逼近真實(shí)值,我的疑惑是,這和濾波有什么關(guān)系,請(qǐng)高手介紹下卡爾
    發(fā)表于 07-04 22:57

    圖書分享:卡爾濾波算法的幾何解釋

    網(wǎng)上搜到一篇關(guān)于卡爾濾波算法的論文,對(duì)低維卡爾濾波
    發(fā)表于 06-11 15:28

    卡爾濾波算法

    已知測(cè)量值和原始值,但測(cè)量噪聲和觀測(cè)噪聲未知,如何進(jìn)行卡爾濾波。之前看了好像可以用自適應(yīng)卡爾,但不是很懂,求例子,最好有注釋的
    發(fā)表于 03-23 19:12

    LabVIEW一維卡爾濾波算法

    最近正在學(xué)習(xí)卡爾濾波算法,用LabVIEW仿照C語(yǔ)言寫了個(gè)一維的卡爾
    發(fā)表于 10-21 21:15

    卡爾濾波基本原理及應(yīng)用

    卡爾濾波基本原理及應(yīng)用
    發(fā)表于 05-05 09:26

    卡爾濾波簡(jiǎn)介

    希望這篇筆記可以幫助到你。卡爾濾波(Kalman filtering)是一種利用線性系統(tǒng)狀態(tài)方程,通過系統(tǒng)輸入輸出觀測(cè)數(shù)據(jù),對(duì)系統(tǒng)狀態(tài)進(jìn)行最優(yōu)估計(jì)的算法。
    發(fā)表于 02-28 14:24

    卡爾濾波算法對(duì)比其他的濾波算法有什么優(yōu)點(diǎn)?

    卡爾濾波算法對(duì)比其他的濾波算法有什么優(yōu)點(diǎn)
    發(fā)表于 10-11 06:42

    卡爾濾波方程的改進(jìn)算法及應(yīng)用

    針對(duì)卡爾濾波的缺點(diǎn),提出了一種卡爾濾波的改進(jìn)算法,然后將其應(yīng)用到給合導(dǎo)航系統(tǒng)中,并用實(shí)例對(duì)該法
    發(fā)表于 07-10 10:01 ?37次下載

    卡爾濾波算法的改進(jìn)方案

    卡爾濾波 算法具有收斂平穩(wěn)、速度快、精度高的優(yōu)點(diǎn),在信號(hào)處理中受到廣泛應(yīng)用。但由于卡爾
    發(fā)表于 06-14 16:36 ?0次下載
    <b class='flag-5'>卡爾</b><b class='flag-5'>曼</b><b class='flag-5'>濾波</b><b class='flag-5'>算法</b>的改進(jìn)方案

    卡爾濾波算法

    卡爾濾波算法
    發(fā)表于 12-17 17:22 ?52次下載

    基于SOM降階卡爾濾波算法在組合導(dǎo)航上的應(yīng)用

    本文在簡(jiǎn)單介紹了卡爾濾波基本原理基礎(chǔ)上,基于分段線性系統(tǒng)理論以及SOM方法對(duì)系統(tǒng)狀態(tài)可觀性和可觀度的分析,采用降階卡爾
    發(fā)表于 11-05 15:34 ?12次下載
    基于SOM降階<b class='flag-5'>卡爾</b><b class='flag-5'>曼</b><b class='flag-5'>濾波</b><b class='flag-5'>算法</b>在組合導(dǎo)航上的應(yīng)用

    卡爾濾波器的基本原理

    卡爾濾波器是一種基礎(chǔ)預(yù)測(cè)定位算法。原理非常簡(jiǎn)單易懂。
    的頭像 發(fā)表于 03-21 13:47 ?5935次閱讀

    擴(kuò)展卡爾濾波的原理

    在很多實(shí)際工程問題當(dāng)中,非線性系統(tǒng)占大多數(shù),而卡爾提出來(lái)的卡爾濾波器是一種針對(duì)線性系統(tǒng)的估計(jì)算法
    的頭像 發(fā)表于 08-12 10:06 ?5526次閱讀
    擴(kuò)展<b class='flag-5'>卡爾</b><b class='flag-5'>曼</b><b class='flag-5'>濾波</b>的原理

    卡爾濾波算法c語(yǔ)言實(shí)現(xiàn)方法

    卡爾濾波(Kalman Filter)是一種用于估計(jì)狀態(tài)的算法,最初由R.E. Kalman在1960年提出。它是一種線性高斯濾波器,常用
    的頭像 發(fā)表于 01-17 10:51 ?2562次閱讀