均方根信息滤波(SRIF)测试(一)

本文介绍了SRIF(均方根信息滤波)的基础概念,并展示了如何使用Householder变换进行上三角分解,接着通过Cholesky分解和反向替换求解逆上三角矩阵。此外,还提供了SRIF的测试代码,用于估计数据中的参数并比较真实值和估计值。
均方根信息滤波(Square Root Information Filter)由于具有更好的数值稳定性而被广泛使用。参考Gerald J.Bierman的Factorization Methods for Discrete Sequential Estimation 对SRIF的基本原理进行了学习,并完成了SRIF的仿真数据测试,该方法在实现中暂未考虑状态方程的过程噪声,因此仅仅适用于不随时间变化的参数估计问题。数据仿真采用的是抛物线y=ax^2 + bx + c;其中a=3.2,b=1.2,c=3.0。对其中的参数a、b和c进行参数估计。仿真噪声服从0均值,标准差为1.2的正态分布。其测试结果如下:
图片
图片
 


其中进行SRIF滤波解算的代码如下:


double randn(double myu, double sig)

{

    double PI = 3.14159265357;

    double a,b;

    a=((double)rand()+1.0)/((double)RAND_MAX+1.0);  

    b=((double)rand()+1.0)/((double)RAND_MAX+1.0);  

    return myu+sqrt(-2.0*log(a))*sin(2.0*PI*b)*sig;

}


void HouseholderUpperTri( double* M,int num_of_row, int num_of_column )

{

    int colcount = 0;

    int m = num_of_row;

    int n = num_of_column;

    double* A = M ; 

    int test = num_of_row<=num_of_column?(m-1):(n-1);

    double *u = new double[num_of_row];

    

    while( A != NULL )

    {

        if( colcount >= test+1 )

        {

            break;

        }

        

        double s =0.0 ,s1 =0.0,b =0.0,r = 0.0 ;

        int t =0 , i =0, j = 0 ;

        if( *A >= 0 ) t = 1;

        else if( *A < 0 ) t =-1;

        for( i = 0; i<m;i++ )

        {

            s1+=  (*(A+i*num_of_column ))*(*(A+i*num_of_column ));

        }

        s = -t*sqrt(s1); 

        memset(u,0,sizeof(double)*num_of_row);

        for( i =0 ; i<m; i++ )

        {

            if( i == 0 )

            {

                u[i] = *A - s;

            }

            else

            {

### 均方根信息滤波与卡尔曼滤波的区别与联系 #### 定义与基本原理 均方根信息滤波(Root Mean Square Information Filtering)主要关注于通过计算信号的均方根误差(RMSE),从而评估并优化估计精度。该方法侧重于衡量预测值和真实值之间的差异程度。 相比之下,卡尔曼滤波种递归算法,在处理线性动态系统的状态估计问题上表现优异[^4]。其核心在于利用系列测量观测数据来更新对系统内部状态的最佳估计,并且能够有效地减少噪声干扰的影响。 #### 数学表达形式 对于均方根信息滤波而言,通常会涉及到如下公式用于评价性能: \[ RMSE = \sqrt{\frac{1}{N}\sum_{i=1}^{N}(y_i-\hat{y}_i)^2} \] 其中 \( y_i \) 表示实际观测值,\( \hat{y}_i \) 是对应的预测值,而 N 则代表样本数量。 而在卡尔曼滤波框架下,则存在更复杂的数学描述方式,包括但不限于以下几个方面: - **状态转移矩阵**:用来表示从当前时刻到下时刻的状态变化关系; - **过程噪声协方差矩阵** 和 **观测噪声协方差矩阵** :分别刻画了过程中以及观察中的不确定性因素; - 更新步长内的两个关键操作——时间更新(预测阶段)和测量更新(校正阶段); ```matlab % 时间更新 (预测) x_pred = A * x_est; P_pred = A * P_est * A' + Q; % 测量更新 (校正) K = P_pred * H' / (H * P_pred * H' + R); x_est = x_pred + K * (z - H * x_pred); P_est = (eye(size(x)) - K * H) * P_pred; ``` 这里展示了简单的离散时间卡尔曼滤波器的时间更新和测量更新步骤[^3]。 #### 应用场景对比 当面对较为简单的问题情境时,如果只需要定量分析估计效果的好坏而不涉及具体的过程建模的话,那么采用均方根信息作为评判标准可能是更为便捷的选择。 然而,在需要构建精确的动力学模型并对复杂环境下的目标进行实时追踪的情况下,比如自动驾驶车辆中的传感器融合任务[Lidar&Radar][^1],则更适合运用卡尔曼滤波技术来进行高效的数据处理。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值