简单的一阶低通滤波器

    技术2024-04-22  140

    #include "LowPassFilter.h" #define M_2PI 6.283185307179586f /**设置低通滤波的频率sample_freq 和 截止频率cutoff_freq*/ void LowPassFilter_Init(lowFilter_t *filter, float sample_freq, float cutoff_freq) { filter->sample_freq = sample_freq; filter->cutoff_freq = cutoff_freq; if (filter->cutoff_freq <= 0.0f || filter->sample_freq <= 0.0f) { filter->alpha = 1.0; } else { float dt = 1.0f/filter->sample_freq; float rc = 1.0f/(M_2PI*filter->cutoff_freq); filter->alpha = constrain_float(dt/(dt+rc), 0.0f, 1.0f); } } /*需要滤波的信号sample 上次的输出信号_output*/ float LowPassFilter_apply(lowFilter_t *filter, float sample) { filter->oupt += (sample - filter->oupt) * filter->alpha; return filter->oupt; } low_filter_t lowPassFilter = { LowPassFilter_Init, LowPassFilter_apply, }; #ifndef __FILTER_H #define __FILTER_H #include "stdint.h" /* 滤波器结构体 */ typedef struct { float sample_freq; //输入信号频率 float cutoff_freq; //截止频率 float alpha; //系数 float oupt; //低通滤波器输出 }lowFilter_t; typedef struct { void (* init)(lowFilter_t *filter, float sample_freq, float cutoff_freq); float (* apply)(lowFilter_t *filter, float sample) ; }low_filter_t; extern low_filter_t lowPassFilter; #endif //__INERTIAL_H
    Processed: 0.029, SQL: 9