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.

AWR1443: What is the relationship between Q format and range resolution?

Part Number: AWR1443

Hello,

X/Y/Z is in Q format, and Q format depends on the range resolution.

After the experiment, I found that when the range resolution is 0.04, X/Y/Z is expressed in Q9 format; when the range resolution is 0.3, X/Y/Z is expressed in Q7 format; when the range resolution is 0.977, X/Y/Z is expressed in Q5 format. So what is the relationship between Q format and range resolution? Is there any law?

  • Hi,

    Are you familiar with the mathematical notation of Q format?

    Thank you
    Cesar
  • As described in doxygen documentation (the doxygen of 14xx refers to 16xx for this information as they are identical), xyzQformat is reported in the list descriptor (MmwDemo_output_message_dataObjDescr_t) to allow computation of x,y,z in meters (in floating point) by the receiver of TLV [x,y,z in float meters = TLV x,y,z/2^xyzQformat].

    The calculation of xyzQformat from range resolution and its usage to compute the x,y,z in the TLV can be found by navigating the code to locate the following lines, this should give you the mapping:

    [in main.c]
                dataPathObj->xyzOutputQFormat    = (uint32_t) ceil(log10(16./fabs(dataPathObj->rangeResolution))/log10(2));
    
    ...
        /* Send detected Objects */
        if ((pGuiMonSel->detectedObjects == 1) && (obj->numObjOut > 0))
        {
            MmwDemo_output_message_dataObjDescr descr;
    
            UART_writePolling (uartHandle,
                               (uint8_t*)&tl[tlvIdx],
                               sizeof(MmwDemo_output_message_tl));
            /* Send objects descriptor */
            descr.numDetetedObj = (uint16_t) obj->numObjOut;
            descr.xyzQFormat = (uint16_t) obj->xyzOutputQFormat;
    ..
    
    [in post_processing.c]
    
        uint32_t xyzOutputQFormat = obj->xyzOutputQFormat;
    #define ONE_QFORMAT (1 << xyzOutputQFormat)
    
    ....
        if(x < 0)
        {
            objOut[objOutIndx].x = (int16_t) (x * ONE_QFORMAT - 0.5);
        }
        else
        {
            objOut[objOutIndx].x = (int16_t) (x * ONE_QFORMAT + 0.5);
        }
        if(y < 0)
        {
            objOut[objOutIndx].y = (int16_t) (y * ONE_QFORMAT - 0.5);
        }
        else
        {
            objOut[objOutIndx].y = (int16_t) (y * ONE_QFORMAT + 0.5);
        }
        if(z < 0)
        {
            objOut[objOutIndx].z = (int16_t) (z * ONE_QFORMAT - 0.5);
        }
        else
        {
            objOut[objOutIndx].z = (int16_t) (z * ONE_QFORMAT + 0.5);
        }