1 /* 2 * Copyright (c) 2023 HPMicro 3 * 4 * SPDX-License-Identifier: BSD-3-Clause 5 * 6 */ 7 #ifndef HPM_MCL_FILTER_H 8 #define HPM_MCL_FILTER_H 9 10 #include "hpm_common.h" 11 12 /** 13 * @brief Gain matrix for iir filter type df1 14 * 15 */ 16 typedef struct { 17 float b0; 18 float b1; 19 float b2; 20 float a1; 21 float a2; 22 float scale; 23 } mcl_filter_iir_df1_matrix_t; 24 25 /** 26 * @brief Buffer for running data 27 * 28 */ 29 typedef struct { 30 float x0; 31 float x1; 32 float x2; 33 float y1; 34 float y2; 35 } mcl_filter_iir_df1_memory_t; 36 37 /** 38 * @brief Configuration of iir filter type df1 39 * 40 */ 41 typedef struct { 42 uint8_t section; /**< Sections of the iir filter */ 43 mcl_filter_iir_df1_matrix_t *matrix; /**< gain matrix, buffer */ 44 45 } mcl_filter_iir_df1_cfg_t; 46 47 /** 48 * @brief iir df1 running data 49 * 50 */ 51 typedef struct { 52 mcl_filter_iir_df1_cfg_t *cfg; 53 mcl_filter_iir_df1_memory_t *mem; /**< The iir order is equal to the array size */ 54 } mcl_filter_iir_df1_t; 55 56 #ifdef __cplusplus 57 extern "C" { 58 #endif 59 60 /** 61 * @brief Initialising the iir filter 62 * 63 * @param iir @ref mcl_filter_iir_df1_t 64 * @param cfg @ref mcl_filter_iir_df1_cfg_t 65 * @param mem @ref mcl_filter_iir_df1_memory_t 66 * @return hpm_mcl_stat_t 67 */ 68 hpm_mcl_stat_t hpm_mcl_filter_iir_df1_init(mcl_filter_iir_df1_t *iir, mcl_filter_iir_df1_cfg_t *cfg, mcl_filter_iir_df1_memory_t *mem); 69 70 /** 71 * @brief iir filtering of input data 72 * 73 * @param iir @ref mcl_filter_iir_df1_t 74 * @param input raw data 75 * @return Filtered data 76 */ 77 float hpm_mcl_filter_iir_df1(mcl_filter_iir_df1_t *iir, float input); 78 79 #ifdef __cplusplus 80 } 81 #endif 82 83 #endif