#include "LowPassFilter.h"
#define M_2PI 6.283185307179586f
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);
}
}
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