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.');