资源简介
ukf c++版的一个实例。
代码片段和文件信息
#include
#include “matrix.h“ //矩阵操作的头文件
#include “obsfun.h“ //观测方程
#include “sysfun.h“ //系统方城
#include “sigmapoint.h“ //求sigma点
#include “ukf.h“ //ukf滤波算法
#include
#include
#include
using namespace std;
/************************************************************************/
/* 测试 */
/************************************************************************/
int main()
{
clock_t start finish;
start = clock();
//假定初始值如下
Matrix x0(41);
Matrix p0(44)Q(44)R(22);
double a[4]={-280010016010};
double b[16]={100 0 0 0
0 100 0 0
0 0 100 0
0 0 0 100};
double c[16]={0.0001 0 0 0
0 0.0001 0 0
0 0 0.0001 0
0 0 0 0.0001};
double d[4]={0.0001002500};
x0=a;p0=b;Q=c;R=d;
Matrix measure(250001)kongzhi(250001);
measure.Null();kongzhi.Null();
ifstream stream0(“guance.txt“);
ifstream stream1(“kongzhi.txt“);
FILE *stream2;
stream2=fopen(“result.txt““w+“);
if( !stream0 && !stream1 && stream2 == NULL)
{
printf( “The file was not opened\n“ );
return false;
}
fprintf(stream2“%f %20f %20f %20f\n“x0(00)x0(10)x0(20)x0(30));
int i=0i1=0i2=0;
double temp0=0.0;
double temp1=0.0;int j=0;
while( !stream0.eof()&!stream1.eof() )
{
stream0>>temp0;
if ((i+1)%2==0)
{ measure(1i1)=temp0;i1++;}
else
{measure(0i2)=temp0; i2++;}
i++;
stream1>>temp1;
kongzhi(0j)=temp1;
j++;
}
Matrix control(21)guance(21);
control.Null();guance.Null();
/*滤波处理过程********************************************************************/
TRYBEGIN() // 异常处理
{
//定义实例
Sigma sigmapoint(x00.8520);
UKF ss(QR);
for(int k=0;k<49999;k++) //指定滤波次数
{
//获得观测值
guance(00)=measure(0k+1);guance(10)=measure(1k+1);
control(00)=kongzhi(0k);
//先求sigma点
sigmapoint.SigmaSet(x0p0);
sigmapoint.SigmaFun();
//ukf滤波
ss.UkfSet(sigmapoint.sigmasigmapoint.w_m
sigmapoint.w_cguancecontrolQR);
ss.Process();
p0=ss.p_est; x0=ss.x_est; //更新x0p0用于下一次循环
fprintf(stream2“%f %20f %20f %20f\n“x0(00)x0(10)x0(20)x0(30));
}
}
CATCHERROR() //异常
fclose(stream2);
stream0.close();
stream1.close();
/*********************************************************************************/
finish = clock();
double duration = (double)(finish - start) / CLOCKS_PER_SEC;
std::cout<<“程序运行了:“<
sy
- 上一篇:家谱管理系统.cpp
- 下一篇:二维FDTD正演C代码
相关资源
- 家谱管理系统.cpp
- C++写的flappy bird游戏 代码cpp源文件通
- 文章编辑系统源代码.cpp
- 段页式存储管理地址转换.cpp
- 302_规格划分矩形.cpp
- Qt4 For Dev-Cpp Templates
- C++ Serialport 串口通信类
- Vimba CPP Manual中文.docx
- Itti显著性模型(cpp)较原版简洁易懂
- openCV中stitching_detailed.cpp
- L.CPP
- MFC操作Excel表,excel.hexcel.cpp源码
- 用c++模拟直线插补和圆弧插补二.cpp
- 用c++模拟直线插补和圆弧插补一.cpp
- test_opencv.cpp
- MFC中使用JSONCPP_VS2013
- 2.Newton插值公式.cpp
- activemq-cpp开发手册.pdf
- matlab2016b配置VS2017编译器mexopts补丁文
- 支持多标签的convert_imageset.cpp代码
- dft.cpp
- sanke.cpp
- dos.cpp
- s盒的C语言实现,S盒.cpp文件
- 奖学金评定系统5.0.cpp
- nozzle.cpp
- main.cpp
- 引导滤波_Cpp_Python.rar
- UKF的C、C++代码实现
- eig.cpp
评论
共有 条评论