Skip to main content

Doppler Factor

The dopplerFactor function computes the relativistic Doppler ratio for a satellite as seen from a ground observer.

A value less than 1 means the satellite is approaching (frequency shifted higher); a value greater than 1 means it is receding (frequency shifted lower).

import { dopplerFactor } from 'satellite.js';

const factor = dopplerFactor(observerEcf, positionEcf, velocityEcf);
ParameterTypeDescription
observerEcfEcfVec3<Kilometer>Observer position in ECF
positionEcfEcfVec3<Kilometer>Satellite position in ECF
velocityEcfEcfVec3<KilometerPerSecond>Satellite velocity in ECF

Returns: number - the Doppler factor.

Full example

import {
propagate, gstime,
eciToEcf, geodeticToEcf,
degreesToRadians,
dopplerFactor,
json2satrec,
} from 'satellite.js';

const satrec = json2satrec(omm);
const date = new Date();

const state = propagate(satrec, date);
if (!state) throw new Error('Propagation failed');

const gmst = gstime(date);

const observerGeodetic = {
longitude: degreesToRadians(-122.03),
latitude: degreesToRadians(36.96),
height: 0.370,
};

const observerEcf = geodeticToEcf(observerGeodetic);
const positionEcf = eciToEcf(state.position, gmst);
const velocityEcf = eciToEcf(state.velocity, gmst);

const factor = dopplerFactor(observerEcf, positionEcf, velocityEcf);

// Multiply the satellite's transmit frequency by the factor
// to get the observed frequency.
const transmitFrequencyMHz = 437.5;
const observedFrequencyMHz = transmitFrequencyMHz * factor;