算法转换c语言程序,(转)C语言实现卡尔曼滤波算法程序

非常感谢原作者,我在这个的基础上转换成纯整形运算。STM32F103 12位ADC先放大1000倍再运算,理论上可以保留小数点后三位的结果。

效果非常不错,运算速度也快,72M时钟 1-2uS左右(根据MDK周期数)。]uint32_t KalmanFilter(int32_t ResrcData)

{

/*-------------------------------------------------------------------------------------------------------------*/

/*

Q:过程噪声,Q增大,动态响应变快,收敛稳定性变坏

R:测量噪声,R增大,动态响应变慢,收敛稳定性变好

*/

/*-------------------------------------------------------------------------------------------------------------*/

static int32_t R = (int32_t)(128*1024);

static int32_t Q = (int32_t)4;

static uint32_t Counter1 = 0;

static uint32_t Counter2 = 0;

static int32_t x_last = 0;

static int32_t p_last;   // 应赋初始估计值

int32_t x_mid;

int32_t x_now;

int32_t p_mid ;

int32_t p_now;

ResrcData *= 1024;

x_now = ResrcData - x_last;

if(x_now 

{

x_now *= -1; // 取绝对值

}

if(x_now >= 32*1024)   // 如果测量值连续比估计值大或小 相信测量值,加速迭代

{

Counter1++;

Counter2 = 0;

if(Counter1 > 10)

{

R = 512;;

Q = 128;

}

}

else                 // 数据比较稳定,加强滤波

{

Counter1 = 0;

Counter2++;

if(Counter2 > 10)

{

R = (int32_t)(128*1024);

Q = (int32_t)4;

}

}

x_mid = x_last;   // x_last=x(k-1|k-1),x_mid=x(k|k-1)

p_mid = p_last + Q; // p_mid=p(k|k-1),p_last=p(k-1|k-1),Q=噪声

//    kg = p_mid/(p_mid + R); //kg为kalman filter,R为噪声

//    x_now = x_mid+kg*(ResrcData - x_mid);// 估计出的最优值

x_now = x_mid + (p_mid*(ResrcData - x_mid))/(p_mid + R);

//    p_now = (1 - kg)*p_mid; // 最优值对应的covariance

p_now = p_mid - p_mid*p_mid/(p_mid + R); // 最优值对应的covariance

p_last = p_now;  // 更新covariance值

x_last = x_now;  // 更新系统状态值

x_now /= 1024;

if((x_now > 4096)||( x_now 

{

x_last = ResrcData;

p_now = ResrcData;

x_now = ResrcData/1024;

}

return (u32)x_now;

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/373130.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java 8的烹调方式–拼图项目

什么是Project Jigsaw:Project Jigsaw是使Java编译器模块知道的项目。 多年以来,Java API一直是整体的,即从代码的任何部分都可以平等地看到整个API。 还没有任何方法可以声明代码对任何其他用户库的依赖关系。 拼图项目试图以非常有效的方式…

python之路-SQLAlchemy

SQLAchemy SQLAlchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用关系对象映射进行数据库操作,简言之便是:将对象转换成SQL,然后使用数据API执行SQL并获取执行结果。 安装: pip3 inst…

POJ 1751 Highways

题意:n个城市,然后把n个城市的坐标都给你,然后给你m条已经修好的道路,然后给出m个已经修好道路的城市a,b, However, they want to guarantee that every town is highway-reachable from every other town.…

C语言编程中void什么意思,程序设计中遇到的void到底是什么意思

部分编程的初学者都会问"void是什么意思","为什么很多函数前都要加个void".实际上,void最简单的解释就是把0转换成空类型的意思。下面用各个开发语言来详解void1.C语言中的void表示空类型,它跟int,float是同地位的,一般用…

Linux中vim编辑器的缩进的功能键

vim编程时,经常需要对代码进行缩进处理,以增加程序的可读性和后期的代码维护. 可以采用多种方式达到缩进的目的: 1) 命令模式(command mode) 2) Visual模式(visual mode) 2) 输入模式(entry mode) 3) 末行模式(last-line mode) 4) 在/etc/vimrc有给予vim…

JSF 2,PrimeFaces 3,Spring 3和Hibernate 4集成项目

本文展示了如何集成JSF2,PrimeFaces3,Spring3和Hibernate4技术。 它为Java开发人员提供了一个通用的项目模板。 另外,如果Spring不用于业务和数据访问层,则可以提供JSF – PrimeFaces和Hibernate集成项目。 二手技术&#xff1a…

c语言编程文件中删除数据结构,C语言数据结构实战(一)顺序表的插入与删除

今天学习了思成老师的数据结构实战教程 写了一个顺序表 插入和删除的操作 把源码共享给大家 一共包括list.c stu.h main.c list.h .h文件是头文件 需要引入 具体的功能我都已经在代码中写明了list.h代码如下://线性表的定义在头文件中实现#ifndef _LIST_H#define …

内存使用分析工具Valgrind简单用法

转载自 http://www.cnblogs.com/sunyubo/archive/2010/05/05/2282170.html 暂时还未使用过,记录下,记录下,记录下 Valgrind的主要作者Julian Seward刚获得了今年的Google-OReilly开源大奖之一──Best Tool Maker。让我们一起来看一下他的作品…

Lucene概述第一部分:创建索引

介绍 我最近一直在与开源搜索引擎Lucene合作 。 我不是专家,但是由于我只是浏览了一些相当稀疏的文档并将应用程序从Lucene的很旧的版本迁移到了最新版本的2.4,所以我在总体上很清楚。 Lucene的文档有点让人难以想象,因此我想趁此机会在我脑海…

初识openstack

一、 什么是openstack? OpenStack是一个由NASA(美国国家航空航天局)和Rackspace合作研发并发起的,以Apache许可证授权的自由软件和开放源代码项目。 二、openstack前世今身 openstack是一个跟Eucalyptus,AWS(Amazon web Service)类…

c语言case多语句的取值,Switch Case语句中多个值匹配同一个代码块的写法

C#+JQuery+.Ashx+百度Echarts实现全国省市地图和饼状图动态数据图形报表的统计在目前的一个项目中,需要用到报表表现数据,这些数据有多个维度,需要同时表现出来,同时可能会有大量数据呈现的需求,经过几轮挑选,最终选择了百度的e…

php解决下单、抽奖并发导致的库存负数的问题

我们知道数据库处理sql是一条条处理的,假设购买商品的流程是这样的: sql1:查询商品库存 if(库存数量 > 0) { //生成订单... sql2:库存-1 } 当没有并发时,上面的流程看起来是如此完美,假设同时两个人下单,而…

在Spring中使用JDBCJobStore配置Quartz

我将开始一些有关Quartz Scheduler内部,提示和技巧的系列文章,这是第0章-如何配置持久性作业存储。 在Quartz中,您基本上可以在将作业和触发器存储在内存中以及在关系数据库中进行选择( Terracotta是最近添加的混合功能&#xff0…

rlwrap插件,实现sqlplus上下翻页

oracle在Linux下,sqlplus中不能上下翻,最主要我经常打错字!嘿嘿 01、下载 RPM :http://rpmfind.net/linux/rpm2html/search.php?queryrlwrap tar.gz:https://fossies.org/linux/privat/rlwrap-0.42.tar.gz/ 百度云:h…

ice库c语言例子,很不多的ICE架构入门学习例子

虽然使用传统的SOCKET编程,我们可以更为清楚程序的性能,能够更直接的操控SOCKET的设置,比如发送超时时间,接受BUFFER的大小,以及进行自己的协议加密。但是由于其调试成本较高,且不易于分布式部署ICE 作为一…

程序员的十个层次,你属于哪一层?(转)

自西方文艺复兴以来,中国在自然科学方面落后西方很多,软件领域也不例外。当然现在中国的许多程序员们对此可能有许多不同的意见,有些人认为中国的程序员水平远落后于西方,有些则认为中国的程序员个人能力并不比西方的程序员差&…

操作系统基础篇

程序运行的4个因素 (1).程序设计语言 (2).编译系统 (3).操作系统 (4).指令集结构(硬件系统) 操作系统的定义:操作系统是掌控计算机上所有事情的软件系统(硬件资源,软件资源) 操作系统对内存,i/o,cpu&#x…

高效快速中值滤波算法c语言,快速中值滤波及c语言实现.docx

...快速中值滤波及c语言实现学生姓名: 刘 勇 学 号: 6100410218 专业班级: 数媒101【摘要】本文讨论了用c语言在微机上实现中值滤波及快速算法,在程序设计的过程中充分考虑到程序运行的时间复杂度和空间复杂度的问题.解…

Arquillian 1.0.0.Final正式发布! 准备使用GlassFish和WebLogic! 杀死所有虫子!

红帽公司和JBoss社区今天宣布的1.0.0.Final发布的Arquillian ,其屡获殊荣的建在Java虚拟机(JVM)运行测试平台。 Arquillian大大减少了编写和执行Java中间件集成和功能测试所需的工作。 它甚至使测试工程师能够解决以前认为无法测试或测试成本…

Jquery选择器特殊字符问题

场景: $("#" AAA ""),AAA代表某表单ID 当AAA为普通字符串时,ok; 当AAA含有特殊符号时(eg:a.b),获取不到该对象; 原因:特殊符号会进行转义&#xf…