gnssFileName = 'GNSS_19.dat';
GNSS_data = readtable(gnssFileName, 'Delimiter', ',', 'ReadVariableNames', true);
error('Error reading GNSS file: %s', ME.message);
GNSS.GPS_Week = GNSS_data.GPS_Week;
GNSS.Week_Time = GNSS_data.Week_Time;
GNSS.RX_Pos_X = GNSS_data.RX_Pos_X;
GNSS.RX_Pos_Y = GNSS_data.RX_Pos_Y;
GNSS.RX_Pos_Z = GNSS_data.RX_Pos_Z;
GNSS.RX_Vel_X = GNSS_data.RX_Vel_X;
GNSS.RX_Vel_Y = GNSS_data.RX_Vel_Y;
GNSS.RX_Vel_Z = GNSS_data.RX_Vel_Z;
GNSS.Vel_Magnitude = sqrt(GNSS.RX_Vel_X.^2 + GNSS.RX_Vel_Y.^2 + GNSS.RX_Vel_Z.^2);
GNSS.Heading_deg = atan2d(GNSS.RX_Vel_Y, GNSS.RX_Vel_X);
disp('GNSS data structure created successfully.');
imuFileName = 'IMU_19.dat';
fid = fopen(imuFileName, 'r');
error('Cannot open the file "%s".', imuFileName);
rawData = textscan(fid, '%f %f %f %f %f %f %f %f %f %f', ...
'Delimiter', {' ', '\t'}, 'MultipleDelimsAsOne', true);
error('Error reading IMU file: %s', ME.message);
IMU_data = cell2mat(rawData);
[numRows, numCols] = size(IMU_data);
if (numRows ~= 10000 || numCols ~= 10)
error('Unexpected IMU data dimensions: %d rows x %d cols (expected 10000 x 10)', ...
IMU.Time = IMU_data(:, 1);
IMU.Acc_X = IMU_data(:, 3);
IMU.Acc_Y = IMU_data(:, 4);
IMU.Acc_Z = IMU_data(:, 5);
IMU.Gyro_X = IMU_data(:, 6);
IMU.Gyro_Y = IMU_data(:, 7);
IMU.Gyro_Z = IMU_data(:, 8);
disp('IMU data structure created successfully.');