簡單的一階低通濾波器

#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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章