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.

AWR1243: P Cascade Radar : very low contrast data

Part Number: AWR1243
Other Parts Discussed in Thread: MMWCAS-DSP-EVM, TIDEP-01012, TDA2

Hi, 

I am using the TI AWR1243P Cascade Radar evaluation board (TIDEP-01012) with the TI MMWCAS-DSP-EVM Evaluation module (TIDEP-01017).

I tried both the MIMO script and the TxBF lua script and the postprocessing files that are in the Matlab examples. 

A picture of the setup is below: I am looking at a metallic plaque which is at about 4m away.

Below are the results I obtain with both scripts. 

The range azimuth heatmaps show some blobs but with very low contrast, do you know what could be the reason for it? 

The range profile seems to indicate that I have a very high background signal at about 100dB, is that correct? 

Thank you very much,

With the TxBF script

With the MIMO script

Picture of the setup 

  • Hi Alice,

                The plot does not look correct. The ADC data could be wrong. Is this observation repeatable? Would advice to follow all the steps correctly. 

    Regards

  • Hi Abhed, 

    Thanks for your reply. Yes I did it multiple times and always get the same result. Do you have an intuition on where could come the mistake? 

    Regards

  • Hi,

          The data appears to be not collected correctly. You need to look at the waveform of the raw ADC data. Typically, the ADC data looks like some sinusoid, and should not have any spikes.

    Regards

  • Hi, 

    Here are some plots of the adcADC data that I gather for different receiver and transmit antennas. Is it to be expected? 

  • Hi Alice,

                   Is this from mmWave Studio?  This waveform doesn't look good. It should be a cleaner sinusoidal waveform. 

    Regards

  • Hi Abhed, 

    I am using mmWaveStudio to take the data and I am using the matlab file cascade_MIMO_signalProcessing.m to get the raw data. I am plotting here the variable adcData. 

  • Do you know what tests I could do to narrow down the problem?
    I am using the lua script Cascade_Configuration_MIMO.lua and Cascade_Capture.lua within mmWaveStudio and then after the transfer, I use the cascade_MIMO_signalProcessing.m in matlab to plot the results. 

  • Hi,

        Did you try the manual way of configuring the devices and then capture and using the inbilt post processing of studio?

    Regards

  • Hi, 

    I tried using the inbuilt post processing of studio after running the lua script. 

    I have very different results than with the Matlab code cascade_MIMO_signalProcessing.m. 

    Please find here the different results. 

    The setup :  The building is about 20 meters away and the trees at 13 m. 

    Results with lua scripts + inbult post-processing of studio : 



    Results with lua scrips + matlab cascade_MIMO_signalProcessing.m : 

    The range/velocity plots and the rangle-angle plots should be the same in my understanding. Yes they look very different, and both looks wrong with respect to the scene that I am imaging. 

  • Could you explain please to what correspond the 4 devices ( one master and 3 slaves) with respect to the 16 Rx channels and 12 Tx channels? 

  • Hi Alice,

                so the graphs indeed look unexpected, but with Glass being placed very close also has impact. I would suggest to perform the same experiment just outside the window, facing same view.

    On the TX and RX channels is your query on location of Primary and secondary devices physically on the board? If yes then you can find that detail in design documents.

    Regards

  • Hi Abhed, 

    Thank you for your response. I did the same tests again without the windows multiple times and always get similar results as displayed below. 

    With the inbuilt functions : 

    With the Matlab script: 

  • Hi Alice,

                  Can you share the steps which you followed in manual configuration, may be the log file?

    Regards

  • 07-Dec-2021 09:40:06: API:PowerOff,0,
    07-Dec-2021 09:40:27: API:ChannelConfig,7,15,0,
    07-Dec-2021 09:40:28: API:AdcOutConfig,2,1,0,
    07-Dec-2021 09:40:28: API:DataFmtConfig,15,2,1,0,1,0,
    07-Dec-2021 09:40:56: API:ChannelConfig,7,15,0,
    07-Dec-2021 09:40:56: API:AdcOutConfig,2,1,0,
    07-Dec-2021 09:40:56: API:DataFmtConfig,15,2,1,0,1,0,
    07-Dec-2021 09:40:56: API:LowPowerConfig,0,0,0,
    07-Dec-2021 09:40:57: API:DataPathConfig,0,1,0,2,0,
    07-Dec-2021 09:40:57: API:LvdsClkConfig,1,1,0,
    07-Dec-2021 09:40:57: TSW1400 Sampling rate : 600000000 7500000,0,
    07-Dec-2021 09:40:57: API:SetHsiClock,9,0,
    07-Dec-2021 09:40:57: API:LaneConfig,15,0,
    07-Dec-2021 09:40:57: API:LvdsLaneConfig,0,1,0,
    07-Dec-2021 09:40:57: API:ProfileConfig,0,1435384036,500,600,4000,0,0,1636,0,256,8000,0,0,48,0,
    07-Dec-2021 09:40:57: API:ChirpConfig,0,0,0,0,0,0,0,0,0,
    07-Dec-2021 09:40:57: API:ChirpConfig,1,1,0,0,0,0,0,0,0,
    07-Dec-2021 09:40:57: API:ChirpConfig,2,2,0,0,0,0,0,0,0,
    07-Dec-2021 09:40:57: API:ChirpConfig,3,3,0,0,0,0,0,0,0,
    07-Dec-2021 09:40:57: API:ChirpConfig,4,4,0,0,0,0,0,0,0,
    07-Dec-2021 09:40:57: API:ChirpConfig,5,5,0,0,0,0,0,0,0,
    07-Dec-2021 09:40:58: API:ChirpConfig,6,6,0,0,0,0,0,0,0,
    07-Dec-2021 09:40:58: API:ChirpConfig,7,7,0,0,0,0,0,0,0,
    07-Dec-2021 09:40:58: API:ChirpConfig,8,8,0,0,0,0,0,0,0,
    07-Dec-2021 09:40:58: API:ChirpConfig,9,9,0,0,0,0,0,4,0,
    07-Dec-2021 09:40:58: API:ChirpConfig,10,10,0,0,0,0,0,2,0,
    07-Dec-2021 09:40:58: API:ChirpConfig,11,11,0,0,0,0,0,1,0,
    07-Dec-2021 09:40:58: API:ChirpConfig,0,0,0,0,0,0,0,0,0,
    07-Dec-2021 09:40:58: API:ChirpConfig,1,1,0,0,0,0,0,0,0,
    07-Dec-2021 09:40:58: API:ChirpConfig,2,2,0,0,0,0,0,0,0,
    07-Dec-2021 09:40:58: API:ChirpConfig,3,3,0,0,0,0,0,0,0,
    07-Dec-2021 09:40:59: API:ChirpConfig,4,4,0,0,0,0,0,0,0,
    07-Dec-2021 09:40:59: API:ChirpConfig,5,5,0,0,0,0,0,0,0,
    07-Dec-2021 09:40:59: API:ChirpConfig,6,6,0,0,0,0,0,4,0,
    07-Dec-2021 09:40:59: API:ChirpConfig,7,7,0,0,0,0,0,2,0,
    07-Dec-2021 09:40:59: API:ChirpConfig,8,8,0,0,0,0,0,1,0,
    07-Dec-2021 09:40:59: API:ChirpConfig,9,9,0,0,0,0,0,0,0,
    07-Dec-2021 09:40:59: API:ChirpConfig,10,10,0,0,0,0,0,0,0,
    07-Dec-2021 09:40:59: API:ChirpConfig,11,11,0,0,0,0,0,0,0,
    07-Dec-2021 09:40:59: API:ChirpConfig,0,0,0,0,0,0,0,0,0,
    07-Dec-2021 09:40:59: API:ChirpConfig,1,1,0,0,0,0,0,0,0,
    07-Dec-2021 09:40:59: API:ChirpConfig,2,2,0,0,0,0,0,0,0,
    07-Dec-2021 09:41:00: API:ChirpConfig,3,3,0,0,0,0,0,4,0,
    07-Dec-2021 09:41:00: API:ChirpConfig,4,4,0,0,0,0,0,2,0,
    07-Dec-2021 09:41:00: API:ChirpConfig,5,5,0,0,0,0,0,1,0,
    07-Dec-2021 09:41:00: API:ChirpConfig,6,6,0,0,0,0,0,0,0,
    07-Dec-2021 09:41:00: API:ChirpConfig,7,7,0,0,0,0,0,0,0,
    07-Dec-2021 09:41:00: API:ChirpConfig,8,8,0,0,0,0,0,0,0,
    07-Dec-2021 09:41:00: API:ChirpConfig,9,9,0,0,0,0,0,0,0,
    07-Dec-2021 09:41:00: API:ChirpConfig,10,10,0,0,0,0,0,0,0,
    07-Dec-2021 09:41:00: API:ChirpConfig,11,11,0,0,0,0,0,0,0,
    07-Dec-2021 09:41:00: API:ChirpConfig,0,0,0,0,0,0,0,4,0,
    07-Dec-2021 09:41:01: API:ChirpConfig,1,1,0,0,0,0,0,2,0,
    07-Dec-2021 09:41:01: API:ChirpConfig,2,2,0,0,0,0,0,1,0,
    07-Dec-2021 09:41:01: API:ChirpConfig,3,3,0,0,0,0,0,0,0,
    07-Dec-2021 09:41:01: API:ChirpConfig,4,4,0,0,0,0,0,0,0,
    07-Dec-2021 09:41:01: API:ChirpConfig,5,5,0,0,0,0,0,0,0,
    07-Dec-2021 09:41:01: API:ChirpConfig,6,6,0,0,0,0,0,0,0,
    07-Dec-2021 09:41:01: API:ChirpConfig,7,7,0,0,0,0,0,0,0,
    07-Dec-2021 09:41:01: API:ChirpConfig,8,8,0,0,0,0,0,0,0,
    07-Dec-2021 09:41:02: API:ChirpConfig,9,9,0,0,0,0,0,0,0,
    07-Dec-2021 09:41:02: API:ChirpConfig,10,10,0,0,0,0,0,0,0,
    07-Dec-2021 09:41:02: API:ChirpConfig,11,11,0,0,0,0,0,0,0,
    07-Dec-2021 09:41:02: API:EnableTestSource,0,1,0,
    07-Dec-2021 09:41:02: API:FrameConfig,0,11,10,64,20000000,0,512,0,
    07-Dec-2021 09:41:02: API:AdvancedFrameConfig,1,0,0,0,12,64,20000000,0,1,1,20000000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    07-Dec-2021 09:41:02: API:EnableTestSource,0,1,0,
    07-Dec-2021 09:41:03: API:FrameConfig,0,11,10,64,20000000,0,512,0,
    07-Dec-2021 09:41:03: API:AdvancedFrameConfig,1,0,0,0,12,64,20000000,0,1,1,20000000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    07-Dec-2021 09:41:28: API:SensorStart,0,
    07-Dec-2021 09:41:28: API:SensorStart,0,
    07-Dec-2021 09:41:28: API:SensorStart,0,
    07-Dec-2021 09:41:28: API:SensorStart,0,
    07-Dec-2021 09:42:02: API:update_num_adc_files_and_frames,1,10,15,0,
    07-Dec-2021 09:44:59: API:SensorStart,0,
    07-Dec-2021 09:44:59: API:SensorStart,0,
    07-Dec-2021 09:44:59: API:SensorStart,0,
    07-Dec-2021 09:44:59: API:SensorStart,0,
    

    Hi Abhed, 

    Here is the log file

  • Here is the Cascade_capture.lua script

    --[[

        A. FRAMING & CAPTURE

        1. Triggering Slave (3, 2, 1) sequentially in a hardware triggered mode.

        2. Triggering Master in a software triggered mode.

        

        B. TRANSFERRING FILES

        1. The data is stored in file(s) with max cap placed at 2 GB.

        2. The files can be retrieved from the SSD (/mnt/ssd folder) using WinSCP.

    Note: Update lines 17 to 43 as needed before using this script.

        

    --]]

    -- Note: "capture_time"  is a timeout for this script alone to exit - it does not control the actual duration of capture.

    -- The actual capture duration depends on the configured frame time and number of frames

    capture_time = 3000                             -- ms

    inter_loop_time = 2000 -- ms

    num_loops = 1

    -- Note: Change the following three parameters as desired:

    -- n_files_allocation: is the number of files to preallocate on the SSD.

    -- This improves capture reliability by not having frame drops while switching files.

    -- The tradeoff is that each file is a fixed 2047 MB even if a smaller number of frames are captured.

    -- Pre-allocate as many files as needed based on (size_per_frame * number_of_frames) to be captured

    -- data_packaging: select whether to use 16-bit ADC data as is, or drop 4 lsbits and save 4*12-bit numbers in a packed form

    -- This allows a higher frame rate to be achieved, at the expense of some post-processing to unpack the data later.

    -- (Matlab should still be able to unpack the data using the '*ubit12' argument to fread instead of 'uint16')

    -- The default is no-packing, for simplicity

    -- capture_directory: is the filename under which captures are stored on the SSD

    -- and is also the directory to which files will be transferred back to the host

    -- The captures are copied to the PostProc folder within mmWave Studio

    -- Note: If this script is called multiple times without changing the directory name, then all captured files will be in the same directory.

    -- with filename suffixes incremented automatically. It may be hard to know which captured files correspond to which run of the script.

    -- Note: It is strongly recommended to change this directory name between captures.

    n_files_allocation              =   0

    data_packaging                  =   0                                -- 0: 16-bit, 1: 12-bit

    capture_directory               =   "testinsidereflector_1_3m"

    num_frames_to_capture = 0 -- 0: default case; Any positive value - number of frames to capture

    framing_type                    =   1                                -- 0: infinite, 1: finite

    --------------------------------------------------DATA CAPTURE------------------------------------------------------------

    -- Function to start/stop frame

    function Framing_Control(Device_ID, En1_Dis0)

    local status = 0 

            if (En1_Dis0 == 1) then

    status = ar1.StartFrame_mult(dev_list[Device_ID]) --Start Trigger Frame

                if (status == 0) then

                    WriteToLog("Device "..Device_ID.." : Start Frame Successful\n", "green")

                else

                    WriteToLog("Device "..Device_ID.." : Start Frame Failed\n", "red")

                    return -5

                end

            else

    status = ar1.StopFrame_mult(dev_list[Device_ID]) --Stop Trigger Frame

                if (status == 0) then

                    WriteToLog("Device "..Device_ID.." : Stop Frame Successful\n", "green")

                else

                    WriteToLog("Device "..Device_ID.." : Stop Frame Failed\n", "red")

                    return -5

                end

            end

        

        return status

    end

    while (num_loops > 0)

    do

    WriteToLog("Loops Remaining : "..num_loops.."\n", "purple")

    -- TDA ARM

    WriteToLog("Starting TDA ARM...\n", "blue")

    status = ar1.TDACaptureCard_StartRecord_mult(1, n_files_allocation, data_packaging, capture_directory, num_frames_to_capture)

    if (status == 0) then

        WriteToLog("TDA ARM Successful\n", "green")

    else

        WriteToLog("TDA ARM Failed\n", "red")

        return -5

    end    

    RSTD.Sleep(1000)

    -- Triggering the data capture

    WriteToLog("Starting Frame Trigger sequence...\n", "blue")

    if (RadarDevice[4]==1)then

    Framing_Control(4,1)

    end

    if (RadarDevice[3]==1)then

    Framing_Control(3,1)

    end

    if (RadarDevice[2]==1)then

    Framing_Control(2,1)

    end

    Framing_Control(1,1)

    WriteToLog("Capturing AWR device data to the TDA SSD...\n", "blue")

    RSTD.Sleep(capture_time)

    if (framing_type == 0) then

        

        -- Stop capturing

        WriteToLog("Starting Frame Stop sequence...\n", "blue")

        if (RadarDevice[4]==1)then

            Framing_Control(4,0)

        end

        if (RadarDevice[3]==1)then

            Framing_Control(3,0)

        end

        if (RadarDevice[2]==1)then

            Framing_Control(2,0)

        end

        

        Framing_Control(1,0)

    end

    WriteToLog("Capture sequence completed...\n", "blue")

    num_loops = num_loops - 1

    RSTD.Sleep(inter_loop_time)

    end

    -- Enable the below if required

    --[[   

        WriteToLog("Starting Transfer files using WinSCP..\n", "blue")

        status = ar1.TransferFilesUsingWinSCP_mult(1)

        if(status == 0) then

            WriteToLog("Transferred files! COMPLETE!\n", "green")

        else

            WriteToLog("Transferring files FAILED!\n", "red")

            return -5

        end 

    --]]

  •  Here is the Cascade_Configuration_MIMO_original.lua script. 

    --[[

    Sequence being followed

    A. CONFIGURATION

    1. Connecting to TDA

    1. Configuring Master from SOP till Channel Config

    2. Configuring Slave (i) sequentially from SOP till SPI Connect. i = 1, 2, 3

    3. Configuring Slaves together from F/W download till Channel Config

    4. Configuring all devices together from LDO Bypass till Frame Config

    NOTE:

    Update the following in the script accordingly before running

    1. metaImage F/W path on line 33

    2. TDA Host Board IP Address on line 38

    --]]

        

    ----------------------------------------User Constants----------------------------------------------------

           

    dev_list = {1, 2, 4, 8}                    -- Device map

    RadarDevice = {1, 1, 1, 1}     -- {dev1, dev2, dev3, dev4}, 1: Enable, 0: Disable

    cascade_mode_list = {1, 2, 2, 2}     -- 0: Single chip, 1: Master, 2: Slave

    -- F/W Download Path

    -- Uncomment the next line if you wish to pop-up a dialog box to select the firmware image file

    -- Otherwise, hardcode the path to the firmware metaimage below

    -- By default, the firmware filename is: xwr12xx_metaImage.bin

    --

    -- metaImagePath                   =   RSTD.BrowseForFile(RSTD.GetSettingsPath(), "bin", "Browse to .bin file")

    -- metaImagePath                   =   "C:\\ti\\mmwave_dfp_01_02_05_01\\firmware\\xwr12xx_metaImage.bin"

    metaImagePath                   =   "C:\\ti\\mmwave_dfp_01_02_06_03\\firmware\\xwr12xx_metaImage.bin"

    -- IP Address for the TDA2 Host Board

    -- Change this accordingly for your setup

    TDA_IPAddress                   =   "192.168.33.180"

    -- Device map of all the devices to be enabled by TDA

    -- 1 - master ; 2- slave1 ; 4 - slave2 ; 8 - slave3

    deviceMapOverall                =   RadarDevice[1] + (RadarDevice[2]*2) + (RadarDevice[3]*4) + (RadarDevice[4]*8)

    deviceMapSlaves                 =   (RadarDevice[2]*2) + (RadarDevice[3]*4) + (RadarDevice[4]*8)

    -- Enable/Disable Test Source

    -- This is useful during bringup

    test_source_enable              =   0                               -- 0: Disable, 1: Enable    

        

    ------------------------------------------- Sensor Configuration ------------------------------------------------

    -- The sensor configuration consists of 3 sections:

    -- 1) Profile Configuration (common to all 4 AWR devices)

    -- 2) Chirp Configuration (unique for each AWR device - mainly because TXs to use are different for each chirp)

    -- 3) Frame Configuration (common to all 4 AWR devices, except for the trigger mode for the master)

    -- Change the values below as needed.

    -- Profile configuration

    local profile_indx              =   0

    local start_freq = 77 -- GHz

    local slope = 79  -- MHz/us

    local idle_time = 5 -- us

    local adc_start_time = 6 -- us

    local adc_samples = 256     -- Number of samples per chirp

    local sample_freq = 8000 -- ksps

    local ramp_end_time = 40 -- us

    local rx_gain = 48 -- dB

    local tx0OutPowerBackoffCode    =   0

    local tx1OutPowerBackoffCode    =   0

    local tx2OutPowerBackoffCode    =   0

    local tx0PhaseShifter           =   0

    local tx1PhaseShifter           =   0

    local tx2PhaseShifter           =   0

    local txStartTimeUSec           =   0

    local hpfCornerFreq1            =   0                               -- 0: 175KHz, 1: 235KHz, 2: 350KHz, 3: 700KHz

    local hpfCornerFreq2            =   0                               -- 0: 350KHz, 1: 700KHz, 2: 1.4MHz, 3: 2.8MHz

    -- Frame configuration

    local start_chirp_tx = 0

    local end_chirp_tx = 11

    local nchirp_loops = 64 -- Number of chirps per frame

    local nframes_master = 10     -- Number of Frames for Master

    local nframes_slave     = 10     -- Number of Frames for Slaves

    local Inter_Frame_Interval = 100 -- ms

    local trigger_delay             =   0                               -- us

    local nDummy_chirp              =   0       

    local trig_list = {1,2,2,2}                     -- 1: Software trigger, 2: Hardware trigger    

    -- Function to configure the chirps specific to a device

    -- 12 chirps are configured below, individually for each AWR device

    --

    -- |-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|

    -- |       | Dev 1 | Dev 1 | Dev 1 | Dev 2 | Dev 2 | Dev 2 | Dev 3 | Dev 3 | Dev 3 | Dev 4 | Dev 4 | Dev 4 |

    -- | Chirp |  TX0  |  TX1  |  TX2  |  TX 0 |  TX1  |  TX2  |  TX0  |  TX1  |  TX2  |  TX0  |  TX1  |  TX2  |

    -- |-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|

    -- |     0 |     0 |     0 |     0 |     0 |     0 |     0 |     0 |     0 |     0 |     0 |     0 |     1 |

    -- |     1 |     0 |     0 |     0 |     0 |     0 |     0 |     0 |     0 |     0 |     0 |     1 |     0 |

    -- |     2 |     0 |     0 |     0 |     0 |     0 |     0 |     0 |     0 |     0 |     1 |     0 |     0 |

    -- |     3 |     0 |     0 |     0 |     0 |     0 |     0 |     0 |     0 |     1 |     0 |     0 |     0 |

    -- |     4 |     0 |     0 |     0 |     0 |     0 |     0 |     0 |     1 |     0 |     0 |     0 |     0 |

    -- |     5 |     0 |     0 |     0 |     0 |     0 |     0 |     1 |     0 |     0 |     0 |     0 |     0 |

    -- |     6 |     0 |     0 |     0 |     0 |     0 |     1 |     0 |     0 |     0 |     0 |     0 |     0 |

    -- |     7 |     0 |     0 |     0 |     0 |     1 |     0 |     0 |     0 |     0 |     0 |     0 |     0 |

    -- |     8 |     0 |     0 |     0 |     1 |     0 |     0 |     0 |     0 |     0 |     0 |     0 |     0 |

    -- |     9 |     0 |     0 |     1 |     0 |     0 |     0 |     0 |     0 |     0 |     0 |     0 |     0 |

    -- |    10 |     0 |     1 |     0 |     0 |     0 |     0 |     0 |     0 |     0 |     0 |     0 |     0 |

    -- |    11 |     1 |     0 |     0 |     0 |     0 |     0 |     0 |     0 |     0 |     0 |     0 |     0 |

    -- |-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|

    --

    --

    -- Note: The syntax for this API is:

    -- ar1.ChirpConfig_mult(RadarDeviceId, chirpStartIdx, chirpEndIdx, profileId, startFreqVar, freqSlopeVar, idleTimeVar, adcStartTimeVar, tx0Enable, tx1Enable, tx2Enable)

    function Configure_Chirps(i)

    if (i == 1) then

                

                -- Chirp 0

    if (0 == ar1.ChirpConfig_mult(dev_list[i], 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)) then

    WriteToLog("Device "..i.." : Chirp 0 Configuration successful\n", "green")

    else

    WriteToLog("Device "..i.." : Chirp 0 Configuration failed\n", "red")

    return -4

    end

                

                -- Chirp 1

    if (0 == ar1.ChirpConfig_mult(dev_list[i], 1, 1, 0, 0, 0, 0, 0, 0, 0, 0)) then

    WriteToLog("Device "..i.." : Chirp 1 Configuration successful\n", "green")

    else

    WriteToLog("Device "..i.." : Chirp 1 Configuration failed\n", "red")

    return -4

    end

                

                -- Chirp 2

    if (0 == ar1.ChirpConfig_mult(dev_list[i], 2, 2, 0, 0, 0, 0, 0, 0, 0, 0)) then

    WriteToLog("Device "..i.." : Chirp 2 Configuration successful\n", "green")

    else

    WriteToLog("Device "..i.." : Chirp 2 Configuration failed\n", "red")

    return -4

    end

                

                -- Chirp 3

    if (0 == ar1.ChirpConfig_mult(dev_list[i], 3, 3, 0, 0, 0, 0, 0, 0, 0, 0)) then

    WriteToLog("Device "..i.." : Chirp 3 Configuration successful\n", "green")

    else

    WriteToLog("Device "..i.." : Chirp 3 Configuration failed\n", "red")

    return -4

    end

                

                -- Chirp 4

    if (0 == ar1.ChirpConfig_mult(dev_list[i], 4, 4, 0, 0, 0, 0, 0, 0, 0, 0)) then

    WriteToLog("Device "..i.." : Chirp 4 Configuration successful\n", "green")

    else

    WriteToLog("Device "..i.." : Chirp 4 Configuration failed\n", "red")

    return -4

    end

                

                -- Chirp 5

    if (0 == ar1.ChirpConfig_mult(dev_list[i], 5, 5, 0, 0, 0, 0, 0, 0, 0, 0)) then

    WriteToLog("Device "..i.." : Chirp 5 Configuration successful\n", "green")

    else

    WriteToLog("Device "..i.." : Chirp 5 Configuration failed\n", "red")

    return -4

    end

                

                -- Chirp 6

    if (0 == ar1.ChirpConfig_mult(dev_list[i], 6, 6, 0, 0, 0, 0, 0, 0, 0, 0)) then

    WriteToLog("Device "..i.." : Chirp 6 Configuration successful\n", "green")

    else

    WriteToLog("Device "..i.." : Chirp 6 Configuration failed\n", "red")

    return -4

    end

                

                -- Chirp 7

    if (0 == ar1.ChirpConfig_mult(dev_list[i], 7, 7, 0, 0, 0, 0, 0, 0, 0, 0)) then

    WriteToLog("Device "..i.." : Chirp 7 Configuration successful\n", "green")

    else

    WriteToLog("Device "..i.." : Chirp 7 Configuration failed\n", "red")

    return -4

    end

                

                -- Chirp 8

    if (0 == ar1.ChirpConfig_mult(dev_list[i], 8, 8, 0, 0, 0, 0, 0, 0, 0, 0)) then

    WriteToLog("Device "..i.." : Chirp 8 Configuration successful\n", "green")

    else

    WriteToLog("Device "..i.." : Chirp 8 Configuration failed\n", "red")

    return -4

    end

                

                -- Chirp 9

    if (0 == ar1.ChirpConfig_mult(dev_list[i], 9, 9, 0, 0, 0, 0, 0, 0, 0, 1)) then

    WriteToLog("Device "..i.." : Chirp 9 Configuration successful\n", "green")

    else

    WriteToLog("Device "..i.." : Chirp 9 Configuration failed\n", "red")

    return -4

    end

                

                -- Chirp 10

    if (0 == ar1.ChirpConfig_mult(dev_list[i], 10, 10, 0, 0, 0, 0, 0, 0, 1, 0)) then

    WriteToLog("Device "..i.." : Chirp 10 Configuration successful\n", "green")

    else

    WriteToLog("Device "..i.." : Chirp 10 Configuration failed\n", "red")

    return -4

    end

                

                -- Chirp 11

    if (0 == ar1.ChirpConfig_mult(dev_list[i], 11, 11, 0, 0, 0, 0, 0, 1, 0, 0)) then

    WriteToLog("Device "..i.." : Chirp 11 Configuration successful\n", "green")

    else

    WriteToLog("Device "..i.." : Chirp 11 Configuration failed\n", "red")

    return -4

    end

    elseif (i == 2) then

        

                -- Chirp 0

    if (0 == ar1.ChirpConfig_mult(dev_list[i], 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)) then

    WriteToLog("Device "..i.." : Chirp 0 Configuration successful\n", "green")

    else

    WriteToLog("Device "..i.." : Chirp 0 Configuration failed\n", "red")

    return -4

    end

                

                -- Chirp 1

    if (0 == ar1.ChirpConfig_mult(dev_list[i], 1, 1, 0, 0, 0, 0, 0, 0, 0, 0)) then

    WriteToLog("Device "..i.." : Chirp 1 Configuration successful\n", "green")

    else

    WriteToLog("Device "..i.." : Chirp 1 Configuration failed\n", "red")

    return -4

    end

                

                -- Chirp 2

    if (0 == ar1.ChirpConfig_mult(dev_list[i], 2, 2, 0, 0, 0, 0, 0, 0, 0, 0)) then

    WriteToLog("Device "..i.." : Chirp 2 Configuration successful\n", "green")

    else

    WriteToLog("Device "..i.." : Chirp 2 Configuration failed\n", "red")

    return -4

    end

                

                -- Chirp 3

    if (0 == ar1.ChirpConfig_mult(dev_list[i], 3, 3, 0, 0, 0, 0, 0, 0, 0, 0)) then

    WriteToLog("Device "..i.." : Chirp 3 Configuration successful\n", "green")

    else

    WriteToLog("Device "..i.." : Chirp 3 Configuration failed\n", "red")

    return -4

    end

                

                -- Chirp 4

    if (0 == ar1.ChirpConfig_mult(dev_list[i], 4, 4, 0, 0, 0, 0, 0, 0, 0, 0)) then

    WriteToLog("Device "..i.." : Chirp 4 Configuration successful\n", "green")

    else

    WriteToLog("Device "..i.." : Chirp 4 Configuration failed\n", "red")

    return -4

    end

                

                -- Chirp 5

    if (0 == ar1.ChirpConfig_mult(dev_list[i], 5, 5, 0, 0, 0, 0, 0, 0, 0, 0)) then

    WriteToLog("Device "..i.." : Chirp 5 Configuration successful\n", "green")

    else

    WriteToLog("Device "..i.." : Chirp 5 Configuration failed\n", "red")

    return -4

    end

                

                -- Chirp 6

    if (0 == ar1.ChirpConfig_mult(dev_list[i], 6, 6, 0, 0, 0, 0, 0, 0, 0, 1)) then

    WriteToLog("Device "..i.." : Chirp 6 Configuration successful\n", "green")

    else

    WriteToLog("Device "..i.." : Chirp 6 Configuration failed\n", "red")

    return -4

    end

                

                -- Chirp 7

    if (0 == ar1.ChirpConfig_mult(dev_list[i], 7, 7, 0, 0, 0, 0, 0, 0, 1, 0)) then

    WriteToLog("Device "..i.." : Chirp 7 Configuration successful\n", "green")

    else

    WriteToLog("Device "..i.." : Chirp 7 Configuration failed\n", "red")

    return -4

    end

                

                -- Chirp 8

    if (0 == ar1.ChirpConfig_mult(dev_list[i], 8, 8, 0, 0, 0, 0, 0, 1, 0, 0)) then

    WriteToLog("Device "..i.." : Chirp 8 Configuration successful\n", "green")

    else

    WriteToLog("Device "..i.." : Chirp 8 Configuration failed\n", "red")

    return -4

    end

                

                -- Chirp 9

    if (0 == ar1.ChirpConfig_mult(dev_list[i], 9, 9, 0, 0, 0, 0, 0, 0, 0, 0)) then

    WriteToLog("Device "..i.." : Chirp 9 Configuration successful\n", "green")

    else

    WriteToLog("Device "..i.." : Chirp 9 Configuration failed\n", "red")

    return -4

    end

                

                -- Chirp 10

    if (0 == ar1.ChirpConfig_mult(dev_list[i], 10, 10, 0, 0, 0, 0, 0, 0, 0, 0)) then

    WriteToLog("Device "..i.." : Chirp 10 Configuration successful\n", "green")

    else

    WriteToLog("Device "..i.." : Chirp 10 Configuration failed\n", "red")

    return -4

    end

                

                -- Chirp 11

    if (0 == ar1.ChirpConfig_mult(dev_list[i], 11, 11, 0, 0, 0, 0, 0, 0, 0, 0)) then

    WriteToLog("Device "..i.." : Chirp 11 Configuration successful\n", "green")

    else

    WriteToLog("Device "..i.." : Chirp 11 Configuration failed\n", "red")

    return -4

    end

                

        elseif (i == 3) then

        

                -- Chirp 0

    if (0 == ar1.ChirpConfig_mult(dev_list[i], 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)) then

    WriteToLog("Device "..i.." : Chirp 0 Configuration successful\n", "green")

    else

    WriteToLog("Device "..i.." : Chirp 0 Configuration failed\n", "red")

    return -4

    end

                

                -- Chirp 1

    if (0 == ar1.ChirpConfig_mult(dev_list[i], 1, 1, 0, 0, 0, 0, 0, 0, 0, 0)) then

    WriteToLog("Device "..i.." : Chirp 1 Configuration successful\n", "green")

    else

    WriteToLog("Device "..i.." : Chirp 1 Configuration failed\n", "red")

    return -4

    end

                

                -- Chirp 2

    if (0 == ar1.ChirpConfig_mult(dev_list[i], 2, 2, 0, 0, 0, 0, 0, 0, 0, 0)) then

    WriteToLog("Device "..i.." : Chirp 2 Configuration successful\n", "green")

    else

    WriteToLog("Device "..i.." : Chirp 2 Configuration failed\n", "red")

    return -4

    end

                

                -- Chirp 3

    if (0 == ar1.ChirpConfig_mult(dev_list[i], 3, 3, 0, 0, 0, 0, 0, 0, 0, 1)) then

    WriteToLog("Device "..i.." : Chirp 3 Configuration successful\n", "green")

    else

    WriteToLog("Device "..i.." : Chirp 3 Configuration failed\n", "red")

    return -4

    end

                

                -- Chirp 4

    if (0 == ar1.ChirpConfig_mult(dev_list[i], 4, 4, 0, 0, 0, 0, 0, 0, 1, 0)) then

    WriteToLog("Device "..i.." : Chirp 4 Configuration successful\n", "green")

    else

    WriteToLog("Device "..i.." : Chirp 4 Configuration failed\n", "red")

    return -4

    end

                

                -- Chirp 5

    if (0 == ar1.ChirpConfig_mult(dev_list[i], 5, 5, 0, 0, 0, 0, 0, 1, 0, 0)) then

    WriteToLog("Device "..i.." : Chirp 5 Configuration successful\n", "green")

    else

    WriteToLog("Device "..i.." : Chirp 5 Configuration failed\n", "red")

    return -4

    end

                

                -- Chirp 6

    if (0 == ar1.ChirpConfig_mult(dev_list[i], 6, 6, 0, 0, 0, 0, 0, 0, 0, 0)) then

    WriteToLog("Device "..i.." : Chirp 6 Configuration successful\n", "green")

    else

    WriteToLog("Device "..i.." : Chirp 6 Configuration failed\n", "red")

    return -4

    end

                

                -- Chirp 7

    if (0 == ar1.ChirpConfig_mult(dev_list[i], 7, 7, 0, 0, 0, 0, 0, 0, 0, 0)) then

    WriteToLog("Device "..i.." : Chirp 7 Configuration successful\n", "green")

    else

    WriteToLog("Device "..i.." : Chirp 7 Configuration failed\n", "red")

    return -4

    end

                

                -- Chirp 8

    if (0 == ar1.ChirpConfig_mult(dev_list[i], 8, 8, 0, 0, 0, 0, 0, 0, 0, 0)) then

    WriteToLog("Device "..i.." : Chirp 8 Configuration successful\n", "green")

    else

    WriteToLog("Device "..i.." : Chirp 8 Configuration failed\n", "red")

    return -4

    end

                

                -- Chirp 9

    if (0 == ar1.ChirpConfig_mult(dev_list[i], 9, 9, 0, 0, 0, 0, 0, 0, 0, 0)) then

    WriteToLog("Device "..i.." : Chirp 9 Configuration successful\n", "green")

    else

    WriteToLog("Device "..i.." : Chirp 9 Configuration failed\n", "red")

    return -4

    end

                

                -- Chirp 10

    if (0 == ar1.ChirpConfig_mult(dev_list[i], 10, 10, 0, 0, 0, 0, 0, 0, 0, 0)) then

    WriteToLog("Device "..i.." : Chirp 10 Configuration successful\n", "green")

    else

    WriteToLog("Device "..i.." : Chirp 10 Configuration failed\n", "red")

    return -4

    end

                

                -- Chirp 11

    if (0 == ar1.ChirpConfig_mult(dev_list[i], 11, 11, 0, 0, 0, 0, 0, 0, 0, 0)) then

    WriteToLog("Device "..i.." : Chirp 11 Configuration successful\n", "green")

    else

    WriteToLog("Device "..i.." : Chirp 11 Configuration failed\n", "red")

    return -4

    end

                

        elseif (i == 4) then

        

                -- Chirp 0

    if (0 == ar1.ChirpConfig_mult(dev_list[i], 0, 0, 0, 0, 0, 0, 0, 0, 0, 1)) then

    WriteToLog("Device "..i.." : Chirp 0 Configuration successful\n", "green")

    else

    WriteToLog("Device "..i.." : Chirp 0 Configuration failed\n", "red")

    return -4

    end

                

                -- Chirp 1

    if (0 == ar1.ChirpConfig_mult(dev_list[i], 1, 1, 0, 0, 0, 0, 0, 0, 1, 0)) then

    WriteToLog("Device "..i.." : Chirp 1 Configuration successful\n", "green")

    else

    WriteToLog("Device "..i.." : Chirp 1 Configuration failed\n", "red")

    return -4

    end

                

                -- Chirp 2

    if (0 == ar1.ChirpConfig_mult(dev_list[i], 2, 2, 0, 0, 0, 0, 0, 1, 0, 0)) then

    WriteToLog("Device "..i.." : Chirp 2 Configuration successful\n", "green")

    else

    WriteToLog("Device "..i.." : Chirp 2 Configuration failed\n", "red")

    return -4

    end

                

                -- Chirp 3

    if (0 == ar1.ChirpConfig_mult(dev_list[i], 3, 3, 0, 0, 0, 0, 0, 0, 0, 0)) then

    WriteToLog("Device "..i.." : Chirp 3 Configuration successful\n", "green")

    else

    WriteToLog("Device "..i.." : Chirp 3 Configuration failed\n", "red")

    return -4

    end

                

                -- Chirp 4

    if (0 == ar1.ChirpConfig_mult(dev_list[i], 4, 4, 0, 0, 0, 0, 0, 0, 0, 0)) then

    WriteToLog("Device "..i.." : Chirp 4 Configuration successful\n", "green")

    else

    WriteToLog("Device "..i.." : Chirp 4 Configuration failed\n", "red")

    return -4

    end

                

                -- Chirp 5

    if (0 == ar1.ChirpConfig_mult(dev_list[i], 5, 5, 0, 0, 0, 0, 0, 0, 0, 0)) then

    WriteToLog("Device "..i.." : Chirp 5 Configuration successful\n", "green")

    else

    WriteToLog("Device "..i.." : Chirp 5 Configuration failed\n", "red")

    return -4

    end

                

                -- Chirp 6

    if (0 == ar1.ChirpConfig_mult(dev_list[i], 6, 6, 0, 0, 0, 0, 0, 0, 0, 0)) then

    WriteToLog("Device "..i.." : Chirp 6 Configuration successful\n", "green")

    else

    WriteToLog("Device "..i.." : Chirp 6 Configuration failed\n", "red")

    return -4

    end

                

                -- Chirp 7

    if (0 == ar1.ChirpConfig_mult(dev_list[i], 7, 7, 0, 0, 0, 0, 0, 0, 0, 0)) then

    WriteToLog("Device "..i.." : Chirp 7 Configuration successful\n", "green")

    else

    WriteToLog("Device "..i.." : Chirp 7 Configuration failed\n", "red")

    return -4

    end

                

                -- Chirp 8

    if (0 == ar1.ChirpConfig_mult(dev_list[i], 8, 8, 0, 0, 0, 0, 0, 0, 0, 0)) then

    WriteToLog("Device "..i.." : Chirp 8 Configuration successful\n", "green")

    else

    WriteToLog("Device "..i.." : Chirp 8 Configuration failed\n", "red")

    return -4

    end

                

                -- Chirp 9

    if (0 == ar1.ChirpConfig_mult(dev_list[i], 9, 9, 0, 0, 0, 0, 0, 0, 0, 0)) then

    WriteToLog("Device "..i.." : Chirp 9 Configuration successful\n", "green")

    else

    WriteToLog("Device "..i.." : Chirp 9 Configuration failed\n", "red")

    return -4

    end

                

                -- Chirp 10

    if (0 == ar1.ChirpConfig_mult(dev_list[i], 10, 10, 0, 0, 0, 0, 0, 0, 0, 0)) then

    WriteToLog("Device "..i.." : Chirp 10 Configuration successful\n", "green")

    else

    WriteToLog("Device "..i.." : Chirp 10 Configuration failed\n", "red")

    return -4

    end

                

                -- Chirp 11

    if (0 == ar1.ChirpConfig_mult(dev_list[i], 11, 11, 0, 0, 0, 0, 0, 0, 0, 0)) then

    WriteToLog("Device "..i.." : Chirp 11 Configuration successful\n", "green")

    else

    WriteToLog("Device "..i.." : Chirp 11 Configuration failed\n", "red")

    return -4

    end

    end

    end

    ------------------------------------------- API Configuration ------------------------------------------------    

        

    -- 1. Connection to TDA. 2. Selecting Cascade/Single Chip.  3. Selecting 2-chip/4-chip

    WriteToLog("Setting up Studio for Cascade started..\n", "blue")

    if(0 == ar1.ConnectTDA(TDA_IPAddress, 5001, deviceMapOverall)) then

        WriteToLog("ConnectTDA Successful\n", "green")

    else

        WriteToLog("ConnectTDA Failed\n", "red")

        return -1

    end

    if(0 == ar1.selectCascadeMode(1)) then

        WriteToLog("selectCascadeMode Successful\n", "green")

    else

        WriteToLog("selectCascadeMode Failed\n", "red")

        return -1

    end

    WriteToLog("Setting up Studio for Cascade ended..\n", "blue")

             

    --Master Initialization

          

    -- SOP Mode Configuration

    if (0 == ar1.SOPControl_mult(1, 4)) then

    WriteToLog("Master : SOP Reset Successful\n", "green")

    else

    WriteToLog("Master : SOP Reset Failed\n", "red")

    return -1

    end

    -- SPI Connect

    if (0 == ar1.PowerOn_mult(1, 0, 1000, 0, 0)) then

    WriteToLog("Master : SPI Connection Successful\n", "green")

    else

    WriteToLog("Master : SPI Connection Failed\n", "red")

    return -1

    end

    -- Firmware Download. (SOP 4 - MetaImage)

    if (0 == ar1.DownloadBssFwOvSPI_mult(1, metaImagePath)) then

    WriteToLog("Master : FW Download Successful\n", "green")

    else

    WriteToLog("Master : FW Download Failed\n", "red")

    return -1

    end

             

    -- RF Power Up

    if (0 == ar1.RfEnable_mult(1)) then

    WriteToLog("Master : RF Power Up Successful\n", "green")

    else

    WriteToLog("Master : RF Power Up Failed\n", "red")

    return -1

    end

             

    -- Channel & ADC Configuration

    if (0 == ar1.ChanNAdcConfig_mult(1,1,1,1,1,1,1,1,2,1,0,1)) then

    WriteToLog("Master : Channel & ADC Configuration Successful\n", "green")

    else

    WriteToLog("Master : Channel & ADC Configuration Failed\n", "red")

    return -2

    end

        

    -- Slaves Initialization

       

    for i=2,table.getn(RadarDevice) do

    local status = 0        

    if ((RadarDevice[1]==1) and (RadarDevice[i]==1)) then

          

            -- SOP Mode Configuration

    if (0 == ar1.SOPControl_mult(dev_list[i], 4)) then

    WriteToLog("Device "..i.." : SOP Reset Successful\n", "green")

    else

    WriteToLog("Device "..i.." : SOP Reset Failed\n", "red")

    return -1

    end

    -- SPI Connect

    if (0 == ar1.AddDevice(dev_list[i])) then

    WriteToLog("Device "..i.." : SPI Connection Successful\n", "green")

    else

    WriteToLog("Device "..i.." : SPI Connection Failed\n", "red")

    return -1

    end

               

    end

    end 

        

    -- Firmware Download. (SOP 4 - MetaImage)

    if (0 == ar1.DownloadBssFwOvSPI_mult(deviceMapSlaves, metaImagePath)) then

    WriteToLog("Slaves : FW Download Successful\n", "green")

    else

    WriteToLog("Slaves : FW Download Failed\n", "red")

    return -1

    end

             

    -- RF Power Up

    if (0 == ar1.RfEnable_mult(deviceMapSlaves)) then

    WriteToLog("Slaves : RF Power Up Successful\n", "green")

    else

    WriteToLog("Slaves : RF Power Up Failed\n", "red")

    return -1

    end

             

    -- Channel & ADC Configuration

    if (0 == ar1.ChanNAdcConfig_mult(deviceMapSlaves,1,1,1,1,1,1,1,2,1,0,2)) then

    WriteToLog("Slaves : Channel & ADC Configuration Successful\n", "green")

    else

    WriteToLog("Slaves : Channel & ADC Configuration Failed\n", "red")

    return -2

    end

    -- All devices together        

              

    -- Including this depends on the type of board being used.

    -- LDO configuration

    if (0 == ar1.RfLdoBypassConfig_mult(deviceMapOverall, 3)) then

    WriteToLog("LDO Bypass Successful\n", "green")

    else

    WriteToLog("LDO Bypass failed\n", "red")

    return -2

    end

    -- Low Power Mode Configuration

    if (0 == ar1.LPModConfig_mult(deviceMapOverall,0, 0)) then

    WriteToLog("Low Power Mode Configuration Successful\n", "green")

    else

    WriteToLog("Low Power Mode Configuration failed\n", "red")

    return -2

    end

    -- Miscellaneous Control Configuration

    if (0 == ar1.SetMiscConfig_mult(deviceMapOverall, 1)) then

    WriteToLog("Misc Control Configuration Successful\n", "green")

    else

    WriteToLog("Misc Control Configuration failed\n", "red")

    return -2

    end

    -- Edit this API to enable/disable the boot time calibration. Enabled by default.

    -- RF Init Calibration Configuration

    if (0 == ar1.RfInitCalibConfig_mult(deviceMapOverall, 1, 1, 1, 1, 1, 1, 1, 65537)) then

    WriteToLog("RF Init Calibration Successful\n", "green")

    else

    WriteToLog("RF Init Calibration failed\n", "red")

    return -2

    end

             

    -- RF Init

    if (0 == ar1.RfInit_mult(deviceMapOverall)) then

    WriteToLog("RF Init Successful\n", "green")

    else

    WriteToLog("RF Init failed\n", "red")

    return -2

    end

    ---------------------------Data Configuration----------------------------------

    -- Data path Configuration

    if (0 == ar1.DataPathConfig_mult(deviceMapOverall, 0, 1, 0)) then

    WriteToLog("Data Path Configuration Successful\n", "green")

    else

    WriteToLog("Data Path Configuration failed\n", "red")

    return -3

    end

    -- Clock Configuration

    if (0 == ar1.LvdsClkConfig_mult(deviceMapOverall, 1, 1)) then

    WriteToLog("Clock Configuration Successful\n", "green")

    else

    WriteToLog("Clock Configuration failed\n", "red")

    return -3

    end

    -- CSI2 Configuration

    if (0 == ar1.CSI2LaneConfig_mult(deviceMapOverall, 1, 0, 2, 0, 4, 0, 5, 0, 3, 0)) then

    WriteToLog("CSI2 Configuration Successful\n", "green")

    else

    WriteToLog("CSI2 Configuration failed\n", "red")

    return -3

    end

    ----------------------------Test Source Configuration------------------------------

    -- This is useful for initial bringup.

    -- Each device is configured with a test object at a different location.

    if(test_source_enable == 1) then

        

        if(RadarDevice[1] == 1) then

            -- Object at 5 m with x = 4m and y = 3m

            if (0 == ar1.SetTestSource_mult(1, 4, 3, 0, 0, 0, 0, -327, 0, -327, 327, 327, 327, -2.5, 327, 327, 0, 0, 0, 0, -327, 0, -327, 327, 327, 327, -95, 0, 0, 0.5, 0, 1, 0, 1.5, 0, 0, 0, 0, 0, 0,0)) then

                WriteToLog("Device 1 : Test Source Configuration Successful\n", "green")

            else

                WriteToLog("Device 1 : Test Source Configuration failed\n", "red")

                return -3

            end

        end

        

        if(RadarDevice[2] == 1) then        

            -- Object at 5 m with x = 3m and y = 4m

            if (0 == ar1.SetTestSource_mult(2, 3, 4, 0, 0, 0, 0, -327, 0, -327, 327, 327, 327, -2.5, 327, 327, 0, 0, 0, 0, -327, 0, -327, 327, 327, 327, -95, 0, 0, 0.5, 0, 1, 0, 1.5, 0, 0, 0, 0, 0, 0,0)) then

                WriteToLog("Device 2 : Test Source Configuration Successful\n", "green")

            else

                WriteToLog("Device 2 : Test Source Configuration failed\n", "red")

                return -3

            end

        end

        

        if(RadarDevice[3] == 1) then         

            -- Object at 13 m with x = 12m and y = 5m

            if (0 == ar1.SetTestSource_mult(4, 12, 5, 0, 0, 0, 0, -327, 0, -327, 327, 327, 327, -2.5, 327, 327, 0, 0, 0, 0, -327, 0, -327, 327, 327, 327, -95, 0, 0, 0.5, 0, 1, 0, 1.5, 0, 0, 0, 0, 0, 0,0)) then

                WriteToLog("Device 3 : Test Source Configuration Successful\n", "green")

            else

                WriteToLog("Device 3 : Test Source Configuration failed\n", "red")

                return -3

            end

        end

        

        if(RadarDevice[4] == 1) then        

            -- Object at 13 m with x = 5m and y = 12m

            if (0 == ar1.SetTestSource_mult(8, 5, 12, 0, 0, 0, 0, -327, 0, -327, 327, 327, 327, -2.5, 327, 327, 0, 0, 0, 0, -327, 0, -327, 327, 327, 327, -95, 0, 0, 0.5, 0, 1, 0, 1.5, 0, 0, 0, 0, 0, 0,0)) then

                WriteToLog("Device 4 : Test Source Configuration Successful\n", "green")

            else

                WriteToLog("Device 4 : Test Source Configuration failed\n", "red")

                return -3

            end

        end

           

    end           

    ---------------------------Sensor Configuration-------------------------

    -- Profile Configuration

    if (0 == ar1.ProfileConfig_mult(deviceMapOverall, 0, start_freq, idle_time, adc_start_time, ramp_end_time, 0, 0, 0, 0, 0, 0, slope, 0, adc_samples, sample_freq, 0, 0, rx_gain)) then

    WriteToLog("Profile Configuration successful\n", "green")

    else

    WriteToLog("Profile Configuration failed\n", "red")

    return -4

    end

    -- Chirp Configuration

    for i=1,table.getn(RadarDevice) do    

    if ((RadarDevice[1]==1) and (RadarDevice[i]==1)) then                            

    Configure_Chirps(i)

    end

    end

    -- Enabling/ Disabling Test Source

    if(test_source_enable == 1) then

        ar1.EnableTestSource_mult(deviceMapOverall, 1)

        WriteToLog("Enabling Test Source Configuration successful\n", "green")

    end

        

    -- Frame Configuration               

    -- Master

    if (0 == ar1.FrameConfig_mult(1,start_chirp_tx,end_chirp_tx,nframes_master, nchirp_loops, Inter_Frame_Interval, 0, 0, 1)) then

        WriteToLog("Master : Frame Configuration successful\n", "green")

    else

        WriteToLog("Master : Frame Configuration failed\n", "red")

    end

    -- Slaves

    if (0 == ar1.FrameConfig_mult(deviceMapSlaves,start_chirp_tx,end_chirp_tx,nframes_slave, nchirp_loops, Inter_Frame_Interval, 0, 0, 2)) then

        WriteToLog("Slaves : Frame Configuration successful\n", "green")

    else

        WriteToLog("Slaves : Frame Configuration failed\n", "red")

    end

  • Thank you very much for your help.

    We noticed as well that the board had some dirt on it, could it be a reason why it doesn't work well? 

  • Hi Abhed, 

    I did another experiment by placing a corner reflector (3D printed+cover in metallic tape) close to the device. I can see it well on the data but it seems that the range value is wrong. I see a peak at about 3meters but the reflector was at about 50cm of the device. I don't find yet where this issue in the range could come from and was wondering if you had an idea?

    Here is some images: 

    the homemade corner reflector:

    the setup : 

    the data : (the peak in the range/velocity plot appears at the bin 50 which corresponds to 3m. The current setup should be for a maximum range of 15m.)


    Thank you very much! 

  • Hi Alice,

                You see this as it is strong object and is close. But this does mean your setup is all OK, and the configuration steps also seem to be OK. I believe you can repeat the similar setup with outside/older environment and observe the results. Also you can have this reflector fixed on a tripod a vary the distance in a room/hall from the mmwave sensor to reflect in the corresponding bin.

    Regards