Временная оптимизация фильтра. Но вообще надо переделать их
This commit is contained in:
@@ -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
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user