This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

IWR6843: clutter removal of vital signs

Part Number: IWR6843

Hi Technicalsupport

I wolud like to ask a question for clutter removal of vital signs.

I can't understand why clutter can be removed as below code.

Colud you tell me?

C:\ti\mmwave_industrial_toolbox_4_2_1\labs\vital_signs\68xx_vital_signs\src\dss\dss_data_path.c

         if (guiFlag_ClutterRemoval == 1)
         {
             // Clutter Removed Range Profile
             float tempReal_Curr,tempImag_Curr;
             float alphaClutter = 0.01;
             float currVal;

             tempReal_Curr = (floattemp_real;
             tempImag_Curr = (floattemp_imag;
             uint16_t currRangeIndex;
             currRangeIndex = rangeBinIndex - obj->rangeBinStartIndex;

             obj->pTempReal_Prev[currRangeIndex]  = alphaClutter*tempReal_Curr + (1-alphaClutter)*obj->pTempReal_Prev[currRangeIndex];
             obj->pTempImag_Prev[currRangeIndex]  = alphaClutter*tempImag_Curr + (1-alphaClutter)*obj->pTempImag_Prev[currRangeIndex];

             currVal = sqrt((tempReal_Curr - obj->pTempReal_Prev[currRangeIndex])*(tempReal_Curr - obj->pTempReal_Prev[currRangeIndex]) + (tempImag_Curr - obj->pTempImag_Prev[currRangeIndex])*(tempImag_Curr - obj->pTempImag_Prev[currRangeIndex]));
             obj->pRangeProfileClutterRemoved[rangeBinIndex - obj->rangeBinStartIndex] = currVal;

         // Based on the Max value Range-bin
             if (currVal > maxValClutter)
              {
                 maxValClutter = currVal;
                 rangeBinMaxClutter = rangeBinIndex;
              }
         }
  • Hello,

    I will get back to you tomorrow with an answer to your question.

    Best,

    Connor Desmond

  • Hello,

    The general approach to static clutter removal is detailed simply in the following thread:

    https://e2e.ti.com/support/sensors/f/sensors-forum/910221/ccs-iwr6843isk-the-way-to-remove-clutter-in-vitalsign-range-bin

    With regards to how that is implemented here is similar. For a given chirp the range bins are iterated through. For each range bin for a given chirp there is a complex value that is taken from the radar cube. This then is used to generate an average. In this case it is an exponential moving average. This average is taken from the radar cube data and then the magnitude of this "data minus average" value is calculated and given to the array from which stores the range profile. The effect of this is that stationary detected objects in the scene will be removed. With this in mind if you want to learn more about static clutter removal please refer to the OOB lab for the SDK 2.1 version because it has a similar structure to the vital signs lab, but provides a more standard approach to static clutter removal.

    For some documentation please go here:

    <SDK_INSTALL_PATH> mmwave_sdk_02_01_00_04/packages/ti/demo/xwr14xx/mmw/docs/doxygen/html/index.html

    Note this is a 14xx device, but the vital signs lab is implemented using the old SDK 2.1, so this would be the best fit for understanding vital signs.

    Best regards,

    Connor Desmond

  • Dear Desmond

    Thank you for explanation.

    I understood that vital signs use
    "exponential moving average" not "Simple moving average".

    Best Regards.