/** * Quick and simple digital filters for smoothing and DC removal * https://kleinembedded.com/quick-and-simple-digital-filters-for-smoothing-and-dc-removal/ */ #ifndef KLEINLIBC_SMOOTHING_FILTER_H #define KLEINLIBC_SMOOTHING_FILTER_H typedef struct { float smoothing_factor; float prev_output; } smoothing_filter_t; /** * @brief Initialize smoothing filter. * * @param handle Pointer to an instance of `smoothing_filter_t`. * @param smoothing_factor A floating point number between 0 and 1 that determines how much smoothing to apply. * Smaller values apply more smoothing. */ void smoothing_filter_init(smoothing_filter_t *handle, float smoothing_factor); /** * @brief Process the next input value. * * @param handle Pointer to an instance of `smoothing_filter_t`. * @param current_input The input value to process. * @return float The filtered output value. */ float smoothing_filter_process(smoothing_filter_t *handle, float current_input); #endif