搜索
bottom↓
回复: 3

EKF增益系数K

[复制链接]

出0入0汤圆

发表于 2012-9-6 17:21:30 | 显示全部楼层 |阅读模式
高维EKF滤波器,增益系数K的计算中,有高维矩阵逆运算,请问如何计算??

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2014-12-14 14:44:51 | 显示全部楼层
Pzz是吧。。。

出0入0汤圆

发表于 2014-12-14 14:52:19 | 显示全部楼层
Gauss消元法啊。
  1. CAL_STATUS MATRIX_Inv(MATRIX_TypeDef* A, MATRIX_TypeDef* res)
  2. {

  3.    int i, j, k;

  4.    float m, det = 1, tempBuf[A->nCol*A->nRow];

  5.    if((A->nRow != res->nRow) || (A->nCol != res->nCol) || (A->nCol != A->nRow))
  6.         return CAL_ERROR;

  7.    /*init Buf*/

  8.    for(i = 0; i < A->nCol*A->nCol; i++)
  9.        *(res->pData) = 0.0;

  10.    for(i = 0; i< A->nCol; i++)
  11.        *(res->pData + i + i*A->nRow) = 1;

  12.    for(i = 0; i < A->nCol*A->nCol; i++)
  13.        tempBuf[i] = *(A->pData + i);

  14.     /*Gauss*/
  15.    for(i = 0; (i < A->nCol-1); i++)
  16.    {
  17.        for(k = i+1; k < A->nCol; k++ )
  18.        {
  19.         /*Calculate M*/
  20.            m = *(A->pData + i + k*A->nCol) / *(A->pData + i + i*A->nCol);
  21.         /*Updata Row*/
  22.            for(j = i; j < A->nRow; j++)
  23.                *(A->pData + j + k*A->nCol) -= m * *(A->pData + j + i*A->nCol);
  24.            for(j = 0; j < A->nRow; j++)
  25.                *(res->pData + j + k*A->nCol) -= m * *(res->pData + j + i*A->nCol);
  26.        }

  27.    }

  28.    /*Check det*/
  29.    for(i = 0; i< A->nCol; i++)
  30.        det *= *(A->pData + i + i*A->nRow);

  31.     if(det < 0.00014)
  32.         return CAL_ERROR;

  33.     /*Call Back*/
  34.    for(i = A->nCol-1; i > 0; i--)
  35.    {

  36.         for(k = i-1; k >= 0; k--)
  37.         {
  38.             m = *(A->pData + i + k*A->nCol) / *(A->pData + i + i*A->nCol);
  39.             *(A->pData + i + k*A->nCol) -= m * *(A->pData + i + i*A->nCol);
  40.             for(j = 0; j < A->nCol; j++)
  41.                *(res->pData + j + k*A->nCol) -=  m * *(res->pData + j + i*A->nCol);
  42.         }
  43.    }

  44.    for(i = 0; i < A->nRow; i++)
  45.    {
  46.        for(k = 0; k < A->nRow; k++ )
  47.             *(res->pData + k + i*A->nCol) /=  *(A->pData + i + i*A->nCol);

  48.    }

  49.    for(i = 0; i < A->nCol*A->nCol; i++)
  50.        *(A->pData + i) = tempBuf[i];

  51.    return CAL_OK;

  52. }
复制代码


矩阵的定义是:
  1. typedef struct
  2. {
  3.     uint8_t nRow;   //行数
  4.     uint8_t nCol;   //列数
  5.     float*  pData;  //数据
  6. } MATRIX_TypeDef;
复制代码


出0入0汤圆

发表于 2014-12-14 23:05:47 | 显示全部楼层
可以考虑不用EKF,不太好算,UKF比较好
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-26 04:01

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表