简单的一阶低通滤波器
生活随笔
收集整理的這篇文章主要介紹了
简单的一阶低通滤波器
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
#include "LowPassFilter.h"#define M_2PI 6.283185307179586f/**設(shè)置低通濾波的頻率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"/* 濾波器結(jié)構(gòu)體 */
typedef struct
{float sample_freq; //輸入信號頻率float cutoff_freq; //截止頻率float alpha; //系數(shù)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
總結(jié)
以上是生活随笔為你收集整理的简单的一阶低通滤波器的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PID控制器
- 下一篇: STM32F103CUBE学习笔记 一