UTC для GPS время для поиска TOW в Simulink

Для моего проекта мне нужно рассчитать TOW (время недели) в Simulink. Я знаю, что это может быть достигнуто путем преобразования времени UTC в время GPS.

Я написал простой m-файл в Matlab, который выполняет действие для меня в Matlab следующим образом:

date_gps_int = 10000*y + 100*m + d
date_gps_str = int2str(date_gps_int)
date_gps_str_to_serial = datenum(date_gps_str,'yyyymmdd')
date_str_format = datestr(date_gps_str_to_serial,'dd-mmmm-yyyy')
Num_Days = daysact('06-jan-1980',date_str_format)
Num_Weeks = Num_Days/7
TOW = Num_Weeks - 1024

Моим первым намерением было использовать это как функцию в Simulink. Но, очевидно, из-за 'datenum' и 'datestr' это невозможно, так как simulink не обрабатывает строки.

Теперь мне интересно, может ли кто-нибудь помочь мне с этим вопросом. Есть ли способ рассчитать TOW по дате UTC в Matlab без использования этих предопределенных функций?

Я также попытался написать алгоритм для подсчета количества дней с "6 января 1980 года", а затем подсчитать количество недель, разделив их на 7. Но так как я не очень хорошо знаком с подсчетом високосного года и не знаю формулы для такого рода расчетов мой результат отличается от реального TOW.

Буду признателен, если кто-нибудь сможет мне помочь в этом.

1 ответ

Matlab обрабатывает три формата времени: отформатированные строки даты - что datestr выходы -, порядковая дата - скалярная двойная, какая datenum выходы - и векторы даты (см. datevec). Функции преобразования работают с этими тремя, и наиболее удобный способ преобразования отдельных переменных (год, месяц и т. Д.) В дату состоит в построении вектора даты. [yyyy mm dd HH MM SS],

date_gps_str_to_serial = datenum([y m d 0 0 0]); % midnight on day y-m-d
date_Jan_6_1980 = datenum([1980 01 06 0 0 0]);   % midnight on Jan 6th, 1980
Num_Days = date_gps_str_to_serial - date_Jan_6_1980;

Теперь остерегайтесь високосных секунд...

Время GPS вычисляется из времени, прошедшего с 6 января 1980 года. Возьмем количество секунд, прошедших с того дня, измеренное атомными часами спутников, разделим на (24*3600), чтобы получить количество дней, остаток - это время суток (в секундах с полуночи).

Но время от времени Международная служба вращения Земли и системы отсчета решит, что день будет длиться одну секунду дольше, чтобы приспособиться к замедлению вращения Земли. Это может происходить два раза в год, 30 июня или 31 декабря. Расчет времени GPS неверен, поскольку он не учитывает, что некоторые дни длятся 86401 секунду (поэтому деление на 24 * 3600 не работает), и будет продвигаться на 1 секунду относительно UTC каждый раз, когда это происходит. С 6 января 1980 года таких дней было 18, поэтому для определения времени UTC нужно вычесть 18 секунд из времени GPS. В следующий раз можно добавить високосную секунду - июнь 2019 года.

Другие вопросы по тегам