首页 文章

UTC到GPS时间在Simulink中查找TOW

提问于
浏览
1

对于我的项目,我需要在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 回答

  • 0

    Matlab有三种格式处理时间:格式化日期字符串 - 什么 datestr 输出 - ,序列日期 - 标量双,什么 datenum 输出 - 和 date vectors (见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;
    

    现在,小心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月 .

相关问题