Kozai::Doppler
Doppler shift on a satellite link.
A satellite in low earth orbit closes at up to about 7.5 km/s at acquisition and recedes just as fast at loss of signal, which on a 435 MHz downlink swings the received frequency by roughly ±10 kHz over a pass. That is far wider than an SSB or a narrow FM channel, so a receiver left on the nominal frequency hears the satellite only briefly in the middle of the pass.
angles = station.look_angles(satellite, Time.utc)
if angles
tune_to = Kozai::Doppler.downlink(435_000_000.0, angles.range_rate_km_s)
end
Constants
Speed of light in kilometres per second.
Class methods
The frequency an observer hears when the transmitter radiates frequency_hz and the range is changing at range_rate_km_s.
Range rate is positive while the satellite is receding, so a receding
satellite sounds lower — which is the sign convention Frames::LookAngles
uses.
NOTE: the classical first-order expression. The relativistic correction at 7.5 km/s is around 3 parts in 10^10, which on a 435 MHz downlink is 0.13 Hz — some four orders of magnitude below the frequency error of the crystal oscillator in any amateur satellite, and far below the error contributed by a few hours of element set age. It is not modelled, and the omission is listed in the README.
Convenience form taking look angles directly.
Doppler on both halves of a duplex link, as a linear transponder needs.
Returns the frequency to listen on and the frequency to transmit on.
The largest shift a link will see over a pass, in hertz.
Useful for choosing a receiver bandwidth, and for warning that a channel is too narrow to hold the satellite without tuning.
How far frequency_hz is shifted, in hertz.
Negative while the satellite is receding.
The frequency to transmit on so that the satellite receives frequency_hz.
The correction is the opposite sign to .downlink: closing on the
satellite raises what it hears, so the station must transmit lower.