1 #if CONFIG_WLS_CSI_PROC
2 /** @file range_kalman.h
3  *
4  * @brief This file contains Kalman filter for WLS range measurements
5  *
6  * Copyright 2023-2024 NXP
7  *
8  * SPDX-License-Identifier: BSD-3-Clause
9  *
10  */
11 
12 #ifndef RANGE_KALMAN
13 #define RANGE_KALMAN
14 
15 #define RANGE_RUN_FLT
16 #ifdef RANGE_RUN_FLT
17 // range is in meters, range_rate in meters/second
18 // time is in seconds
19 typedef struct
20 {
21     // input
22     unsigned long long time;
23     float range_measurement;
24     // state
25     float last_range; // also output <--
26     float last_range_rate;
27     float R0_11, R0_22, R0_12;
28     unsigned long long last_time;
29     // model parameters
30     float measurement_var;
31     float drive_var;
32 } range_kalman_state;
33 
34 void range_kalman_init(range_kalman_state *in,
35                        float range,
36                        unsigned long long time,
37                        float range_drive_var,
38                        float range_measurement_var,
39                        float range_rate_init);
40 #else
41 // range format u16.8 in meters
42 // time format is u64.0 in milliseconds
43 typedef struct
44 {
45     // input
46     unsigned long long time;
47     unsigned int range_measurement;
48     // state
49     unsigned short last_range; // also output <--
50     signed short last_range_rate;
51     unsigned long long last_time;
52     unsigned short R0_11, R0_22;
53     signed int R0_12;
54     // model parameters
55     unsigned int measurement_var;
56     unsigned int drive_var;
57 } range_kalman_state;
58 #endif
59 
60 int range_kalman(range_kalman_state *in);
61 
62 #endif
63 
64 #endif /* CONFIG_WLS_CSI_PROC */
65