青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

posts - 0,  comments - 5,  trackbacks - 0
  kalman濾波器聽著很深奧的一個東東,其實一點不難。
  我理解的kalman濾波就是通過為對象建立一個特定模型(例如直線勻速運動),來糾正實際觀測到的物體運動軌跡到我們認為的運動模型中。
其特點就是隨著時間的推移,物體的實際軌跡會逐漸趨近于真實軌跡(與建立的運動模型越來越吻合)。
  一個離散的kalman濾波器可以用2個方程來表示:
  時間更新方程:
 
 空間更新方程:

其中幾個參數的細微調節會影響整個濾波器的性能??梢酝ㄟ^嘗試去調節參數值。
詳細介紹參看:http://www.cs.unc.edu/~welch/kalman/
c++實現的代碼如下:
kalman.h
#ifndef __KALMAN_H__
#define __KALMAN_H__

#include 
"Matrix.h"

//discrete kalman filter
class CKalman  
{
public:
    CKalman();
    
~CKalman();

public:
    
/**************Init the param********************/
    
void SetA(CMatrix *pm);
    
void SetB(CMatrix *pm);
    
void SetH(CMatrix *pm);
    
void SetQ(CMatrix *pm);
    
void SetR(CMatrix *pm);

    
/*****************Input variable******************/
    
void InputX0(CMatrix *pm);
    
void InputP0(CMatrix *pm);
    
void InputUkprev(CMatrix *pm);
    
void InputZk(CMatrix *pm);

    
void AssertParam();
public:
    
//time refresh equation
    void RefreshTimeVar();

    
//status refresh equation
    void RefreshStatus();

    
void OutputResult(double *p);

private:
    CMatrix 
*m_pA; //state plus matrix A
    CMatrix *m_pB; //control plus matrix B
    CMatrix *m_pPkPriori; //Priori estimation Pk-
    CMatrix *m_pPkPosteriori; //Posteriori estimation Pk
    CMatrix *m_pPkprev; //Posteriori estimation Pk-1
    CMatrix *m_pH; 
    CMatrix 
*m_pK; //kalman plus matrix
    CMatrix *m_pQ;
    CMatrix 
*m_pR;

    CMatrix 
*m_pXkprev; //Xk-1
    CMatrix *m_pXkPriori; //Priori estimation Xk-
    CMatrix *m_pXkPosteriori; //Posteriori estimation Xk
    CMatrix *m_pUkprev; //control variable;
    CMatrix *m_pZk; //observation variable;


    
bool m_bHasControlVarible;
    
}
;

#endif
kalman.cpp:
#include "kalman.h"
#include 
<assert.h>

CKalman::CKalman()
{
    m_pXkprev 
= NULL; 
    m_pXkPriori 
= NULL; 
    m_pXkPosteriori 
= NULL; 
    m_pUkprev 
= NULL;
    m_pZk 
= NULL;
    m_pA 
= NULL; 
    m_pB 
= NULL; 
    m_pPkPriori 
= NULL; 
    m_pPkPosteriori 
= NULL; 
    m_pPkprev 
= NULL; 
    m_pH 
= NULL; 
    m_pK 
= NULL; 
    m_pQ 
= NULL;
    m_pR 
= NULL;
    m_bHasControlVarible 
= false;
}


CKalman::
~CKalman()
{
    
if (NULL != m_pPkPriori)
    
{
        delete m_pPkPriori;
    }

    
if (NULL != m_pPkPosteriori)
    
{
        delete m_pPkPosteriori;
    }

    
if (NULL != m_pXkPriori)
    
{
        delete m_pXkPriori;
    }

    
if (NULL != m_pXkPosteriori)
    
{
        delete m_pXkPosteriori;
    }

    
}


void CKalman::SetA(CMatrix *pm)
{
    m_pA 
= pm;
}


void CKalman::SetB(CMatrix *pm)
{
    m_pB 
= pm;
}


void CKalman::SetH(CMatrix *pm)
{
    m_pH 
= pm;
}


void CKalman::SetQ(CMatrix *pm)
{
    m_pQ 
= pm;
}


void CKalman::SetR(CMatrix *pm)
{
    m_pR 
= pm;
}


void CKalman::AssertParam()
{
    assert(NULL 
!= m_pXkprev);
    assert(NULL 
!= m_pZk);
    assert(NULL 
!= m_pA);
    assert(NULL 
!= m_pPkprev);
    assert(NULL 
!= m_pH);
    assert(NULL 
!= m_pQ);
    assert(NULL 
!= m_pR);
    
if (m_bHasControlVarible)
    
{
        assert(NULL 
!= m_pUkprev);
        assert(NULL 
!= m_pB);
    }

}


void CKalman::InputX0(CMatrix *pm)
{
    m_pXkprev 
= pm;
    
    
long nWidth = m_pXkprev->getWidth();
    
long nHeight = m_pXkprev->getHeight();

    m_pXkPriori 
= new CMatrix(NULL, nWidth, nHeight);
    m_pXkPosteriori 
= new CMatrix(NULL, nWidth, nHeight);
}


void CKalman::InputP0(CMatrix *pm)
{
    m_pPkprev 
= pm;

    
long nWidth = m_pPkprev->getWidth();
    
long nHeight = m_pPkprev->getHeight();

    m_pPkPriori 
= new CMatrix(NULL, nWidth, nHeight);
    m_pPkPosteriori 
= new CMatrix(NULL, nWidth, nHeight);

}


void CKalman::InputUkprev(CMatrix *pm)
{
    
if (NULL == pm)
    
{
        m_bHasControlVarible 
= false;
    }

    
else
    
{
        m_bHasControlVarible 
= true;
        m_pUkprev 
= pm;
    }

}


void CKalman::InputZk(CMatrix *pm)
{
    m_pZk 
= pm;
}


void CKalman::RefreshTimeVar()
{
    AssertParam();
       
    
if (m_bHasControlVarible)
    
{
        
*m_pXkPriori = (*m_pA)*(*m_pXkprev) + (*m_pB)*(*m_pUkprev);  //1.9
    }

    
else
    
{
        
*m_pXkPriori = (*m_pA)*(*m_pXkprev);
    }

    
    
*m_pPkPriori = (*m_pA)*(*m_pPkprev)*(m_pA->Transpose()) + (*m_pQ); //1.10
}


void CKalman::RefreshStatus()
{
    assert(NULL 
!= m_pZk);
    
    CMatrix mPH;
    mPH 
= (*m_pPkPriori) * (m_pH->Transpose());

    CMatrix mTmp;
    ((
*m_pH) * mPH + (*m_pR)).GetInverse(mTmp);

    
long nHeight = mPH.getHeight();
    
long nWidth = mTmp.getWidth();
    CMatrix mK(NULL, nWidth, nHeight);

    m_pK 
= &mK;
    
*m_pK = mPH * mTmp; //1.11
    *m_pXkPosteriori = *m_pXkPriori + (*m_pK) * (*m_pZk - (*m_pH)*(*m_pXkPriori)); //1.12
    
    CMatrix mUnit(m_pK
->getHeight());
    
*m_pPkPosteriori = (mUnit - (*m_pK)*(*m_pH))*(*m_pPkPriori); //1.13

    
//recursion
    m_pPkprev = m_pPkPosteriori;
    m_pXkprev 
= m_pXkPosteriori;
    m_pZk 
= NULL;
}


void CKalman::OutputResult(double *p)
{
    m_pXkPosteriori
->GetValue(p);
}
其中的matrix實現代碼可以參考我以前的文章。
懶了就寫到這兒吧
posted on 2011-01-05 15:20 saha 閱讀(683) 評論(0)  編輯 收藏 引用

只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理



<2025年11月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

常用鏈接

留言簿

文章分類

文章檔案

收藏夾

搜索

  •  

最新評論

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲黄色性网站| 国产精品午夜电影| 亚洲一二三区在线| 欧美电影免费网站| 亚洲电影欧美电影有声小说| 国产色综合网| 久久蜜桃精品| 亚洲激情午夜| 午夜精品在线观看| 国产一区二区丝袜高跟鞋图片 | 亚洲午夜小视频| 亚洲黄色av一区| 影音先锋在线一区| 中文日韩在线视频| 欧美日韩一区二区国产| 一区二区三区久久网| 亚洲欧美成人一区二区三区| 国产精品萝li| 欧美成人国产va精品日本一级| 亚洲精品日产精品乱码不卡| 亚洲女人小视频在线观看| 国产亚洲毛片在线| 欧美激情视频一区二区三区在线播放 | 久久视频在线视频| 亚洲精品免费电影| 久久精品三级| 99在线精品观看| 国产精品一区二区久久久久| 久久综合国产精品台湾中文娱乐网 | 欧美在线观看一区二区三区| 亚洲国产精品精华液网站| 亚洲摸下面视频| 日韩亚洲在线| 亚洲二区视频| 国产香蕉久久精品综合网| 欧美日韩一区二区三区在线看| 久久久久久九九九九| 亚洲主播在线| 亚洲专区免费| 亚洲在线观看| 日韩视频在线观看| 亚洲第一福利视频| 蜜臀91精品一区二区三区| 久久婷婷国产综合国色天香| 欧美综合国产| 久久久久久久久久久久久女国产乱 | 亚洲国产日韩在线一区模特| 性做久久久久久| 亚洲影院色无极综合| 一区二区精品| av72成人在线| 午夜精品视频在线观看| 亚洲在线中文字幕| 欧美亚洲综合另类| 久久久亚洲成人| 欧美国产日韩一区二区三区| 欧美另类videos死尸| 国产精品久久久久久妇女6080| 国产精品婷婷午夜在线观看| 国产精品一区二区在线| 精品成人国产| 一本色道久久88综合亚洲精品ⅰ| 亚洲免费播放| 亚洲靠逼com| 亚洲欧美资源在线| 欧美aaaaaaaa牛牛影院| 亚洲日韩第九十九页| 一区二区三区日韩欧美| 久久国产精品99精品国产| 老司机精品久久| 欧美色播在线播放| 红桃视频一区| 亚洲自拍都市欧美小说| 亚洲第一精品福利| 亚洲在线免费| 欧美日韩国产在线一区| 亚洲风情亚aⅴ在线发布| 午夜精品福利视频| 最近中文字幕日韩精品| 欧美在线观看网址综合| 国产精品99一区| 亚洲人屁股眼子交8| 久久综合五月| 先锋影音久久久| 国产精品一国产精品k频道56| 亚洲九九精品| 亚洲日本va午夜在线电影| 免费在线观看成人av| 今天的高清视频免费播放成人| 欧美色图五月天| 亚洲毛片播放| 亚洲日本视频| 欧美日韩亚洲高清| 亚洲一区二区三区精品在线| 日韩视频国产视频| 欧美人在线观看| 亚洲午夜久久久久久久久电影院| 最新热久久免费视频| 欧美日韩福利视频| 国产精品毛片大码女人| 亚洲国产成人porn| 欧美国产亚洲视频| 欧美成人综合在线| aa级大片欧美| 亚洲综合色激情五月| 韩国在线视频一区| 欧美激情精品久久久久久久变态| 久久久亚洲高清| 中文有码久久| 久久精品国产亚洲一区二区三区 | 韩国v欧美v日本v亚洲v| 欧美高清视频在线| 欧美网站大全在线观看| 久久亚洲精品网站| 欧美日韩免费一区二区三区| 午夜视频一区| 欧美色中文字幕| 欧美成va人片在线观看| 国产精品免费一区二区三区在线观看| 狼狼综合久久久久综合网 | 国产精品一区二区三区四区| 欧美国产精品人人做人人爱| 国产精品一页| 亚洲调教视频在线观看| 亚洲乱码一区二区| 久久亚洲精品中文字幕冲田杏梨| 小处雏高清一区二区三区| 欧美日韩国产精品一区二区亚洲| 欧美激情视频一区二区三区不卡| 国产乱码精品一区二区三区不卡| 99爱精品视频| 久久久五月天| 久久精品亚洲一区二区| 亚洲日本激情| 国产精品久久久久久久9999| 久久综合久久综合久久综合| 欧美日韩一区二区三区| 欧美激情一区在线| 黄色日韩在线| 欧美在线3区| 欧美在线短视频| 国产精品久久久久影院色老大| 亚洲承认在线| 亚洲国产精品精华液2区45| 久久99伊人| 久久久最新网址| 欧美午夜在线观看| 亚洲精品人人| 欧美岛国激情| 亚洲精品影视在线观看| 久久精品一区二区三区四区| 欧美在线视频日韩| 欧美理论电影在线观看| av成人动漫| 香蕉国产精品偷在线观看不卡| 久久激情网站| 亚洲高清久久久| 一区二区三区不卡视频在线观看| 欧美精品一区二区三区久久久竹菊| 免费亚洲电影在线观看| 亚洲人午夜精品免费| 欧美激情视频一区二区三区不卡| 亚洲第一狼人社区| 亚洲一区二区三区午夜| 国产精品视频免费在线观看| 欧美在线播放一区| 亚洲人成网站影音先锋播放| 亚洲免费视频观看| 在线成人激情| 国产精品福利av| 欧美成年人视频| 亚洲日产国产精品| 男人的天堂亚洲在线| 亚洲图片在线观看| 在线观看亚洲一区| 国产乱子伦一区二区三区国色天香| 久久九九有精品国产23| 日韩一二三区视频| 蜜桃av一区二区三区| 欧美一区二区三区在线| 欧美国产精品va在线观看| 亚洲无线观看| 免费观看不卡av| 欧美影院在线播放| 在线视频中文亚洲| 亚洲欧洲精品一区二区三区不卡 | 欧美丝袜第一区| 女人色偷偷aa久久天堂| 久久成人免费网| 亚洲欧美精品一区| 中文在线资源观看网站视频免费不卡 | 久久精品中文字幕一区| 亚洲深夜福利在线| 久久综合成人精品亚洲另类欧美| 亚洲欧美卡通另类91av| 亚洲一区二区免费在线| 黄网动漫久久久| 国产精品亚洲视频| 一区二区日韩| 亚洲精品国产拍免费91在线|