UTC для GPS время для поиска TOW в Simulink - PullRequest
0 голосов
/ 10 декабря 2018

для моего проекта мне нужно рассчитать 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 Ответ

0 голосов
/ 11 декабря 2018

Существует три формата, которые обрабатываются 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, поэтому нужно вычесть 18 секунд из времени GPS, чтобы найти время UTC.В следующий раз можно добавить високосную секунду - июнь 2019 года.

...