дорбаотка медианного фильтра: добавлено инициализирующее значение. чтобы не считал с нуля

This commit is contained in:
Razvalyaev 2025-12-01 18:43:38 +03:00
parent 0fd9c78c32
commit c5a01c56ac
2 changed files with 15 additions and 8 deletions

View File

@ -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);

View File

@ -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;