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: Lost frames between two files

Part Number: IWR6843


Dear Ti team,

I use iwr6843 radar sensor for collecting data for 3 minutes.

The way mmWave studio works is that when there is 1 gigabit of data it creates a new file for storing the new frames.

What I remarked is that between two consecutive files. There are some lost frames.

How can I collect data in a way not to lose any frame?

Kind regards,

Reda

  • Hello Reda,

    Thankyou for letting us know your observations. 

    Yes, you're right. DCA1000 captures the data in a new file after every 1GB of raw data collection. 

    Can you comment a little more on the issue here: 

    What were the number of frames programmed? and how many of them were lost?  Is this number always fixed or varies based on the number of times you do this experiment?

    How were you able to figure out the lost frames? Have you tried changing the chirp configuration and if yes, does it get better or worsens? 

    Sorry for a lot of questions here. I'm just trying to investigate the issue. 

    Regards,

    Ishita

  • Hello Ishita,

    Thank you for the response. 

    I will answer  your questions in the same order:

    1. I don't fix the number of frames to collect. I am doing human activity recognition and trying to record some scenarios. I stop the radar using mmWave studio when the participant finishes the scenario.

    I don't know exactly how many frames are lost. But I think the number of lost frames is the same.

    2. I figured out the lost frames from the time doppler map. There is a discontinuity (as shown in images) in the signature. This discontinuity happens only when the program do a transition from a 1GB file to the next one.

    I don't want to change the configuration. Since this configuration is the right one for my use case, and all the processing pipeline is adapted to it.

    Kind regards,

    Reda

       

    This is the Lua file:

    -- define some variables
    -- FramecConfig
    CHIRP_LOOP = 100 --default 32 loops --max of 255 (for 256 loops [0-255])
    FRAME_PERIOD = 50 --default 100ms
    FRAME_COUNT = 0 -- infite count is 0


    --BSS and MSS firmware download
    info = debug.getinfo(1,'S');
    file_path = (info.source);
    file_path = string.gsub(file_path, "@","");
    file_path = string.gsub(file_path, "DataCapture_Config.lua","");
    fw_path = file_path.."..\\..\\rf_eval_firmware"

    -- Manually specify partId
    partId = 6843

    --ADC_Data file path
    -- data_path = file_path.."..\\PostProc\\adcCapture_5"
    --adc_data_path = data_path.."\\adc_data.bin"
    -- adc_data_path = data_path.."\\meas_x.bin"
    -- adc_data_path = data_path.."\\recon_asc1.bin"

    -- 19May2021
    data_path = file_path.."..\\PostProc\\adcCapture"
    adc_data_path = data_path.."\\test2x_1.bin"

    -- -- Download Firmware

    -- -- Download BSS Firmware

    -- -- Download MSS Firmware

    -- -- SPI Connect

    -- -- RF Power UP

    -- -------------does reconfiguration start from here?

    -- StaticConfig Tab
    -- if (ar1.ChanNAdcConfig(1, 1, 0, 1, 1, 1, 1, 2, 1, 0) == 0) then -- default
    if (ar1.ChanNAdcConfig(1, 1, 1, 1, 1, 1, 1, 2, 1, 0) == 0) then --asc
    WriteToLog("ChanNAdcConfig Success\n", "green")
    else
    WriteToLog("ChanNAdcConfig failure\n", "red")
    end

    if (partId == 1642) then
    if (ar1.LPModConfig(0, 1) == 0) then
    WriteToLog("LPModConfig Success\n", "green")
    else
    WriteToLog("LPModConfig failure\n", "red")
    end
    else
    if (ar1.LPModConfig(0, 0) == 0) then
    WriteToLog("Regualar mode Cfg Success\n", "green")
    else
    WriteToLog("Regualar mode Cfg failure\n", "red")
    end
    end

    if (ar1.RfInit() == 0) then
    WriteToLog("RfInit Success\n", "green")
    else
    WriteToLog("RfInit failure\n", "red")
    end

    RSTD.Sleep(1000)

    -- DataConfig Tab
    if (ar1.DataPathConfig(1, 1, 0) == 0) then
    WriteToLog("DataPathConfig Success\n", "green")
    else
    WriteToLog("DataPathConfig failure\n", "red")
    end

    if (ar1.LvdsClkConfig(1, 1) == 0) then
    WriteToLog("LvdsClkConfig Success\n", "green")
    else
    WriteToLog("LvdsClkConfig failure\n", "red")
    end

    if((partId == 1642) or (partId == 1843) or (partId == 6843)) then
    if (ar1.LVDSLaneConfig(0, 1, 1, 0, 0, 1, 0, 0) == 0) then
    WriteToLog("LVDSLaneConfig Success\n", "green")
    else
    WriteToLog("LVDSLaneConfig failure\n", "red")
    end
    elseif ((partId == 1243) or (partId == 1443)) then
    if (ar1.LVDSLaneConfig(0, 1, 1, 1, 1, 1, 0, 0) == 0) then
    WriteToLog("LVDSLaneConfig Success\n", "green")
    else
    WriteToLog("LVDSLaneConfig failure\n", "red")
    end
    end

    -- -- skip performing TestSource

    -- SensorConfig Tab
    if((partId == 1642) or (partId == 1843)) then
    if(ar1.ProfileConfig(0, 77, 100, 6, 60, 0, 0, 0, 0, 0, 0, 29.982, 0, 256, 5000, 0, 0, 30) == 0) then
    WriteToLog("ProfileConfig Success\n", "green")
    else
    WriteToLog("ProfileConfig failure\n", "red")
    end
    elseif((partId == 1243) or (partId == 1443)) then
    if(ar1.ProfileConfig(0, 77, 100, 6, 60, 0, 0, 0, 0, 0, 0, 29.982, 0, 256, 10000, 0, 0, 30) == 0) then
    WriteToLog("ProfileConfig Success\n", "green")
    else
    WriteToLog("ProfileConfig failure\n", "red")
    end
    elseif(partId == 6843) then
    -- VCO_0: 0
    -- VCO_1: 131072
    -- if(ar1.ProfileConfig(0, 60.25, 100, 6, 60, 0, 0, 0, 0, 0, 0, 29.982, 0, 256, 10000, 0, 131072, 30) == 0) then
    if(ar1.ProfileConfig(0, 60, 100, 6, 50, 0, 0, 0, 0, 0, 0, 80, 0, 256, 6000, 3, 196610, 30) == 0) then --asc on VCO_0
    WriteToLog("ProfileConfig Success\n", "green")
    else
    WriteToLog("ProfileConfig failure\n", "red")
    end
    end

    -- ProfileConfig has been speficied in previous statements, but if needed (say if partId is not stated), uncomment follow statements
    -- if(ar1.ProfileConfig(0, 60.25, 100, 6, 60, 0, 0, 0, 0, 0, 0, 29.982, 0, 256, 10000, 0, 131072, 30) == 0) then
    -- WriteToLog("ProfileConfig Success\n", "green")
    -- else
    -- WriteToLog("ProfileConfig failure\n", "red")
    -- end

    -- if (ar1.ChirpConfig(0, 0, 0, 0, 0, 0, 0, 1, 1, 0) == 0) then --default
    if (ar1.ChirpConfig(0, 0, 0, 0, 0, 0, 0, 1, 0, 0) == 0) then -- asc.chirp0
    WriteToLog("ChirpConfig Success\n", "green")
    else
    WriteToLog("ChirpConfig failure\n", "red")
    end

    if (ar1.ChirpConfig(1, 1, 0, 0, 0, 0, 0, 0, 1, 0) == 0) then -- asc.chirp1
    WriteToLog("ChirpConfig Success\n", "green")
    else
    WriteToLog("ChirpConfig failure\n", "red")
    end

    if (ar1.ChirpConfig(2, 2, 0, 0, 0, 0, 0, 0, 0, 1) == 0) then -- asc.chirp2
    WriteToLog("ChirpConfig Success\n", "green")
    else
    WriteToLog("ChirpConfig failure\n", "red")
    end

    -- -- TestSource not performed
    -- ar1.DisableTestSource(0)
    -- if (ar1.EnableTestSource(1) == 0) then
    -- WriteToLog("Enabling Test Source Success\n", "green")
    -- else
    -- WriteToLog("Enabling Test Source failure\n", "red")
    -- end
    -- frameCfg 0 2 32 0 100 1 0
    -- if (ar1.FrameConfig(0, 0, 8, 128, 40, 0, 0, 1) == 0) then
    if (ar1.FrameConfig(0, 2, FRAME_COUNT, CHIRP_LOOP, FRAME_PERIOD, 0, 0, 1) == 0) then --asc -- infite frame count
    -- -- frameCount to be set to 0(infite frames) in deployement
    WriteToLog("FrameConfig Success\n", "green")
    else
    WriteToLog("FrameConfig failure\n", "red")
    end

    -- DCAConfig and DataCapture
    -- select Device type
    if (ar1.SelectCaptureDevice("DCA1000") == 0) then
    WriteToLog("SelectCaptureDevice Success\n", "green")
    else
    WriteToLog("SelectCaptureDevice failure\n", "red")
    end

    --DATA CAPTURE CARD API
    if (ar1.CaptureCardConfig_EthInit("192.168.33.30", "192.168.33.180", "12:34:56:78:90:12", 4096, 4098) == 0) then
    WriteToLog("CaptureCardConfig_EthInit Success\n", "green")
    else
    WriteToLog("CaptureCardConfig_EthInit failure\n", "red")
    end

    --AWR12xx or xWR14xx-1, xWR16xx or xWR18xx or xWR68xx- 2 (second parameter indicates the device type)
    if ((partId == 1642) or (partId == 1843) or (partId == 6843)) then
    if (ar1.CaptureCardConfig_Mode(1, 2, 1, 2, 3, 30) == 0) then
    WriteToLog("CaptureCardConfig_Mode Success\n", "green")
    else
    WriteToLog("CaptureCardConfig_Mode failure\n", "red")
    end
    elseif ((partId == 1243) or (partId == 1443)) then
    if (ar1.CaptureCardConfig_Mode(1, 1, 1, 2, 3, 30) == 0) then
    WriteToLog("CaptureCardConfig_Mode Success\n", "green")
    else
    WriteToLog("CaptureCardConfig_Mode failure\n", "red")
    end
    end

    if (ar1.CaptureCardConfig_PacketDelay(25) == 0) then
    WriteToLog("CaptureCardConfig_PacketDelay Success\n", "green")
    else
    WriteToLog("CaptureCardConfig_PacketDelay failure\n", "red")
    end

    --Start Record ADC data
    ar1.CaptureCardConfig_StartRecord(adc_data_path, 1)
    RSTD.Sleep(1000)

    --Trigger frame
    ar1.StartFrame()
    -- RSTD.Sleep(5000)

  • Hello Reda, 

    I'm not completely sure if this discontinuity in the time doppler map corresponds to that. 

    I would like to request for some more time to analyze your situation and then come to a conclusion. Is it okay if I get back to you early next week on this? 

    Regards,

    Ishita

  • Hello Ishita,

    That is ok for me. Thank you for the notice.

    kind regards, 

    Reda

  • Hello Reda, 

    Thankyou for your patience. 

    There is a possibility that the PC is dropping some data packets. We have not tried to look at the continuity between different files since mmwave studio can process only one file. 

    For now can you increase the inter packet delay on the DCA1000 to see if that helps ? 

    Regards,

    Ishita