常用滤波算法
Posted XXX_UUU_XXX
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了常用滤波算法相关的知识,希望对你有一定的参考价值。
- 有效值/目标值:TargetValue
- 采样值:SampleValue
- 滤波增益:FilterCoefficient
限幅滤波
根据采样值和有效值之间允许的最大偏差进行滤波。
- | 采样值 - 有效值 | > 最大偏差,采样值无效
- | 采样值 - 有效值 | <= 最大偏差,采样值有效
优点:能够克服偶然的干扰。
缺点:无法抑制周期性干扰;平滑性差。
设定值附近波动
/* 限幅滤波 */
float FilterCoeff = 10.0f; /* 最大偏差 */
float TargetValue = 50.0f; /* 设定值 */
float filter( void )
float SampleValue = get_ADCValue(); /* 获取采样值 */
/* |采样值 - 设定值| > 最大偏差值 */
if( abs( SampleValue - TargetValue ) > FilterCoeff )
return TargetValue;
else
return SampleValue;
最大值和最小值之间波动
/* 限幅滤波 */
float MinValue = 0.0; /* 设定最小值 */
float MaxValue = 5.0; /* 设定最大值,最大值要大于最小值 */
float filter( void )
float SampleValue = get_ADCValue(); /* 获取采样值 */
if( SampleValue > MaxValue )
return MaxValue;
else if( SampleValue < MinValue )
return MinValue;
else
return SampleValue;
/* 宏定义形式,宏定义一定要加括号,不然可能会出错 */
#define FILTER(v, min, max) ( (v) > (max) ? (max) : ( (v) < (min) ? (min) : (v) ) )
一阶滞后滤波
FilterCoeff * TargetValue + ( 1 - FilterCoeff ) * SampleValue
优点:有效抑制周期性干扰;适用于波动频率较高场合。
缺点:灵敏度低;相位滞后,滞后程度取决于滤波增益;不能消除滤波频率高于采样频率*0.5的干扰信号。
/* 一阶滞后滤波 */
float FilterCoeff = 1.0f; /* 滤波增益取 0 ~ 1*/
float TargetValue = 50.0f; /* 设定值 */
float fileter( void )
float ret = 0.0f;
float SampleValue = get_ADCValue(); /* 获取采样值 */
ret = FilterCoeff * TargetValue + ( 1 - FilterCoeff ) * SampleValue;
return ret;
以上是关于常用滤波算法的主要内容,如果未能解决你的问题,请参考以下文章
滤波跟踪基于matlab最近邻算法多目标航迹关联含Matlab源码 2093期