GPSを用いStratum 1 NTPサーバを構築することについての検討

(Last Updated On: 2018年6月23日)

2018年6月23日:TeXの記法について訂正いたしました

一般にPCの時計は精度が悪いので,何らかの方法で定期的に校正してあげる必要があります.
現在,うちではcron.dailyでntpdateを1日に1回実行しているのですが,最大で8秒ほどの誤差が出ていると考えられます.概念図を以下に示します.

もっとも,線形に誤差が増えていくとは限りません.また,1日目にntpdateを実行する直前の誤差⊿t1と,2日目にntpdateを実行する直前の誤差⊿t2は実際には異なります.それに,ntpdateは時刻を緩やかに訂正します.ですので,上図はあくまで概念図です.

図にも書きましたが,ntpdateを実行する直前と直後の時刻差の絶対値は8秒程度です[注1].8秒というのはあまりにも大きいです.
ntpdateを1日に8回実行すれば,誤差をいたるところで1秒程度に減らすことはできます[注2].しかし1秒の誤差ではまだ大きいですし,かといってNTPサーバに問い合わせる回数は増やしたくありません.そこで,GPS時計の出番です.

GPSというのは,ご存知のようにGlobal Positioning Systemの略称です.電波が,衛星からGPSレシーバに到達する時間を距離に換算し,位置を特定します.これが一般的な使われ方です.
逆に,一度位置を特定すれば,時刻を求めることができます.GPS衛星は原子時計を搭載していますので,求めた時刻はかなり正確です.これがGPS時計の原理です.

GPSレシーバの中には,衛星から受信した1PPS信号(矩形信号の立ち上がりが毎分の0.000...秒に一致している)を出力できるものがあります.
そんな面倒なことをしなくても,GPSからの時刻をセットすればいいじゃないかと思うかもしれませんが,次のような理由により1PPSを利用したほうがより正確です.

http://time.qnan.org/より引用

What is the difference between "PPS" and "GPS time"? PPS is simply an electrical signal pulsed by the GPS unit once a second. It very precisely indicates the start of a second. "GPS time" is the actual time of day, such as 12:34:56 UTC, that is provided in NMEA data as described in an earlier section. The downside of the GPS time is that it is much less precise than PPS, and so a PC that's attempting to synchronize with just NMEA data may be off by hundreds of milliseconds without knowing it. This is why it is important to combine the GPS time with the PPS signal, or use just the PPS signal from the GPS and acquire time-of-day from other sources such as Internet hosts.

また,サンプルがある程度集まれば,時刻のズレを20μ秒程度にできるようです.

After some minutes or hours of sampling your GPS, the system time will be adjusted to match the PPS output, and you should expect the absolute value of your offsets to be below 20 microseconds (0.020 ms).

20μ秒という値がどこから出てきたのか分かりませんが,1日に2秒誤差が生じる場合,1秒間に23μ秒の誤差が生じます[注3].多分こういうことなのではないかという概念図を下に示します.

ここで,$$ \Delta t' = \frac{\Delta t}{24 \times 3600} $$
ただし⊿tは24時間での誤差(一番上の図の⊿tに対応)

なんにせよ,マイクロ秒単位の時間を扱うので,GPSとPCとの接続は,RS-232Cなどの遅延が少ないものでないとダメです.USBなんて論外です.

そんな感じで,よさそうなGPSユニット(モジュール)を探してみました.

1.秋月のGT-720F
3200円と安価で,RS-232Cレベルの信号を出してくれるので手軽です.ただ,1PPS信号が出ないので却下.

2.GM-316
5000円程度と若干高いですが,1PPS信号も出ます.ただし,1PPS信号のパルス幅が1μ秒なので[注4],単安定マルチバイブレータやPICでの信号変換が必要.また,信号がCMOSレベルなので,外部回路でRS-232Cレベルに変換しなければならない.

3.Garmin 18x LVC
日本で買うと12600円するが,海外通販なら$60.95で買える
また,多くの人が使っているようで,簡単に導入できそう(参考1 参考2).

以上より,やるなら海外通販でGarmin 18x LVCでも買おうと思う.

NTPサーバ構築にあたって,本当はもう少し作業が必要ですが,今日はここまで.

[注1] うちのある1台のパソコンでの例.マザーボード,チップセット等により大きく異なる.本文中では誤差を絶対値で表すようにしたが,環境によりプラス方向,マイナス方向のどっちにもズレる.
[注2] max(abs(error)) < 1程度にできるという意味
[注3] 統計的手法でコンピュータで定義された1秒の長さを調整すれば,誤差をもっと追い込めるのではないかと思うのですが,LinuxPPSにそういった実装はないのでしょうか(←ちゃんと調べてないので不明).
[注4] 1μ秒はないだろと思ってデータシートを見てみたのですが,本当に1μ秒でした.

4 thoughts on “GPSを用いStratum 1 NTPサーバを構築することについての検討

  1. フィージビリティスタディが終わって、インプリメントが終わったらUATに参加したいです。

  2. アドバイスありがとうございます.よく見たら型番が違いますね・・・

    やりたいなと思いつつ放置してしまった話題でした.やっぱやってみたいなあ.

コメントを残す

メールアドレスが公開されることはありません。