Вычислите задержку и Доплера в спутниковом сценарии

В этом примере показано, как смоделировать спутник в орбите, анализируйте доступ между спутником и наземной станцией, и вычислите задержку и доплеровскую частоту между спутником и наземной станцией.

Создайте спутниковый сценарий

Создайте спутниковый сценарий со временем начала от 02 июня 2020 8:23:00 UTC и время остановки 24 часа спустя. Установите шаг расчета симуляции на 60 секунд.

startTime = datetime(2020,6,02,8,23,0);
stopTime = startTime + hours(24);
sampleTime = 60;  % s
sc = satelliteScenario(startTime,stopTime,sampleTime);

Добавьте спутник в сценарий

Добавьте спутник в сценарий от oneSatelliteConstellation Файл TLE.

sat = satellite(sc,"oneSatelliteConstellation.tle");

Покажите спутник в орбите и постройте ее будущую наземную дорожку, или время выполнения заказа, более чем 20 минут. Фиолетовые показы будущая наземная дорожка и оранжевые показы прошлая наземная дорожка.

show(sat)
groundTrack(sat, ...
  "LeadTime",1200);  % s

Возвратите орбитальные элементы и положение спутника

Отобразите орбитальные элементы спутника в сценарии.

elements = orbitalElements(sat)
elements = struct with fields:
                       MeanMotion: 9.1649e-04
                     Eccentricity: 1.0000e-03
                      Inclination: 55
    RightAscensionOfAscendingNode: 175.0000
              ArgumentOfPeriapsis: 100
                      MeanAnomaly: 174.9900
                           Period: 6.8557e+03
                            Epoch: 02-Jun-2020 18:43:16
                            BStar: 1.0000e-04

Возвратите широту (степени), долгота (степени) и высота (км) спутника во время 02 июня 2020 12:30:00 UTC.

time = datetime(2020,6,02,12,30,0);
pos = states(sat,time,"CoordinateFrame","geographic");
pos(3) = pos(3) / 1000;  % convert from m to km
fprintf("The satellite latitude is %3.2f degrees, its longitude is %5.2f degrees, and its altitude is %5.2f km.", ...
  pos(1),pos(2),pos(3))
The satellite latitude is 1.07 degrees, its longitude is -83.95 degrees, and its altitude is 1421.20 km.

Добавьте наземную станцию

Добавьте Комплекс Madrid Deep Space Communications как наземную станцию интереса и задайте его широту и долготу.

name = "Madrid Deep Space Communications Complex";
lat = 40.43139;  % degrees
lon = -4.24806;  % degrees
gs = groundStation(sc,"Name",name,"Latitude",lat,"Longitude",lon);

Добавьте доступ к анализу

Добавьте анализ доступа между спутником и наземной станцией, которая определяет, когда наземная станция отображается к спутнику. Это определяет, когда задержка и Доплер должны быть вычислены.

ac = access(sat,gs);
acStatus = accessStatus(ac);

Вычислите задержку и скорость

Вычислите задержку между спутником и Мадридской наземной станцией. Кроме того, вычислите скорость вдоль линии между спутником и наземной станцией. Положительное значение указывает, что спутник двигает наземную станцию, и отрицательная величина указывает, что спутник переезжает от наземной станции.

numHours = stopTime - startTime;
numMinutes = minutes(numHours);
[az,el,r] = deal(zeros(numMinutes+1,1));
[satV,dir] = deal(zeros(3,numMinutes+1));
[latency,dopV] = deal(NaN(numMinutes+1,1));
c = physconst("Lightspeed");
for iMinute = 0:numMinutes
  time = startTime + minutes(iMinute);
  idx = iMinute+1;
  % Calculate latency and doppler only when the satellite has access to the
  % ground station.
  if acStatus(idx)
    % Calculate azimuth, elevation, and range from the satellite to the
    % ground station
    [az(idx),el(idx),r(idx)] = aer(sat,gs,time);

    % Calculate latency
    latency(idx) = r(idx) / c;

    % Calculate satellite velocity in North/East/Down (NED) frame of
    % satellite. Physically, this is the ECEF velocity, represented in NED
    % frame. Therefore, the relative velocity with respect to the ground
    % station is also the same.
    [~,satV(:,idx)] = states(sat,time,"CoordinateFrame","geographic");

    % Calculate the direction of gs with respect to sat in sat NED frame
    dir(:,idx) = [cosd(el(idx))*cosd(az(idx)); ...
      cosd(el(idx))*sind(az(idx)); ...
      -sind(el(idx))];

    % Calculate the velocity along the line between the gs and the sat.
    % This velocity determines the doppler frequency.
    dopV(idx) = dot(satV(:,idx),dir(:,idx));
  end
end
plot(1000*latency)  % ms
title("Latency vs. Time")
xlabel("Simulation Time (s)")
ylabel("Latency (ms)")
grid on

Figure contains an axes object. The axes object with title Latency vs. Time contains an object of type line.

plot(dopV)
title("Satellite Velocity Along the Line Between Sat and GS")
xlabel("Simulation Time (s)")
ylabel("Velocity (m/s)")
grid on

Figure contains an axes object. The axes object with title Satellite Velocity Along the Line Between Sat and GS contains an object of type line.

Вычислите Доплеровскую частоту от скорости

Доплеровская частота вычисляется от следующего уравнения:

fo=(c±vrc±vs)fe,

где c скорость света в m/s,

vr скорость, в m/s, приемника относительно носителя, добавленного к c если приемник двигает источник, вычтенный, если приемник переезжает от источника,

vs скорость, в m/s, источника относительно носителя, добавленного к c если источник переезжает от приемника, вычтенного, если источник двигает приемник,

fe испускаемая частота, в Гц, и

fo наблюдаемая частота, в Гц.

В этом примере мы рассматриваем наблюдаемую частоту с точки зрения наземной станции получения. В этом случае, vr 0. Мы также рассматриваем частоту полосы C 5 ГГц.

fe = 5e9;  % emitted frequency in Hz
fo = (((c ./ (c-dopV)) * fe) - 5e9);  % doppler shift in Hz
plot(fo/1e3)  % plot kHz
title("Doppler Shift vs. Time")
xlabel("Simulation Time (s)")
ylabel("Doppler Shift (kHz)")
grid on

Figure contains an axes object. The axes object with title Doppler Shift vs. Time contains an object of type line.

Вычислите скорости изменения задержки и Доплера

Ссылки спутниковой связи должны быть спроектированы, чтобы отследить различные задержки и Доплеровские частоты. Таким образом важно вычислить эти количества.

latencyRate = diff(latency)/sampleTime;
plot(1000*latencyRate)  % ms/s
title("Latency Rate of Change")
xlabel("Simulation Time (s)")
ylabel("Latency Rate of Change (ms/s)")
grid on

Figure contains an axes object. The axes object with title Latency Rate of Change contains an object of type line.

dopplerRate = (diff(fo)/sampleTime);
plot(dopplerRate)
title("Doppler Rate of Change")
xlabel("Simulation Time (s)")
ylabel("Doppler Rate of Change (Hz/s)")
grid on

Figure contains an axes object. The axes object with title Doppler Rate of Change contains an object of type line.

Проигрывайте сценарий со спутником и наземной станцией.

play(sc)

Смотрите также

Объекты

Функции

Связанные примеры

Больше о