RTKLIB软件源码学习(Kalman滤波-矩阵先导)

本文详细介绍了RTKLIB软件中用于Kalman滤波的矩阵操作,包括简单矩阵和进阶矩阵的函数,如mat()、imat()、matmul()、ludcmp()等。通过这些函数,可以实现矩阵的创建、乘法、求逆等操作,用于EKF在RTK定位系统的误差修正和不确定性处理。
摘要由CSDN通过智能技术生成

本文是学习记录关于rib源码中使用的kalman滤波,因为整个定位系统存在误差以及不确定性,需要使用kalman滤波进行预测和平滑,在rtklib中使用的是EKF,即扩展kalman滤波,具体关于kalman滤波理论的学习参考这里,同样,本文仅解读代码部分。

首先了解定义函数部分,由于部分定义函数仅适用于矩阵方面,因此将这部分定义函数的解读放在kalman滤波这里。

目录

1、简单矩阵

1.1、mat()

1.2、imat()

1.3、 zero()

1.4、eye()

1.5、dot()

1.6、norm()

1.7、 matcopy()

2、进阶矩阵

2.1、matmul()

2.2、ludcmp()

2.3、lubksb()

2.4、matinv()

2.5、 solve()


1、简单矩阵

1.1、mat()

创建一个n*m的矩阵 

/* new matrix ------------------------------------------------------------------
* allocate memory of matrix 
* args   : int    n,m       I   number of rows and columns of matrix
* return : matrix pointer (if n<=0 or m<=0, return NULL)
*-----------------------------------------------------------------------------*/
extern double *mat(int n, int m)
{
    double *p;
    
    if (n<=0||m<=0) return NULL;//首先判定n和m是否大于0
    if (!(p=(double *)malloc(sizeof(double)*n*m))) {
    //这里是为一个n行m列的矩阵开辟内存空间,并同时进行是否开辟正常的判定
        fatalerr("matrix memory allocation error: n=%d,m=%d\n",n,m);
    }
    return p;
}

1.2、imat()

创造一个n*m的整数矩阵,int类型

/* new integer matrix ----------------------------------------------------------
* allocate memory of integer matrix 
* args   : int    n,m       I   number of rows and columns of matrix
* return : matrix pointer (if n<=0 or m<=0, return NULL)
*-----------------------------------------------------------------------------*/
extern int *imat(int n, int m)
{
    int *p;
    
    if (n<=0||m<=0) return NULL;
    if (!(p=(int *)malloc(sizeof(int)*n*m))) {
        fatalerr("integer matrix memory allocation error: n=%d,m=%d\n",n,m);
    }
    return p;
}

1.3、 zero()

创造一个n*m的0矩阵

/* zero matrix -----------------------------------------------------------------
* generate new zero matrix
* args   : int    n,m       I   number of rows and columns of matrix
* return : matrix pointer (if n<=0 or m<=0, return NULL)
*-----------------------------------------------------------------------------*/
extern double *zeros(int n, int m)
{
    double *p;
    
#if NOCALLOC
    if ((p=mat(n,m))) for (n=n*m-1;n>=0;n--) p[n]=0.0;
#else//首先创造一个n*m矩阵,然后通过循环将矩阵的每一个元素的值减到0
    if (n<=0||m<=0) return NULL;
    if (!(p=(double *)calloc(sizeof(double),n*m))) {
        fatalerr("matrix memory allocation error: n=%d,m=%d\n",n,m);
    }
#endif//不清楚这部分为什么多个定义
    return p;
}

1.4、eye()

创造一个n*n的主对角线元素为1的矩阵

/* identity matrix --------------------
  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值