Hello,
We carried out a data capture using the cascade radar with mmWave Studio and are trying to check the *_idx.bin files to see if there are any dropped frames - the file description in the 'getValidNumFrames.m' MATLAB script provided in the '4chip_cascade_MIMO_example' with mmWave Studio isn't very detailed but I guess the tag or timestamp should tell us this? We have tried reading the parameters from the file for each frame but they don't seem to make sense, as shown below, i.e. same 4 values just seem to repeat for timestamp/tag values. I have copied the MATLAB script we are using to read this below also, we read the parameters from first 24 bytes (which look more sensible, e.g. dataFileSize = 2.1454 GB, which is correct) and then loop through for 36 bytes for each frame.
% File header in *_idx.bin:
% struct Info
% {
% uint32_t tag;
% uint32_t version;
% uint32_t flags;
% uint32_t numIdx; // number of frames
% uint64_t dataFileSize; // total data size written into file
% };
%
% Index for every frame from each radar:
% struct BuffIdx
% {
% uint16_t tag;
% uint16_t version; /*same as Info.version*/
% uint32_t flags;
% uint16_t width;
% uint16_t height;
% uint32_t pitchOrMetaSize[4]; /*For image data, this is pitch.
% For raw data, this is size in bytes per metadata plane.*/
% uint32_t size; /*total size in bytes of the data in the buffer (sum of all planes)*/
% uint64_t timestamp;
% uint64_t offset;
% };
pause on % to enable pause function
clear
clearvars -global
evalin('base','save(''myVars'')');
evalin('base','clear');
evalin('base','load(''myVars'')');
close all
clc
fileName = 'E:\Data_Captures\200708\200708_Capture_03\C1\master_0001_idx.bin';
idxFile = fopen(fileName,'r');
heaferInfoSize = 4;
heaferInfo = fread(idxFile, heaferInfoSize,'uint32');
tag = heaferInfo(1); % tag
version = heaferInfo(2); % version
flags = heaferInfo(3); % flags
numIdx = heaferInfo(4); % number of effective frames
fseek(idxFile, 16, 'bof');
dataFileSize = fread(idxFile, 1,'uint64');
read_position = 16;
len = 20;
frame_tag = zeros(1,len);
frame_version = zeros(1,len);
frame_flags = zeros(1,len);
frame_width = zeros(1,len);
frame_height = zeros(1,len);
frame_pitchOrMetaSize = zeros(1,len);
frame_size = zeros(1,len);
frame_timestamp = zeros(1,len);
frame_offset = zeros(1,len);
for i =1:len
read_position = read_position + 8;
fseek(idxFile, read_position, 'bof');
frame_tag(1,i) = fread(idxFile, 1, 'uint16');
read_position = read_position + 2;
fseek(idxFile, read_position, 'bof');
frame_version(1,i) = fread(idxFile, 1, 'uint16');
read_position = read_position + 2;
fseek(idxFile, read_position, 'bof');
frame_flags(1,i) = fread(idxFile, 1, 'uint32');
read_position = read_position + 4;
fseek(idxFile, read_position, 'bof');
frame_width(1,i) = fread(idxFile, 1, 'uint16');
read_position = read_position + 2;
fseek(idxFile, read_position, 'bof');
frame_height(1,i) = fread(idxFile, 1, 'uint16');
read_position = read_position + 2;
fseek(idxFile, read_position, 'bof');
frame_pitchOrMetaSize(1,i) = fread(idxFile, 1, 'uint32');
read_position = read_position + 4;
fseek(idxFile, read_position, 'bof');
frame_size(1,i) = fread(idxFile, 1, 'uint32');
read_position = read_position + 4;
fseek(idxFile, read_position, 'bof');
frame_timestamp(1,i) = fread(idxFile, 1, 'uint64');
read_position = read_position + 8;
fseek(idxFile, read_position, 'bof');
frame_offset(1,i) = fread(idxFile, 1, 'uint64');
end