Временная оптимизация фильтра. Но вообще надо переделать их

This commit is contained in:
2025-11-17 01:37:18 +03:00
parent 99652a9ad5
commit 9bff9ad44d
2 changed files with 46 additions and 16 deletions

View File

@@ -111,11 +111,13 @@ float FilterExp_Process(FilterExp_t* filter, float input) {
* @param filter Указатель на структуру фильтра
* @return 0 - успех, -1 - ошибка
*/
int FilterAverage_Init(FilterAverage_t* filter, uint8_t size, FilterMode_t mode) {
int FilterAverage_Init(FilterAverage_t* filter, uint32_t size, FilterMode_t mode) {
check_init_filter(filter);
if (size == 0 || size > FILTER_AVERAGE_MAX_SIZE) return -1;
#ifndef FILTERS_DISABLE_MOVING_AVERAGE
memset(filter->buffer, 0, sizeof(filter->buffer));
#endif
filter->size = size;
filter->sum = 0.0f;
filter->index = 0;
@@ -140,9 +142,10 @@ float FilterAverage_Process(FilterAverage_t* filter, float input) {
// Общая логика для обоих режимов
filter->sum += input;
filter->count++;
filter->dataProcessing = 1;
// Логика скользящего среднего
if (filter->mode == FILTER_MODE_MOVING) {
#ifndef FILTERS_DISABLE_MOVING_AVERAGE
if (filter->count > filter->size) {
filter->sum -= filter->buffer[filter->index];
filter->count = filter->size; // Поддерживаем фиксированный размер окна
@@ -150,6 +153,8 @@ float FilterAverage_Process(FilterAverage_t* filter, float input) {
filter->buffer[filter->index] = input;
filter->index = (filter->index + 1) % filter->size;
filter->lastValue = filter->sum / filter->count;
filter->dataProcessing = 0;
#endif
}
else
{
@@ -158,6 +163,7 @@ float FilterAverage_Process(FilterAverage_t* filter, float input) {
filter->lastValue = filter->sum / filter->count;
filter->count = 0;
filter->sum = 0;
filter->dataProcessing = 0;
}
}
@@ -380,11 +386,12 @@ int32_t FilterExpInt_Process(FilterExpInt_t* filter, int32_t input) {
* @param filter Указатель на структуру фильтра
* @return 0 - успех, -1 - ошибка
*/
int FilterAverageInt_Init(FilterAverageInt_t* filter, uint8_t size, FilterMode_t mode) {
int FilterAverageInt_Init(FilterAverageInt_t* filter, uint32_t size, FilterMode_t mode) {
check_init_filter(filter);
if (size == 0 || size > FILTER_AVERAGE_MAX_SIZE) return - 1;
#ifndef FILTERS_DISABLE_MOVING_AVERAGE
memset(filter->buffer, 0, sizeof(filter->buffer));
#endif
filter->size = size;
filter->sum = 0;
filter->index = 0;
@@ -412,6 +419,7 @@ int32_t FilterAverageInt_Process(FilterAverageInt_t* filter, int32_t input) {
// Логика скользящего среднего
if (filter->mode == FILTER_MODE_MOVING) {
#ifndef FILTERS_DISABLE_MOVING_AVERAGE
if (filter->count > filter->size) {
filter->sum -= filter->buffer[filter->index];
filter->count = filter->size; // Поддерживаем фиксированный размер окна
@@ -419,6 +427,7 @@ int32_t FilterAverageInt_Process(FilterAverageInt_t* filter, int32_t input) {
filter->buffer[filter->index] = input;
filter->index = (filter->index + 1) % filter->size;
filter->lastValue = filter->sum / filter->count;
#endif
}
else
{