хз что тут это не мой комп
This commit is contained in:
@@ -256,11 +256,12 @@ typedef struct _FilterLUT_t{
|
|||||||
FilterState_t state; ///< Состояние фильтра
|
FilterState_t state; ///< Состояние фильтра
|
||||||
float* input_values; // Массив входных значений
|
float* input_values; // Массив входных значений
|
||||||
float* output_values; // Массив выходных значений
|
float* output_values; // Массив выходных значений
|
||||||
|
float offset; // Смещение input_values
|
||||||
uint16_t size; // Размер таблицы
|
uint16_t size; // Размер таблицы
|
||||||
uint8_t interpolation; // Флаг интерполяции (0 - отключена, 1 - линейная)
|
uint8_t interpolation; // Флаг интерполяции (0 - отключена, 1 - линейная)
|
||||||
uint8_t dataProcessing; ///< Флаг - данные в обработке
|
uint8_t dataProcessing; ///< Флаг - данные в обработке
|
||||||
|
|
||||||
int (*reset)(struct _FilterLUT_t *filter, float* input_arr, float* output_arr, uint16_t size, uint8_t interpolation);
|
int (*reset)(struct _FilterLUT_t *filter, float* input_arr, float* output_arr, uint16_t size, uint8_t interpolation, float offset);
|
||||||
float (*process)(struct _FilterLUT_t *filter, float input);
|
float (*process)(struct _FilterLUT_t *filter, float input);
|
||||||
} FilterLUT_t;
|
} FilterLUT_t;
|
||||||
|
|
||||||
@@ -290,7 +291,7 @@ int FilterAverage_Init(FilterAverage_t* filter, uint32_t size, FilterMode_t mode
|
|||||||
float FilterAverage_Process(FilterAverage_t* filter, float input);
|
float FilterAverage_Process(FilterAverage_t* filter, float input);
|
||||||
int FilterPoly_Init(FilterPoly_t* filter, float* coeffs, uint8_t order);
|
int FilterPoly_Init(FilterPoly_t* filter, float* coeffs, uint8_t order);
|
||||||
float FilterPoly_Process(FilterPoly_t* filter, float input);
|
float FilterPoly_Process(FilterPoly_t* filter, float input);
|
||||||
int FilterLUT_Init(FilterLUT_t* filter, float* input_arr, float* output_arr, uint16_t size, uint8_t interpolation);
|
int FilterLUT_Init(FilterLUT_t* filter, float* input_arr, float* output_arr, uint16_t size, uint8_t interpolation, float offset);
|
||||||
float FilterLUT_Process(FilterLUT_t* filter, float input);
|
float FilterLUT_Process(FilterLUT_t* filter, float input);
|
||||||
int FilterRMS_Init(FilterRMS_t* filter, uint32_t window_size);
|
int FilterRMS_Init(FilterRMS_t* filter, uint32_t window_size);
|
||||||
float FilterRMS_Process(FilterRMS_t* filter, float input);
|
float FilterRMS_Process(FilterRMS_t* filter, float input);
|
||||||
|
|||||||
@@ -220,9 +220,10 @@ float FilterPoly_Process(FilterPoly_t* filter, float input) {
|
|||||||
* @param output_arr Массив выходных значений
|
* @param output_arr Массив выходных значений
|
||||||
* @param size Размер таблицы
|
* @param size Размер таблицы
|
||||||
* @param interpolation Флаг интерполяции (0 - ближайшее значение, 1 - линейная интерполяция)
|
* @param interpolation Флаг интерполяции (0 - ближайшее значение, 1 - линейная интерполяция)
|
||||||
|
* @param offset Сдвиг input_arr для удобной коррекции
|
||||||
* @return 0 - успех, -1 - ошибка
|
* @return 0 - успех, -1 - ошибка
|
||||||
*/
|
*/
|
||||||
int FilterLUT_Init(FilterLUT_t* filter, float* input_arr, float* output_arr, uint16_t size, uint8_t interpolation) {
|
int FilterLUT_Init(FilterLUT_t* filter, float* input_arr, float* output_arr, uint16_t size, uint8_t interpolation, float offset) {
|
||||||
check_init_filter(filter);
|
check_init_filter(filter);
|
||||||
if ((input_arr == NULL) || (output_arr == NULL)) return -1;
|
if ((input_arr == NULL) || (output_arr == NULL)) return -1;
|
||||||
|
|
||||||
@@ -230,6 +231,7 @@ int FilterLUT_Init(FilterLUT_t* filter, float* input_arr, float* output_arr, uin
|
|||||||
filter->output_values = output_arr;
|
filter->output_values = output_arr;
|
||||||
filter->size = size;
|
filter->size = size;
|
||||||
filter->interpolation = interpolation;
|
filter->interpolation = interpolation;
|
||||||
|
filter->offset = offset;
|
||||||
|
|
||||||
filter->state = FILTER_READY;
|
filter->state = FILTER_READY;
|
||||||
filter->reset = &FilterLUT_Init;
|
filter->reset = &FilterLUT_Init;
|
||||||
@@ -253,6 +255,7 @@ float FilterLUT_Process(FilterLUT_t* filter, float input) {
|
|||||||
uint16_t left_index = 0;
|
uint16_t left_index = 0;
|
||||||
uint16_t right_index = filter->size - 1;
|
uint16_t right_index = filter->size - 1;
|
||||||
|
|
||||||
|
input -= filter->offset;
|
||||||
// Если значение за пределами таблицы - возвращаем крайние значения
|
// Если значение за пределами таблицы - возвращаем крайние значения
|
||||||
if (input <= filter->input_values[0]) {
|
if (input <= filter->input_values[0]) {
|
||||||
return filter->output_values[0];
|
return filter->output_values[0];
|
||||||
|
|||||||
Reference in New Issue
Block a user