diff --git a/APP_Framework/Framework/knowing/filter/low_pass_filter/one_order_rc_lpf.c b/APP_Framework/Framework/knowing/filter/low_pass_filter/one_order_rc_lpf.c index 47170096..7e987b8a 100644 --- a/APP_Framework/Framework/knowing/filter/low_pass_filter/one_order_rc_lpf.c +++ b/APP_Framework/Framework/knowing/filter/low_pass_filter/one_order_rc_lpf.c @@ -1 +1,22 @@ -#include \ No newline at end of file +#include +void OneOrderRcLpfInit(OneOrderRcLpfHander* hander,float cutoff_fre,float sampling) +{ + hander->vi = 0; + hander->fcutoff = cutoff_fre; // low pass filter cutoff frequency + hander->vo = 0; + hander->vo_prev = 0; + hander->fs = sampling; //sampling rate +} + +float OneOrderRcLpfFun(OneOrderRcLpfHander *hander) +{ + float rc; + float alpha1; + float alpha2; + rc = (float) 1.0/2.0/3.1415926/hander->fcutoff; + alpha1 = 1/(1+rc*hander->fs); + alpha2 = rc*hander->fs/(1+rc*hander->fs); + hander->vo = alpha1*hander->vi + alpha2 *hander->vo_prev; + hander->vo_prev = hander ->vo; + return hander->vo; +} diff --git a/APP_Framework/Framework/knowing/filter/low_pass_filter/one_order_rc_lpf.h b/APP_Framework/Framework/knowing/filter/low_pass_filter/one_order_rc_lpf.h index 9f62b970..d2420742 100644 --- a/APP_Framework/Framework/knowing/filter/low_pass_filter/one_order_rc_lpf.h +++ b/APP_Framework/Framework/knowing/filter/low_pass_filter/one_order_rc_lpf.h @@ -2,4 +2,15 @@ #define _ONE_ORDER_RC_LPF_H +typedef struct +{ + float vi; + float vo_prev; + float vo; + float fcutoff; + float fs; +} OneOrderRcLpfHander; + +void OneOrderRcLpfInit(OneOrderRcLpfHander* hander,float cutoff_fre,float sample); +float OneOrderRcLpfFun(OneOrderRcLpfHander *hander); #endif \ No newline at end of file