简单卡尔曼滤波【转】

来自: http://blog.csdn.net/calcular/article/details/47909275
double filter(double in)
{
	static int co;
	co++;
	static double dat0; //现在的数据
	static double dat1; //前一次的数据
	static double dat2; //前两次的数据
	static double dat3; //前三次的数据
	if(co>4)
	{
	co=999;
	//滤波实现部分===========================
	double prd0; //本次预测值
	double prd1;  //上次预测值
	double result; //本次测量结果
	double de;
	static double p_dx; //上一次最优偏差
	double gz; //高斯噪声
	double kg; //协方差
	prd1=dat1-dat2+dat1;  //计算上次预测值
	de=dat0-prd1;  //算出上次预测偏差	
	prd0=dat0-dat1+dat0;  //计算本次预测值
	
	gz=sqrt(p_dx*p_dx+de*de+0.00000001);
	kg=gz*gz/(gz*gz+de*de+0.00000001);
	result=prd0+kg*(in-prd0);
	p_dx=sqrt((1.0-kg)*gz*gz);

	//=======================================
	dat3=dat2;
	dat2=dat1;
	dat1=dat0;
	dat0=result;
	//printf("%f %f %f %f\n",dat0,dat1,dat2,dat3);
	return result;
	}
	else
	{
		if(co==1) dat3=in;
		else if(co==2) dat2=in;
		else if(co==3) dat1=in;
		else if(co==4) dat0=in;
		//printf("%f %f %f %f\n",dat0,dat1,dat2,dat3);
		return in;
	}
}


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值