Телекоммуникационные технологии. Том 1




Процедура часовой фильтр (clock-filter) - часть 2


/* shift stage right */

ei = ei + ft;

add [li ? ei + {|di|}/2, i] to temporary list;

endfor;

[q0, d0, e0] q, d, e]; /* ввести новую запись */

add [l ? e + {|d|}/2, 0] to temporary list;

peer.update

/* сбросить показание часов */

sort temporary list by increasing [distance index];

где [distance index] представляет собой объединение полей расстояния и индекса (расстояние занимает старшую позицию). Дисперсия фильтра es вычисляется и включается в дисперсию партнера. Заметим, что временный список для этой цели уже упорядочен.

es

for (i from ntp.shift-1 to 0) /* вычисление дисперсии фильтра */

if (peer.dispersionindex[i] ? NTP.MAXDISPERSE or |qi

- q0 > NTP.MAXDISPERSE)

es es + NTP.MAXDISPERSE) * NTP.FILTER;

else

es es + |qi

- q0|) * NTP.FILTER;

Смещение партнера q0, задержка d0 и дисперсия e0 выбираются как величины, соответствующие записи с минимальным расстоянием; другими словами, записи, соответствующей первому элементу временного списка (в данной нотации имеет индекс 0).

peer.offset q0; /* корректировка переменных партнера */

peer.delay d0;

peer.dispersion e0 + es, NTP.MAXDISPERSE);

end clock-filter procedure

Переменные peer.offset и peer.delay представляют смещение шкалы часов и RTT для локальных часов, измеренные относительно часов партнера. Обе они усредняются по большому числу измерений в течение длительного периода времени. Переменная peer.dispersion характеризует максимальную ошибку из-за неточности измерений, дрейфа и вариации записей. Все три переменные используются при выборе часов для синхронизации.




Содержание  Назад  Вперед