注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Mr.Right

不顾一切的去想,于是我们有了梦想。脚踏实地的去做,于是梦想成了现实。

 
 
 

日志

 
 
关于我

人生一年又一年,只要每年都有所积累,有所成长,都有那么一次自己认为满意的花开时刻就好。即使一时不顺,也要敞开胸怀。生命的荣枯并不是简单的重复,一时的得失不是成败的尺度。花开不是荣耀,而是一个美丽的结束,花谢也不是耻辱,而是一个低调的开始。

网易考拉推荐

阿英讲北京时、北斗时、UTC与GPST转换-MATLAB源码  

2016-07-18 23:47:39|  分类: 编程 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
即以此功德,庄严佛净土。上报四重恩,下济三途苦。惟愿见闻者,悉发菩提心。在世富贵全,往生极乐国。

缘起,GPS时间与UTC的关系之前没有彻底理解!如今花了一晚上研究了一下,希望给大家有帮助!
UTC = 北京时间 - 8:00:00

(一) UTC、TAI、GPST之间的关系
阿英讲北京时间、UTC与GPST转换-MATLAB源码 - 阿英 - Mr.Right
 

阿英讲北京时间、UTC与GPST转换-MATLAB源码 - 阿英 - Mr.Right
 
阿英讲北京时间、UTC与GPST转换-MATLAB源码 - 阿英 - Mr.Right
 

UTC_JD1 = juliandate(2016,7,18,11,44,37);
TAI_JD1 =  UTC_JD1 + 36/86400.0   % TAI is currently ahead of UTC by 36 seconds in 2016, 36是2016年的闰秒
GPS_JD1 = TAI_JD1 - 19/86400.0     % GPS时间是个原子时,但该原子时落后TAI 19s
BDT_JD1 =  GPS_JD1 - 14/86400.0   % BDT 从2006年开始, 此时 GPST - UTC = 14

[~,~,~,~,~,~,~,UTC1] = julian2greg(UTC_JD1) % [year,month,day,hour,min,sec,g,h] = julian2greg(UTC_JD) 

[~,~,~,~,~,~,~,TAI1] = julian2greg(TAI_JD1) 

[~,~,~,~,~,~,~,GPST1] = julian2greg(GPS_JD1) 

运行结果如下:
TAI_JD1 =

           2457587.9897338


GPS_JD1 =

          2457587.98951389


UTC1 =

        2016           7          18          11          44          37


TAI1 =

        2016           7          18          11          45          13


GPST1 =

        2016           7          18          11          44          54



UTC_JD = juliandate(1980,1,6,0,0,0); %UTC_JD = juliandate(2016,7,18,11,44,37);
TAI_JD =  UTC_JD + 19/86400.0   % TAI is currently ahead of UTC by 19 seconds in 1980
GPS_JD = TAI_JD - 19/86400.0
[~,~,~,~,~,~,~,UTC] = julian2greg(UTC_JD) % [year,month,day,hour,min,sec,g,h] = julian2greg(UTC_JD) 
[~,~,~,~,~,~,~,TAI] = julian2greg(TAI_JD) 
[~,~,~,~,~,~,~,GPST] = julian2greg(GPS_JD) 

TAI_JD =

          2444244.50021991


GPS_JD =

                 2444244.5


UTC =

        1980           1           6           0           0           0


TAI =

        1980           1           6           0           0          19


GPST =

        1980           1           6           0           0           0


 GPS_JD1 - GPS_JD

ans =

           13343.489513889

UTC_JD1 - UTC_JD

ans =

          13343.4893171298


 GPS_JD1 - GPS_JD  - ( UTC_JD1 - UTC_JD)   = 0.00019675912335515
   17/86400  = 0.000196759259259259

( 二)儒略日到Gregorian 时间的转换函数

%-------------------------------------------------------------------------------------------------------------
function [year,month,day,hour,minu,sec,dayweek,dategreg] = julian2greg(JD)
% ______________________________________________________________________________________________
% This function converts the Julian dates to Gregorian dates.
%
% 0. Syntax:
% [day,month,year,hour,min,sec,dayweek] = julian2greg(JD)
%
% 1. Inputs:
%     JD = Julian date.   
%
% 2. Outputs:
%     year, month, day, dayweek = date in Gregorian calendar.
%     hour, min, sec = time at universal time.
%
% 3. Example:
%  >> [a,b,c,d,e,f,g,h] = julian2greg(2453887.60481)
%  a = 
%     2006      
%  b =
%     6
%  c =
%     1
%  d =
%     2
%  e =
%     30
%  f =
%     56
%  g = 
%     Thursday
%  h =
%       1     6     2006     2     30     56
%
% 4. Notes:
%     - For all common era (CE) dates in the Gregorian calendar.
%     - The function was tested, using  the julian date converter of U.S. Naval Observatory and
%     the results were similar. You can check it.
%     - Trying to do the life... more easy with the conversions.
%
% 5. Referents:
%     Astronomical Applications Department. "Julian Date Converter". From U.S. Naval Observatory.
%               http://aa.usno.navy.mil/data/docs/JulianDate.html
%     Duffett-Smith, P. (1992).  Practical Astronomy with Your Calculator.
%               Cambridge University Press, England:  pp. 8,9.
%
% Gabriel Ruiz Mtz.
% Jun-2006
% ____________________________________________________________________________________________

error(nargchk(1,1,nargin))

I = floor( JD + 0.5);
Fr = abs( I - ( JD + 0.5) );  

if I >= 2299160 
     A = floor( ( I- 1867216.25 ) / 36524.25 );
     a4 = floor( A / 4 );
     B = I + 1 + A - a4;
else
     B = I;
end 

C = B + 1524;
D = floor( ( C - 122.1 ) / 365.25 );
E = floor( 365.25 * D );
G = floor( ( C - E ) / 30.6001 );
day = floor( C - E + Fr - floor( 30.6001 * G ) );

if G <= 13.5 
    month = G - 1;
else
    month = G - 13;
end

if month > 2.5
    year = D - 4716;
else
    year = D - 4715;
end

hour = floor( Fr * 24 );
minu = floor( abs( hour -( Fr * 24 ) ) * 60 );
minufrac = ( abs( hour - ( Fr * 24 ) ) * 60 ); 
sec = floor( abs( minu - minufrac ) * 60);
AA = ( JD + 1.5 ) / 7;
nd = floor( (abs( floor(AA) - AA ) ) * 7 );
dayweek ={ 'Sunday' 'Monday' 'Tuesday' 'Wednesday' 'Thursday' 'Friday' 'Saturday'};
dayweek = dayweek{ nd+1};
format('long', 'g');
dategreg = [ year month day hour minu sec ];
  

(三)致谢
特别感谢作者Gabriel Ruiz Mtz.编写的(二)部分源码!






参考文献
[1]  https://confluence.qps.nl/display/KBE/UTC+to+GPS+Time+Correction
[2] https://en.wikipedia.org/wiki/Julian_day
[3] http://leapsecond.com/java/gpsclock.htm
[4] http://cn.mathworks.com/matlabcentral/fileexchange/11410-julian2greg
  评论这张
 
阅读(236)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016