/* 各类滤波器。 */ #pragma once #ifdef __cplusplus extern "C" { #endif #include "user_math.h" /* 二阶低通滤波器 */ typedef struct { float cutoff_freq; /* 截止频率 */ float a1; float a2; float b0; float b1; float b2; float delay_element_1; float delay_element_2; } LowPassFilter2p_t; /* 带阻滤波器 */ typedef struct { float notch_freq; /* 阻止频率 */ float bandwidth; /* 带宽 */ float a1; float a2; float b0; float b1; float b2; float delay_element_1; float delay_element_2; } NotchFilter_t; /** * @brief 初始化滤波器 * * @param f 滤波器 * @param sample_freq 采样频率 * @param cutoff_freq 截止频率 */ void LowPassFilter2p_Init(LowPassFilter2p_t *f, float sample_freq, float cutoff_freq); /** * @brief 施加一次滤波计算 * * @param f 滤波器 * @param sample 采样的值 * @return float 滤波后的值 */ float LowPassFilter2p_Apply(LowPassFilter2p_t *f, float sample); /** * @brief 重置滤波器 * * @param f 滤波器 * @param sample 采样的值 * @return float 滤波后的值 */ float LowPassFilter2p_Reset(LowPassFilter2p_t *f, float sample); /** * @brief 初始化滤波器 * * @param f 滤波器 * @param sample_freq 采样频率 * @param notch_freq 中心频率 * @param bandwidth 带宽 */ void NotchFilter_Init(NotchFilter_t *f, float sample_freq, float notch_freq, float bandwidth); /** * @brief 施加一次滤波计算 * * @param f 滤波器 * @param sample 采样的值 * @return float 滤波后的值 */ float NotchFilter_Apply(NotchFilter_t *f, float sample); /** * @brief 重置滤波器 * * @param f 滤波器 * @param sample 采样的值 * @return float 滤波后的值 */ float NotchFilter_Reset(NotchFilter_t *f, float sample); #ifdef __cplusplus } #endif