GPS measurements indicate a drift in GPS time, and I can't explain why

Hello,

I found something while examining the GPS data and I can’t explain it.

My hardware:

v1.17.0 is installed on the Orangecube.

I connected two Here3 GPS to the Orangecube. At Can-port 1 and Can-port 2.

For logging, I wrote the GPS timestamp into the MAVLink message for altitude.

I made the following change in the PX4-Autopilot/src/modules/mavlink/streams/GPS_RAW_INT.hpp firmware file:

// msg.alt = static_cast<int32_t>(round(gps.altitude_msl_m * 1e3)); // convert [m] to [mm]
	msg.alt = gps.timestamp;

This gives me the time stamp of when the GPS message from the Here3 arrived at the Orangecube.

When I collect and output the data via Mavlink (GPS_RAW_INT and GPS2_RAW), I get the graph:

And this is the zoomed-in version:

You can see that the past time is almost identical. But only almost. Actually, it should be the same. Since both GPS receive GPS time.

One could also assume that the difference is a constant offset, but

If I output the difference of gps1 to gps2 at time t, I get this graph:

And that means that the two GPS are drifting and the time the two provide is different.

Actually, the difference between the two times should be zero or constant. But that means that the GPS drifts and the times that the GPS provides me are different

and when I do this with another measurement, this graph appears:

There seems to be a jump somewhere and I don’t know where in the firmware such a jump is initiated

When I plot the difference between gps1-unix-time and gps1.timestamp and gps2.timestamp and gps2-unix-time, this graph appears:

Can someone explain to me why the two GPS times are not identical at time t?

Or what did I do wrong when evaluating the data?