diff --git a/MyLibs/Inc/filters.h b/MyLibs/Inc/filters.h index d72854d..58c81c8 100644 --- a/MyLibs/Inc/filters.h +++ b/MyLibs/Inc/filters.h @@ -193,7 +193,7 @@ typedef struct _FilterMedian_t{ uint8_t size; ///< Фактический размер фильтра uint8_t dataProcessing; ///< Флаг - данные в обработке - int (*reset)(struct _FilterMedian_t *filter, uint8_t size); + int (*reset)(struct _FilterMedian_t *filter, uint8_t size, float init_val); float (*process)(struct _FilterMedian_t *filter, float input); } FilterMedian_t; @@ -261,7 +261,7 @@ typedef struct _FilterLUT_t{ // Float версии функций -int FilterMedian_Init(FilterMedian_t* filter, uint8_t size); +int FilterMedian_Init(FilterMedian_t* filter, uint8_t size, float init_val); float FilterMedian_Process(FilterMedian_t* filter, float input); int FilterExp_Init(FilterExp_t* filter, float alpha); float FilterExp_Process(FilterExp_t* filter, float input); @@ -332,7 +332,7 @@ typedef struct _FilterMedianInt_t{ uint8_t size; ///< Фактический размер фильтра uint8_t dataProcessing; ///< Флаг - данные в обработке - int (*reset)(struct _FilterMedianInt_t *filter, uint8_t size); + int (*reset)(struct _FilterMedianInt_t *filter, uint8_t size, int32_t init_val); int32_t (*process)(struct _FilterMedianInt_t *filter, int32_t input); } FilterMedianInt_t; @@ -403,7 +403,7 @@ typedef struct _FilterLUTInt_t{ } FilterLUTInt_t; // Int32_t версии функций -int FilterMedianInt_Init(FilterMedianInt_t* filter, uint8_t size); +int FilterMedianInt_Init(FilterMedianInt_t* filter, uint8_t size, int32_t init_val); int32_t FilterMedianInt_Process(FilterMedianInt_t* filter, int32_t input); int FilterExpInt_Init(FilterExpInt_t* filter, int32_t alpha, int32_t scale); int32_t FilterExpInt_Process(FilterExpInt_t* filter, int32_t input); diff --git a/MyLibs/Src/filters.c b/MyLibs/Src/filters.c index 7e0702a..cf1ac47 100644 --- a/MyLibs/Src/filters.c +++ b/MyLibs/Src/filters.c @@ -32,11 +32,14 @@ static int Filter_float_compare(const void *a, const void *b) { * @param filter Указатель на структуру фильтра * @return 0 - успех, -1 - ошибка */ -int FilterMedian_Init(FilterMedian_t* filter, uint8_t size) { +int FilterMedian_Init(FilterMedian_t* filter, uint8_t size, float init_val) { check_init_filter(filter); if (size == 0 || size > FILTER_MEDIAN_MAX_SIZE) return -1; - memset(filter->buffer, 0, sizeof(filter->buffer)); + for (int i = 0; i < size; i++) + { + filter->buffer[i] = init_val; + } filter->index = 0; filter->size = size; @@ -301,11 +304,15 @@ static int Filter_int32_compare(const void *a, const void *b) { * @param filter Указатель на структуру фильтра * @return 0 - успех, -1 - ошибка */ -int FilterMedianInt_Init(FilterMedianInt_t* filter, uint8_t size) { +int FilterMedianInt_Init(FilterMedianInt_t* filter, uint8_t size, int32_t init_val) { check_init_filter(filter); if (size == 0 || size > FILTER_MEDIAN_MAX_SIZE) return -1; - memset(filter->buffer, 0, sizeof(filter->buffer)); + for (int i = 0; i < size; i++) + { + filter->buffer[i] = init_val; + } + filter->index = 0; filter->size = size;