/****************************************************************
剔除毛刺濾波處理程序
*****************************************************************/
void BurrFilter(BURR_FILTER_STRUCT * filter)
{
int m_Deta;
m_Deta = abs((filter->Input) - (filter->Output));
if(m_Deta > filter->Err)
{
filter->Err = filter->Err << 1;
}
else
{
filter->Output = filter->Input;
if(m_Deta < (filter->Err >> 1))
{
filter->Err = filter->Err >> 1;
}
}
filter->Err = (filter->Err > filter->Max)?filter->Max:filter->Err;
filter->Err = (filter->Err < filter->Min)?filter->Min:filter->Err;
}
/****************************************************************
滑動濾波程序(根據濾波時間常數設定加全平均的數據個數)
*****************************************************************/
void SlipFilter(CUR_LINE_STRUCT_DEF * pCur)
{
int m_Index,m_IndexStart,m_Coff,m_TotalCoff;
long m_Total;
CUR_LINE_STRUCT_DEF * m_pCur = pCur;
for(m_Index = 0;m_Index<(16-1);m_Index++)
{
m_pCur->Data[m_Index] = m_pCur->Data[m_Index+1];
}
m_pCur->Data[15] = m_pCur->Input;
m_Total = 0;
m_TotalCoff = 0;
m_IndexStart = 16 - m_pCur->FilterTime;
for(m_Coff = 0;m_Coff<(m_pCur->FilterTime);m_Coff++)
{
m_Total += (long)m_pCur->Data[m_IndexStart + m_Coff] * (m_Coff +1);
m_TotalCoff += (m_Coff+1);
}
m_pCur->Output = m_Total/m_TotalCoff;
}