中位值平均加阈值滤波法
对于跳变的散点必须通过加阈值才能消除。下面贴出我的代码。代码思路:采样符合触摸屏范围的数据若干次,将其排序,取中间两位的差值;若差值大于阈值,则丢弃。因为数据已经排序,因此差值肯定是正值或零值,即无需申明为有符号数。同时由于阈值判断的加入,我们可以将数据的采样次数适当调整,此处仅为4次,所得效果已经非常令人满意。需要注意的是采样数据不宜过多,否则连续的线会变成离散的点。
_ucCount = 4
static uint16_t TOUCH_DataFilter(uint16_t *_pBuf, uint8_t _ucCount)
{
uint8_t flag;
uint8_t i;
uint16_t usTemp;
uint32_t uiSum;
/* 升序排列 */
do
{
flag = 0;
for (i = 0; i < _ucCount - 1; i++)
{
if (_pBuf[i] > _pBuf[i+1])
{
usTemp = _pBuf[i + 1];
_pBuf[i+1] = _pBuf[i];
_pBuf[i] = usTemp;
flag = 1;
}
}
}while(flag);
// 设定阈值
if((_pBuf[2]-_pBuf[1]) > 5)
return 0;
// 求中间值的均值
usTemp = (_pBuf[2]+_pBuf[1]) / 2;
return usTemp;
}
https://www.cnblogs.com/yuphone/archive/2010/11/28/1890239.html