剔除毛刺程序和滑动滤波程序

/****************************************************************
    剔除毛刺滤波处理程序
*****************************************************************/
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;
}

你可能感兴趣的:(变频器,C语言)