为任何期望的时间生成WWVB时间码
项目描述
目的
wwvbpy为任何期望的时间生成WWVB时间码。这些时间码可能对测试WWVB解码软件很有用。
在可能的情况下,wwvbpy使用现有的日历和时间操作功能(datetime和dateutil)。
它使用来自IERS公告"A"和NIST的"闰秒和UT1-UTC信息"页的DUT1/闰秒数据。通过定期更新"iersdata",wwvbpy应该能够正确地编码100年WWVB纪元内的任何时间。是的,WWVB使用两位数字的年份!为了与历史数据兼容,纪元被任意设定为从1970年到2069年。
程序包括
wwvbgen
,主要命令行生成程序wwvbdecode
,主要命令行解码程序wwvbtk
,使用Tkinter实时可视化模拟的WWVB信号dut1table
,打印dut1值的完整历史记录,包括估计的未来值updateiers
,下载最新的dut1数据,包括来自IERS和NIST的预期数据
该软件包包括
wwvb
,用于生成WWVB时间码wwvb.decode
,基于生成器的状态机,用于解码WWVB时间码(仅限幅度调制)uwwvb
,解码器的版本,旨在用于受限制的环境,如CircuitPython。
开发状态
作者(@jepler)偶尔开发和维护此项目,但不太可能对问题作出反应。他们有兴趣添加共同维护者。
WWVB时间码
美国国家标准与技术研究院在科罗拉多州福特科林斯附近运营WWVB时间信号服务。该信号可在北美大陆的大部分地区接收。每分钟,信号会传输当前时间,包括闰年、夏令时和闰秒等信息。该信号由一个幅度通道和一个相位调制通道组成。
幅度通道可以看作是一系列(通常为60个)符号,默认情况下,wwvbgen将其显示为0、1或2。0和1编码当前年份中的日期信息,而2在固定的位置出现,以便接收器确定分钟的起始。
相位通道(使用--channel=phase
或--channel=both
显示)每分钟包含相同数量的符号。这个通道比幅度通道复杂得多。它编码当前时间为世纪分钟,提供扩展的夏令时信息,并包括幅度通道中没有的错误校正信息。
用法
Usage: python -m wwvb.gen [OPTIONS] [TIMESPEC]...
Generate WWVB timecodes
TIMESPEC: one of "year yday hour minute" or "year month day hour minute", or
else the current minute
Options:
-i, --iers / -I, --no-iers Whether to use IESR data for DUT1 and LS.
(Default: --iers)
-s, --leap-second Force a positive leap second at the end of
the GMT month (Implies --no-iers)
-n, --negative-leap-second Force a negative leap second at the end of
the GMT month (Implies --no-iers)
-S, --no-leap-second Force no leap second at the end of the month
(Implies --no-iers)
-d, --dut1 INTEGER Force the DUT1 value (Implies --no-iers)
-m, --minutes INTEGER Number of minutes to show (default: 10)
--style [bar|cradek|default|duration|json|sextant]
Style of output
-t, --all-timecodes / -T, --no-all-timecodes
Show the 'WWVB timecode' line before each
minute
--channel [amplitude|phase|both]
Modulation to show (default: amplitude)
--help Show this message and exit.
例如,要显示1998年底发生的闰秒:
$ python wwvbgen.py -m 7 1998 365 23 56
WWVB timecode: year=98 days=365 hour=23 min=56 dst=0 ut1=-300 ly=0 ls=1
'98+365 23:56 210100110200100001120011001102010100010200110100121000001002
'98+365 23:57 210100111200100001120011001102010100010200110100121000001002
'98+365 23:58 210101000200100001120011001102010100010200110100121000001002
'98+365 23:59 2101010012001000011200110011020101000102001101001210000010022
'99+001 00:00 200000000200000000020000000002000100101201110100121001000002
'99+001 00:01 200000001200000000020000000002000100101201110100121001000002
'99+001 00:02 200000010200000000020000000002000100101201110100121001000002
(闰秒是23:59行末的额外数字;该分钟有61秒,而不是正常的60秒)
wwvbpy如何处理DUT1数据
wwvbpy在wwvb/iersdata_dist.py
或wwvb_iersdata.py
中存储DUT1值的紧凑表示。在这种表示中,一个值对应一天(从0000UTC到2359UTC)。字母a
到u
代表-1.0秒到+1.0秒的偏移量,以0.1秒为增量;《code> k代表0秒。(在实践中,通常只看到较小的值范围,通常是-0.7秒到+0.8秒)
对于2001年至2019年,NIST已发布实际广播的DUT1值和每次更改的日期,尽管它是以HTML表格格式发布的,并不适合机器阅读。
NIST不每天更新值,也不遵循任何特定的舍入规则。而是在WWVB中,“DUT1校正的分辨率是0.1秒,代表一个较长日期范围的平均值。因此,它不会与之前表中显示的每周UT1-UTC(NIST)值完全一致,这些值具有1毫秒的分辨率,并每周更新。”就像wwvbpy对DUT1值的紧凑表示一样,真实的WWVB似乎从未广播过DUT1=-0.0。
对于跨越1973年至现在大约一年的更长时间范围,IERS发布历史和预期的UT1-UTC值,以多小数位数,采用机器可读的固定长度格式。
wwvbpy将WWVB和IERS数据集合并,当可用时优先选择WWVB数据集。这里有一些注意事项,这些注意事项主要在wwvb/updateiers.py
脚本中注释。
wwvb/iersdata_dist.py
每月从github actions更新,或者可以从wwvbpy源树中使用iersdata --dist
更新。然而,目前并没有定期从更新的信息中发布版本。
可以创建或更新wwvb_iersdata.py
的站点或用户版本,使用iersdata --site
或iersdata --user
。如果分发的iersdata已过时,生成器将提示您运行更新命令。
闰秒是从DUT1数据中推断出来的,如下所示:如果X和Y是连续日期的1位四舍五入的DUT1值,并且 X*Y<0
,则在X日的末尾有一个闰秒。闰秒的方向可以从X的正负号推断出来,如果X为正,则是一个59秒的分钟,如果为负,则是一个61秒的分钟。只要DUT1在其它时间变化足够慢,且至少有一天DUT1=+0.0,就不会推断出错误的(负的)闰秒。(这种情况在未来几百年内应该仍然成立,直到一天的长度与86400秒相差100毫秒)
相位调制通道
与AM通道相比,这应该被视为更实验性的,因为测试仅覆盖了一个参考分钟。进一步的测试可以参考我所知的其他实现(链接),但该实现似乎不完整。
测试wwvbpy
使用gmake
运行测试套件,检查覆盖率与类型注解。
有几个测试套件
testwwvb.py
:检查输出与预期值是否一致。使用硬编码的闰秒。测试幅度和相位数据,尽管相位测试用例是可疑的,因为它们也是由wwvbpy生成的。testuwwvb.py
:测试具有较少功能的版本与主要版本之间的差异testls.py
:检查至2020年1月1日的IERS数据以期望的闰秒testpm.py
:检查相位调制数据与NIST文档中的一个测试用例testcli.py
:检查命令行程序是否按预期工作(限于测试以获得100%覆盖率)
项目详情
下载文件
下载您平台上的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。
源分布
构建分布
wwvb-4.0.0.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | d0e25bbde006c4c9bc213eb0a5708de63ac86e1bacf3ba59e246b9028a56e80f |
|
MD5 | 025929b2d0b2a230f909172ea371d2e6 |
|
BLAKE2b-256 | 772e6f3f99f6b9189d951a071eb7e20382bc3dc22216698ad6e0a8e620f4ee68 |
wwvb-4.0.0-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | bd24f1b370d66fb240b63cefad452919029418cfafccc303961a7c9a1a02fda9 |
|
MD5 | 19c7fae118b7cd714467a12a2ae27773 |
|
BLAKE2b-256 | 1d37415763b85a05063e669c5225a3cd8dd3f28c14c5809253f373eb4374905a |