参考模电RC计算截止频率的滤波计算公式
#define M_PI_FLOAT 3.14159265358979323846ftypedef struct LpfFilter{ float RC;//模电RC float dT;//数据更新时间隔(秒) float k;//过滤系数 float state;//过滤结果}LpfFilter_t;/**设置滤波器的截止频率* *filter:* f_cut:截止频率* dt: 数据更新时间隔(秒)*/void filterInit(LpfFilter_t *filter,float f_cut,float dt){ filter->RC = 1.0f / ( 2.0f * M_PI_FLOAT * f_cut);//参考模电RC截止频率公式 filter->dT = dT;//数据更新时间隔(秒) filter->k = filter->dT / (filter->RC filter->dT);/**低通滤波的应用* *filter:* input:新输入数据*/float LpfFilterApply(pt1Filter_t *filter,float input){ dt固定时,截止频率越低,k越小,数据最终输出的变化越慢(高频去掉了) //截止频率固定时,dT越大,k数据输出变化越小(高频删除) filter->state = filter->state filter->k * (input - filter->state); return filter->state;}
参考:
https://github.com/betaflight/betaflight/blob/master/src/main/common/filter.c