一阶卡尔曼滤波C语言

本文介绍了卡尔曼滤波算法在C语言中的实现,包括头文件中的数据类型定义、卡尔曼滤波器结构体以及初始化和一阶卡尔曼滤波函数的代码片段。
摘要由CSDN通过智能技术生成

一、头文件定义

typedef unsigned char Kalman_U8;
typedef unsigned short int Kalman_U16;
typedef unsigned long int Kalman_U32;
typedef float Kalman_F8;

typedef enum
{
	KalmanResult_NULL,
	KalmanResult_OK,
	KalmanResult_ERROR,
}
KalmanResult_Typedef;

typedef struct
{
	Kalman_F8 LastP;		//上次协方差
	Kalman_F8 NowP;			//当前协方差
	Kalman_F8 X_hat;		//卡尔曼滤波计算值
	Kalman_F8 Kg;			//卡尔曼增益系数
	Kalman_F8 Q;			//过程噪声
	Kalman_F8 R;			//测量噪声
}
Kalman_Typedef;

/*
 * 功能:初始化
 * 输入:p_Kalman:卡尔曼结果体指针
 * 		KalmanParameter:卡尔曼初始化参数
 * 输出:KalmanResult_ERROR:卡尔曼结果体指针无效
 *		KalmanResult_OK:初始化完成
 */
KalmanResult_Typedef KalmanInit(Kalman_Typedef* p_Kalman, Kalman_Typedef KalmanParameter);

/*
 * 功能:一阶卡尔曼滤波
 * 输入:p_Kalman:卡尔曼结果体指针
 * 输出:KalmanResult_ERROR:卡尔曼结果体指针无效
 *		KalmanResult_OK:计算完成
 * 备注:p_Kalman->X_hat存放最新的最优值
 */
KalmanResult_Typedef KalmanFilter(Kalman_Typedef* p_Kalman, Kalman_F8 Value);

二、工程文件

需额外包含头文件“stddef.h”

/*
 * 功能:初始化
 * 输入:p_Kalman:卡尔曼结果体指针
 * 		KalmanParameter:卡尔曼初始化参数
 * 输出:KalmanResult_ERROR:卡尔曼结果体指针无效
 *		KalmanResult_OK:初始化完成
 */
KalmanResult_Typedef KalmanInit(Kalman_Typedef* p_Kalman, Kalman_Typedef KalmanParameter)
{
	if(p_Kalman == NULL)
	{
		return KalmanResult_ERROR;
	}
	else
	{
		*p_Kalman = KalmanParameter;

		return KalmanResult_OK;
	}
}

/*
 * 功能:一阶卡尔曼滤波
 * 输入:p_Kalman:卡尔曼结果体指针
 * 输出:KalmanResult_ERROR:卡尔曼结果体指针无效
 *		KalmanResult_OK:计算完成
 * 备注:p_Kalman->X_hat存放最新的最优值
 */
KalmanResult_Typedef KalmanFilter(Kalman_Typedef* p_Kalman, Kalman_F8 Value)
{
	if(p_Kalman == NULL)
	{
		return KalmanResult_ERROR;
	}
	else
	{
		p_Kalman->NowP = p_Kalman->LastP + p_Kalman->Q;
		p_Kalman->Kg = p_Kalman->NowP / (p_Kalman->NowP + p_Kalman->R);
		p_Kalman->X_hat = p_Kalman->Kg * (Value - p_Kalman->X_hat) + p_Kalman->X_hat;
		p_Kalman->LastP = (1 - p_Kalman->Kg) * p_Kalman->NowP;

		return KalmanResult_OK;
	}
}

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

洪恒远

感君意气无所惜,一为歌行歌主客

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值