добавлоен полосовой фильтр (не доработано)

This commit is contained in:
2025-12-06 17:58:58 +03:00
parent 1f7384c5ed
commit a6b27da4ce
2 changed files with 139 additions and 1 deletions

View File

@@ -457,7 +457,43 @@ int32_t FilterRMSInt_Process(FilterRMSInt_t* filter, int32_t input);
// ==================== CMSIS ВЕРСИИ ====================
// ==================== ДРУГИЕ ФИЛЬТРЫ ====================
/**
* @brief Структура полосового фильтра с дифференциатором
* @details Комбинация дифференциатора и полосового фильтра 2-го порядка.
* Используется для выделения сетевой частоты и подготовки к детектированию нуля.
*/
typedef struct _FilterBandPassDerivative_t {
FilterState_t state; ///< Состояние фильтра
// Дифференциатор
float prev_input; ///< Предыдущее входное значение
// Полосовой фильтр (биквадратный, прямая форма II)
float b0, b1, b2; ///< Коэффициенты числителя
float a1, a2; ///< Коэффициенты знаменателя
// Состояния фильтра
float x1, x2; ///< Состояния входа
float y1, y2; ///< Состояния выхода
float last_output; ///< Последнее выходное значение
uint8_t dataProcessing; ///< Флаг обработки данных
// Указатели на функции
int (*reset)(struct _FilterBandPassDerivative_t *filter,
float center_freq_ratio, float bandwidth_ratio);
float (*process)(struct _FilterBandPassDerivative_t *filter, float input);
} FilterBandPassDerivative_t;
int FilterBandPassDerivative_Init(FilterBandPassDerivative_t* filter,
float center_freq_ratio,
float bandwidth_ratio);
float FilterBandPassDerivative_Process(FilterBandPassDerivative_t* filter,
float input);
#ifdef DSP_FITLERS
/**
* @brief Структура биквадратного фильтра с CMSIS-DSP