您的位置:首页 > 其它

中位值平均滤波法

2015-05-31 00:29 239 查看
最近用stm32单片机检测外部8路电压。STM32内部包含12位的ADC,一次检测一路AD最快只要1us。为了防止偶尔外对AD采样的干扰,单片机对采集数据进行中值平均滤波。

中值平均滤波就是在采集的N个数据中去掉一个最大值和一个最小值,然后对剩下的数据求平均值。所以这个算法不需要对数据排序,关键是计算最大值,最小值,和。算法实现如下:

unsigned short AD_Filter(unsigned short* pData,int N)
{
unsigned short max,min,average;
int sum,i;
average = 0;
if(N>2)
{
max = pData[0];
min = max;
sum = 0;
for(i=0;i<N;i++)
{
sum += pData[i];

if(pData[i]>max)
{
max = pData[i];//一个循环之后max就是最大的值
}

if(pData[i]<min)
{
min = pData[i];//一个循环之后min就是最小的值
}

sum = sum-max-min;//去掉最大的值和最小的值
average = sum/(N-2);//对N-2个数求平均值

}

return average;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: