• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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