11 changed files with 813 additions and 669 deletions
-
19APP/kalmanFilter.c
-
20APP/kalmanFilter.h
-
35APP/service/frequency_sweep_service.c
-
37APP/service/ozone_control_service.c
-
4APP/service/thisdevice.h
-
7APP/state_machine.c
-
1APP/test.c
-
1155project_ozone/Listings/project_o.map
-
114project_ozone/project_o.uvgui.zel
-
85project_ozone/project_o.uvopt
-
5project_ozone/project_o.uvproj
@ -0,0 +1,19 @@ |
|||
#include "kalmanFilter.h" |
|||
|
|||
/** |
|||
*卡尔曼滤波器 |
|||
*@param KFP *kfp 卡尔曼结构体参数 |
|||
* float input 需要滤波的参数的测量值(即传感器的采集值) |
|||
*@return 滤波后的参数(最优值) |
|||
*/ |
|||
float kalmanFilter(KFP* kfp, float input) { |
|||
//预测协方差方程:k时刻系统估算协方差 = k-1时刻的系统协方差 + 过程噪声协方差 |
|||
kfp->Now_P = kfp->LastP + kfp->Q; |
|||
//卡尔曼增益方程:卡尔曼增益 = k时刻系统估算协方差 / (k时刻系统估算协方差 + 观测噪声协方差) |
|||
kfp->Kg = kfp->Now_P / (kfp->Now_P + kfp->R); |
|||
//更新最优值方程:k时刻状态变量的最优值 = 状态变量的预测值 + 卡尔曼增益 * (测量值 - 状态变量的预测值) |
|||
kfp->out = kfp->out + kfp->Kg * (input - kfp->out); //因为这一次的预测值就是上一次的输出值 |
|||
//更新协方差方程: 本次的系统协方差付给 kfp->LastP 威下一次运算准备。 |
|||
kfp->LastP = (1 - kfp->Kg) * kfp->Now_P; |
|||
return kfp->out; |
|||
} |
@ -0,0 +1,20 @@ |
|||
#pragma once |
|||
/*********************************************************************************************************************** |
|||
* ====================================================卡尔曼滤波===================================================== * |
|||
***********************************************************************************************************************/ |
|||
typedef struct { |
|||
float LastP; //上次估算协方差 初始化值为0.02 |
|||
float Now_P; //当前估算协方差 初始化值为0 |
|||
float out; //卡尔曼滤波器输出 初始化值为0 |
|||
float Kg; //卡尔曼增益 初始化值为0 |
|||
float Q; //过程噪声协方差 初始化值为0.001 |
|||
float R; //观测噪声协方差 初始化值为0.543 |
|||
} KFP; // Kalman Filter parameter |
|||
|
|||
/** |
|||
*卡尔曼滤波器 |
|||
*@param KFP *kfp 卡尔曼结构体参数 |
|||
* float input 需要滤波的参数的测量值(即传感器的采集值) |
|||
*@return 滤波后的参数(最优值) |
|||
*/ |
|||
float kalmanFilter(KFP* kfp, float input); |
1155
project_ozone/Listings/project_o.map
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
114
project_ozone/project_o.uvgui.zel
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
Write
Preview
Loading…
Cancel
Save
Reference in new issue