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