简单的一阶低通滤波器

2023-05-16

#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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

简单的一阶低通滤波器 的相关文章

随机推荐