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.

IWR1443: The configure profile of the vital sign lab

Part Number: IWR1443

Hi,

Why sets the numChirpsPerFrame to 2, given that the process is taken once a frame? In that case, there is one chirp in a frame is useless?

The  configure profile is as follows:

frameCfg 0 0 2 0 50 1 0

That is the chirpEndIdx=0, chirpStartIdx=0, numLoops=2

And the numChirpsPerFrame = (chirpEndIdx-chirpStartIdx+1)*numLoops = 2.

Thanks for your reply!

Regards,

Hengyang Fang

  • Hi Hengyang,

    Your understanding is correct that only one chirp is required. However, at a minimum we have to configure 2 chirps because the ADC data is stored in a ping-pong buffer. The vital signs lab uses data from only the first chirp while the second chirp is discarded.

    Regards
    -Nitin
  • Hi Nitin,
    Thanks a lot!
    Regards,
    Hengyang
  • Hi Nitin,

    Another question is that the LSB of the frame periodicity in sdk user guide is 1 ms, while in the source code it becomes 5ns, which one is correct?

    And if it equals to 5ns, the spectral estimation based on the number of peaks will be confused, since the obj->peakDistanceHeart_Min is to large.

    numPeaksHeart = find_Peaks(obj->tempCircularBuff, float_type, pPeakLocsHeart,obj->pPeakValues, 0, circular_Buffer_size_heart - 1);
    if (numPeaksHeart != 0)
    {
    numPeaksHeart = filterPeaksWfm(pPeakLocsHeart, pPeakLocsValid, numPeaksHeart, obj->peakDistanceHeart_Min, obj->peakDistanceHeart_Max);
    }

    obj->peakDistanceHeart_Min  = (uint16_t) obj->samplingFreq_Hz/(obj->heart_endFreq_Hz);

    Regards,

    Hengyang Fang

  • Hi Henyang,

    The frameCfg command takes the frame periodicity in milliseconds but this is not directly sent to the mmwavelink (which is the low level api used to communicate with the sensor front-end). The frameCfg cli handler (

    C:\ti\mmwave_sdk_01_01_00_02\packages\ti\utils\cli\src\cli_mmwave.c) parses the frameCfg command and calls the lower level mmwavelink function rlSetFrameCfg.

    As defined in the mmwavelink doxygen documentation, each LSB of frame periodicity equals 5ns (file:///C:/ti/mmwave_sdk_01_01_00_02/packages/ti/control/mmwavelink/docs/doxygen/html/group___sensor.html#gaf1e5cbc25891714db321da3bfa0d2014)

    So basically, the frameCfg command on the CLI takes values in ms which is converted to the hardware required value inside the CLI handler function mentioned above. Here's the frameCfg CLI handler from mmwave_cli.c for quick reference.

    /**
     *  @b Description
     *  @n
     *      This is the CLI Handler for the frame configuration command
     *
     *  @param[in] argc
     *      Number of arguments
     *  @param[in] argv
     *      Arguments
     *
     *  \ingroup CLI_UTIL_INTERNAL_FUNCTION
     *
     *  @retval
     *      Success -   0
     *  @retval
     *      Error   -   <0
     */
    static int32_t CLI_MMWaveFrameCfg (int32_t argc, char* argv[])
    {
        rlFrameCfg_t    frameCfg;
    
        /* Sanity Check: Minimum argument check */
        if (argc != 8)
        {
            CLI_write ("Error: Invalid usage of the CLI command\n");
            return -1;
        }
    
        /* Sanity Check: Frame configuration is valid only for the Frame or
                         Advanced Frame Mode: */
        if (gCLIMMWaveControlCfg.dfeDataOutputMode != MMWave_DFEDataOutputMode_FRAME)
        {
            CLI_write ("Error: Configuration is valid only if the DFE Output Mode is Chirp\n");
            return -1;
        }
    
        /* Initialize the frame configuration: */
        memset ((void *)&frameCfg, 0, sizeof(rlFrameCfg_t));
    
        /* Populate the frame configuration: */
        frameCfg.chirpStartIdx      = atoi (argv[1]);
        frameCfg.chirpEndIdx        = atoi (argv[2]);
        frameCfg.numLoops           = atoi (argv[3]);
        frameCfg.numFrames          = atoi (argv[4]);
        frameCfg.framePeriodicity   = (uint32_t)((float)atof(argv[5]) * 1000000 / 5);
        frameCfg.triggerSelect      = atoi (argv[6]);
        frameCfg.frameTriggerDelay  = (uint32_t)((float)atof(argv[7]) * 1000000 / 5);
    
        /* Save Configuration to use later */
        memcpy((void *)&gCLIMMWaveControlCfg.u.frameCfg.frameCfg, (void *)&frameCfg, sizeof(rlFrameCfg_t));
        return 0;
    }

    Regards

    -Nitin