对于我的项目,我需要在Simulink中计算TOW(星期时间) . 我知道这可以通过将UTC时间转换为GPS时间来实现 .
我在Matlab中编写了一个简单的m文件,它在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不会处理字符串 .
现在我想知道是否有人可以帮我解决这个问题 . 有没有办法在不使用这些预定义函数的情况下在Matlab中从UTC日期计算TOW?
我还尝试编写一个算法来计算自1980年1月6日以来的天数,然后用7除以7计算周数 . 但是因为我对闰年计算不是很熟悉,所以我真的不知道公式对于这些类型的计算,我的结果与真正的TOW不同 .
如果有人能帮助我,我将不胜感激 .
1 回答
Matlab有三种格式处理时间:格式化日期字符串 - 什么
datestr
输出 - ,序列日期 - 标量双,什么datenum
输出 - 和 date vectors (见datevec) . 转换函数适用于这三种,将各个变量(年,月等)转换为日期的最便捷方式是构建日期向量[yyyy mm dd HH MM SS]
.现在,小心leap seconds ......
GPS时间是从1980年1月6日以来经过的时间计算出来的 . 取自自那天起经过的秒数,由卫星的原子钟测量,除以(24 * 3600)得到几天,剩下的是一天中的时间(自午夜起的秒数) .
但是,有一段时间,国际地球自转和参考系统服务将决定一天将持续一秒钟,以适应地球自转的减缓 . 它可能每年发生两次,即6月30日或12月31日 . GPS时间的计算是错误的,因为它没有考虑到某些天持续86401秒(因此除以24 * 3600不起作用)并且每次发生时将相对于UTC提前1秒 . 自1980年1月6日以来已有18天,所以应该从GPS时间减去 18 seconds 以找到UTC时间 . 下一次闰秒可能是2019年6月 .