Main Content

dopplerShiftCircularOrbit

Calculate Doppler shift at ground station due to circularly orbiting satellite

Since R2024a

    Description

    shift = dopplerShiftCircularOrbit(el,hs,hg,freq) calculates the Doppler shift in hertz at a ground station due to a circularly orbiting satellite, with the specified elevation angle el, satellite altitude hs, ground station altitude hg, and satellite carrier frequency freq.

    For more information, see Doppler Shift Calculations.

    Note

    dopplerShiftCircularOrbit assumes:

    • The Earth is spherical, the ground station is static, and that the Earth does not rotate.

    • An access or link is possible from the satellite to the ground station at all times.

    • The ground station is located at the North Pole (positive Z–axis), and the satellite starts from the initial input elevation angle el in the second quadrant of the YZ–plane.

    • Satellite moves in the clockwise direction in its circular orbit.

    example

    shift = dopplerShiftCircularOrbit(el,hs,hg,freq,time) specifies the time instances to calculate the Doppler shift at a ground station due to a circularly orbiting satellite.

    For more information, see Doppler Shift Calculations.

    example

    Examples

    collapse all

    Calculate the Doppler shift for a satellite moving in circular orbit and then plot the Doppler shift as a function of elevation angle.

    Set satellite altitude as 10000 km, ground station altitude as 120 m, and satellite carrier frequency as 20 GHz.

    hs = 10000e3; % meters
    hg = 120;     % meters
    freq = 20e9;  % Hz

    Vary the elevation angle from 0 to 90 degrees.

    el = 0:90;   % degrees

    Calculate the Doppler shift for the varying elevation angles.

    shift = dopplerShiftCircularOrbit(el,hs,hg,freq);

    Plot the Doppler shift as a function of elevation angle.

    figure
    plot(el,shift,"-*")
    title("Doppler Shift vs Elevation Angle")
    xlabel("Elevation Angle (degrees)")
    ylabel("Doppler Shift (Hz)")
    grid on

    Figure contains an axes object. The axes object with title Doppler Shift vs Elevation Angle, xlabel Elevation Angle (degrees), ylabel Doppler Shift (Hz) contains an object of type line.

    Visualize the variation of Doppler shift for one orbital period of satellite.

    Set the satellite altitude as 1500 km, initial elevation angle as 45 degrees, and satellite carrier frequency is 5 GHz. Assume ground station height is 0 m.

    hs = 1500e3; % meters
    el = 45;     % degrees
    freq = 5e9;  % Hz
    hg = 0;      % meters

    For the specified satellite altitude of 1500 km, the orbital time period is 6949.518 seconds. To cover one orbital time period, set the maximum time instance to 6950 seconds.

    time = 0:6950; % seconds

    Calculate the Doppler shift for the specified time instances.

    shift = dopplerShiftCircularOrbit(el,hs,hg,freq,time);

    Plot the Doppler shift as a function of time.

    figure
    plot(time,shift)
    title("Doppler Shift vs Time")
    xlabel("Time (seconds)")
    ylabel("Doppler Shift (Hz)")
    grid on

    Figure contains an axes object. The axes object with title Doppler Shift vs Time, xlabel Time (seconds), ylabel Doppler Shift (Hz) contains an object of type line.

    Input Arguments

    collapse all

    Satellite elevation angle in degrees, specified as a real scalar or vector.

    The function considers each elevation angle as an independent satellite. The nominal range of elevation angles is from 0 to 90 degrees. However, this function accepts any input elevation angle, enabling you to position the satellite anywhere in the orbit.

    For example, this figure shows a scenario in which el input is [45 135 225]. In this case, the function assumes there are three independent satellites.

    • Satellite 1 at elevation angle α1 = 45°

    • Satellite 2 at elevation angle α2 = 135°

    • Satellite 3 at elevation angle α3 = 225°

    Figure shows 3 elevation angles (45, 135, and 225 degrees) where satellites are positioned in orbit. Each elevation angle is considered as a seperate satellite.

    Data Types: double

    Satellite altitude in meters, specified as a positive scalar.

    Data Types: double

    Ground station altitude in meters, specified as a nonnegative scalar.

    hg must be less than hs.

    Data Types: double

    Satellite carrier frequency in hertz, specified as a nonnegative scalar.

    Data Types: double

    Time instances to calculate the distance between a circularly orbiting satellite and a ground station, specified as a real scalar or vector. Units are in seconds.

    A negative value of time represents the counter–clockwise rotation of the satellite.

    When you specify time, the function uses the el, hs, and hg inputs as the initial values at 0 seconds.

    Data Types: double

    Output Arguments

    collapse all

    Doppler shift in hertz at a ground station due to a circularly orbiting satellite, returned as a scalar, vector, or matrix.

    When you specify el as a vector of length NumEL and time as a vector of length NumTIME, then shift is a matrix of size NumEL-by-NumTIME. Each row of shift represents the Doppler shift for the corresponding elevation angle.

    The Doppler shift continuously changes as the satellite passes over the ground station. As the satellite rises from the horizon and moves toward the zenith, the Doppler shift gradually decreases, becoming 0 at zenith. As the satellite recedes from the zenith, the Doppler increases again, negatively, till the Doppler shift reaches its maximum extent. For an illustration of this behaviour, see the Visualize Doppler Shift Variations for One Satellite Orbital Period example.

    Data Types: double

    More About

    collapse all

    Doppler Shift Calculations

    This figure shows a circularly orbiting satellite in clockwise direction, with an elevation angle α with respect to a ground station on Earth. The ground station is located at the North Pole (positive Z–axis). The angle of rotation of the satellite, measured at the centre of the Earth, is θ.

    This diagram shows the elevation angle and the angle of clockwise rotation of the satellite

    Considering the satellite in the figure is moving in the YZ–plane, the position vector of the satellite [X; Y; Z] is given by:

    Xsat(t)=[0;(R+H)sin(ωsatt);(R+H)cos(ωsatt)]

    where:

    • R = RE + hg, where:

      • RE = 6371e3 meters

      • hg is the ground station altitude

    • H = hs - hg, where hs is the satellite altitude

    • ωsat=GM(R+H)3

      where:

      • G is the gravitational constant of 6.6743e-11 (Newtonian constant of gravitation, in m3kg-1s-2)

      • M is the mass of the Earth: 5.9722e24 kg

    Using the position vector of the satellite, the velocity vector is given by:

    Vsat(t)=[0;ωsat(R+H)cos(ωsatt);ωsat(R+H)sin(ωsatt)]

    Because the function assumes the ground station is stationary, it has these position and velocity vectors:

    • Position of ground station = Xg(t) = [0; 0; R]

    • Velocity of ground station = Vg(t) = [0; 0; 0]

    To derive the formula for Doppler shift at the ground station due to circularly orbiting satellite, follow the steps in the Doppler Shift section on the dopplershift page by making these substitutions:

    • Position of source — Xsat(t)

    • Velocity of source — Vsat(t)

    • Position of target — Xg(t)

    • Velocity of target — Vg(t)

    Extended Capabilities

    C/C++ Code Generation
    Generate C and C++ code using MATLAB® Coder™.

    Version History

    Introduced in R2024a