低通滤波2

发布时间 2023-05-24 11:05:46作者: Dawa-Tech
//---------------------------------------------------------------------------
//  Name     :        FILT_lLowPass
//                  ======================================
//
//  Function : Low-pass filter with two filter constants
//
//            Output = (FiltConst1 * (NewInput + LastInput)) + (FiltConst2 * LastOutput) 
//
//  Inputs    : As function arguments:
//             - FLOAT32 lNewInput              : Filter new input
//             - S_LOW_PASS_FILTER_TYPE* psFilt  : Pointer to filter parameters
// 
//  Output   : As return value:
//             - FLOAT32 lOutput                : Filtered output
//
//---------------------------------------------------------------------------

FLOAT32 FILT_lLowPass(S_LOW_PASS_FILTER_TYPE* psFilt, FLOAT32 fNewInput)
{
   FLOAT32 fOut1, fOut2, fOutput;   

   // Calculate filter output
   fOut1 = fNewInput+ psFilt->fLastInput;
   fOut1 = fOut1* psFilt->fFiltConst1;
   fOut2 = psFilt->fLastOutput* psFilt->fFiltConst2;
   fOutput = fOut1 + fOut2;
   
   // Update filter parameters
   psFilt->fLastInput = fNewInput;
   psFilt->fLastOutput = fOutput;

   return fOutput;
}

const1和const2

/*
Tcon单位:s , example 2k = 0.0005
fFlterTime单位:ms , example 100ms = 100
*/
const1 = Tcon/Tcon + 2.0f * fFltrTime *0.001f);

const2 = FLOAT_1_P_0 - FLOAT_2_P_0 *const1;

 

使用:

filterData = FILT_lLowPass(FILTER , newData);