Other Parts Discussed in Thread: AWR1243, MMWCAS-RF-EVM, TIDEP-01012, TDA2
Section 7.3.3.4 of the mmWave Studio Cascade User's Guide mentions the _data.bin & _idx.bin files. What is the format of the data in these files?
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.
Section 7.3.3.4 of the mmWave Studio Cascade User's Guide mentions the _data.bin & _idx.bin files. What is the format of the data in these files?
Hello Cesar,
It looks like fcn_read_AdvFrmConfig_BF_Json.m contains the readBinFile() function, so the _data.bin file contains uint16 data for I & Q where Q comes 2nd and the receive data for each of the 4 antennas per chip is in the order 2nd, 4th, 1st, then 3rd antenna?
From getValidNumFrames.m the _idx.bin file has the first 24 bytes defining the number of frames (bytes 13-16), and the total number of adc samples (bytes 17-24)? The rest of _idx.bin file is filled with 36 byte chunks that give per-frame parameters that are probably not that important?
Is this understanding correct? Not sure why the _data.bin parser has Json in the function name...and it would be nice to have this information in some sort of document for future users so they don't have to try and parse Matlab code.
Thanks,
Tom
We were able to read the file format. We performed a Tx Bf scan from -10 to +10 in 2 deg increments. I have inserted the output file from Matlab & Python. I have also attached an image showing the data format from readBinFile() and the permute() function calls in case it helps someone else reading this forum.
The plots are not using the calibration matrix currently and we are only using the master file (only the first awr1243 chip). We are not using the Hann filters either. I included the range Fft and Doppler Fft profile. The green line in plot 2 are the 2 stationary objects. I included 2 versions of the 2D heatmap since the "view" Matlab function doesn't exist in Python. Also the ^0.2 scaling factor was changed to ^0.4 in Python to make the objects stand out a bit more. Otherwise, everything is pulled together similiar to a logarithm.
Questions:
1) Awr #4 is the chip producing the master data file? Per page 37 of the MMWCAS-RF-EVM User's Guide the half wavelength shifts are 0,1,2,3 for Awr chip #4. These are the same shifts seen in D_RX in parameter_gen_from_Jason.m. This is kind of confusing since I thought Awr #1 was normally considered the master.
2) Why can't azimuth and elevation beamsteering be performed? As long as we modify the Rx/Tx shifts appropriately, I don't understand why this wouldn't work. Table 1 from Design Guide: TIDEP-01012 says elevation resolution is only available for Mimo. THe 3 Tx antenna offsets from Awr #1 should allow for unambiguous elevations.
Comments:
1) I wish the correlation matrix grouping wouldn't be used when calculating the Rx power as part of the beam steering for the 3rd & 4th Matlab plot. The equation is really (a*b)(b*a) not a*(b*b)*a. The correlation matrix (b*b) grouping is confusing.
2) The Matlab script should just import the .bin file as signed data instead of importing it as unsigned data and then doing the confusing conversion afterwards.
Matlab output:
readBinFile format:
Hi Thomas,
Glad you were able to get that working. I think we do need to release this formatting more formally.
Regarding your last two questions:
1) Awr #4 is the chip producing the master data file? Per page 37 of the MMWCAS-RF-EVM User's Guide the half wavelength shifts are 0,1,2,3 for Awr chip #4. These are the same shifts seen in D_RX in parameter_gen_from_Jason.m. This is kind of confusing since I thought Awr #1 was normally considered the master.
U1_1 is the master device and generates the master_xxxx_data.bin and master_xxx_idx.bin files stored on the SSD after capture. Was there something in code/docs that made you think otherwise?
2) Why can't azimuth and elevation beamsteering be performed? As long as we modify the Rx/Tx shifts appropriately, I don't understand why this wouldn't work. Table 1 from Design Guide: TIDEP-01012 says elevation resolution is only available for Mimo. THe 3 Tx antenna offsets from Awr #1 should allow for unambiguous elevations.
Our demos are just azimuth-centric. As you have stated, there is nothing in the way of utilizing the elevation antennas for elevation data as well. The resolution will just will not be as good as the azimuth plane since there are less unique virtual channels in elevation. The 4 TX antenna are also not setup in uniform 0.5 x lambda linear array. Elevation antenna are setup as a "minimum redundancy array" with 0.5, 1.5, and 1.0 x lambda linear separation. This extends the angular resolution over 4x, 0.5 x lambda linear array but comes at the cost of higher angle spectrum side-lobes.
Please see Figure 27 in the MMWCAS-RF-EVM user guide for the virtual antenna mapping. https://www.ti.com/lit/ug/swru553a/swru553a.pdf#page=37
Thank you,
-Randy
Thanks Randy.
I have included files and relevant lines (with my notes) for my question #1:
cascade_TxBF_signalProcessing.m %parse Json file paramsConfig = parameter_gen_from_Jason(BF_data_dest0, paramsConfig); parameter_gen_from_Jason.m TI_Cascade_RX_position_azi = [ 11:14 50:53 46:49 0:3 ]; TI_Cascade_RX_ID = [13 14 15 16 1 2 3 4 9 10 11 12 5 6 7 8 ]; %RX channel order on TI 4-chip cascade EVM D_RX = TI_Cascade_RX_position_azi(TI_Cascade_RX_ID); %RX azimuth antenna coordinate %Tom note: 1st 4 of D_RX are 0,1,2,3 cascade_TxBF_signalProcessing.m [radar_data_TXBF]= fcn_read_AdvFrmConfig_BF_Json(fileNameStruct,paramsConfig); fcn_read_AdvFrmConfig_BF_Json.m [radar_data_Rxchain_master] = readBinFile(fileFullPath_master, params.Chirp_Frame_BF, frameIdx,numSamplePerChirp,numChirpPerLoop,numLoops, numRXPerDevice, numDevices); [radar_data_Rxchain_slave1] = readBinFile(fileFullPath_slave1, params.Chirp_Frame_BF, frameIdx,numSamplePerChirp,numChirpPerLoop,numLoops, numRXPerDevice, numDevices); [radar_data_Rxchain_slave2] = readBinFile(fileFullPath_slave2, params.Chirp_Frame_BF, frameIdx,numSamplePerChirp,numChirpPerLoop,numLoops, numRXPerDevice, numDevices); [radar_data_Rxchain_slave3] = readBinFile(fileFullPath_slave3, params.Chirp_Frame_BF, frameIdx,numSamplePerChirp,numChirpPerLoop,numLoops, numRXPerDevice, numDevices); %Tom note: Reading into the master first makes it seem like master has half wavelength spacing locations of 0,1,2,3. Per MMWCAS-RF-EVM this is actually chip #4.
Thanks for confirming question number 2 as well.
-Tom
Hi Tom,
The TI_Cascade_RX_ID is the mapping we are using to go from physical antenna element to AWR receiver number. Each element defines the cascaded receiver channel. RX1 is TI_Cascade_RX_ID[5], RX2 is TI_Cascade_RX_ID[6] and so on. TI_Cascade_RX_ID[5:8] are mapped to the master .bin files. This capture file to RX channel mapping happens in the read_ADC_bin_TDA2_separateFiles.m.
radar_data_Rxchain(:,:,5:8,:) = radar_data_Rxchain_master; radar_data_Rxchain(:,:,13:16,:) = radar_data_Rxchain_slave1; radar_data_Rxchain(:,:,9:12,:) = radar_data_Rxchain_slave2; radar_data_Rxchain(:,:,1:4,:) = radar_data_Rxchain_slave3;
Does that help?
Thank you,
-Randy
Hi Randy,
Oh that is weird, I have this (which looks like it applies to Mimo) from read_ADC_bin_TDA2_separateFiles.m:
% Arranged based on Master RxChannels, Slave1 RxChannels, slave2 RxChannels, slave3 RxChannels % The RX channels are re-ordered according to "TI_Cascade_RX_ID" defined in % "module_params.m" radar_data_Rxchain(:,:,1:4,:) = radar_data_Rxchain_master; radar_data_Rxchain(:,:,5:8,:) = radar_data_Rxchain_slave1; radar_data_Rxchain(:,:,9:12,:) = radar_data_Rxchain_slave2; radar_data_Rxchain(:,:,13:16,:) = radar_data_Rxchain_slave3;
and this (which I think applies to BF) from fcn_read_AdvFrmConfig_BF_Json.m:
adcData1Complex(:,:,1:4,:) = permute(radar_data_Rxchain_master, [2 4 1 3]); adcData1Complex(:,:,5:8,:) = permute(radar_data_Rxchain_slave1, [2 4 1 3]); adcData1Complex(:,:,9:12,:) = permute(radar_data_Rxchain_slave2, [2 4 1 3]); adcData1Complex(:,:,13:16,:) = permute(radar_data_Rxchain_slave3, [2 4 1 3]);
Maybe it was updated in the next release of mmWave Studio. I am using version 2.1.0.0.
Anyways, I think you have answered everything now. Thanks as always for your help!
-Tom
Hello,
I am using readBinFile() funcation, but I am confused to some parameters, like frameIdx, numLoops and numChirpPerLoop. If my parameter settings are 500 frames, 200 pulses per frame, and 512 sampling points per pulse, how should the parameters I set correspond to the parameters of the readBinFile() function?
Hi user6250223,
Please open up a new e2e with this request.
Thank you,
-Randy