JA21DK。北海道警察のH135。
prime videoに挿入されるprime videoのCM、その作品に興味を持っても自分で検索しなきゃいけないの結構アホの仕様では? なんで「ウォッチリストへ追加する」ボタンが無いんだろう。
Fire Tabletの充電、ACアダプタを変えても、モバイルバッテリーを使っても、ケーブルを変えても、何をやってもアダプタの容量不足の警告が出て、5Wくらいしか吸い込まれなくて、朝まで放置してもまだ充電中みたいな有り様だったんだけど、試しに付属のACアダプタを使ってみたら警告無しで充電できた。とはいえ10Wくらいしか吸ってないから、2倍程度の差だけど。
付属のACアダプタは定格が5.2V1.8A9.0Wと書いてある。電圧を監視して十分に高ければ(普通のACアダプタより有意に高ければ)ハイレートで充電する、みたいな挙動なのかな。USBって規定外の電圧を出すアダプタって建前としては禁止しているはずなんだが。4%の違い程度は定格範囲内ってことなのかな。
Fr24に表示される機体で、LatLng有り、BaroAlt有り、ICAOアドレス無し、Squawk無し、機種情報有り、みたいなやつ、いったいどうやって表示してるんだろう。ICAOアドレスが無いならMode-S非対応だけど、MLATならSquawkも取れるはず。MLATだと機種情報は得られないけど、機種情報が得られているならICAOアドレスも取れるはず。時々明らかにADS-Bっぽい機体(民間のB76とか)でもSquawkが表示されないことがあるから、Fr24側の不具合かもしれないけど。
家で受信しているMode-3/A/Cの信号、なぜか北方向が異様に電波強度が高い。旭川空港を離着陸する飛行機はかなり低い高度まで強く受信できるし、相当離れた場所を飛んでいても高い強度で受信できる。Fr24のフィードステータス画面でも南東方向は20nm未満なのに北西方向は90nm以上受信できている。以前キューブサットのビーコンを受信していたときも、南方向に比べて明らかに北方向が強かったような気がする。いったいどういう理由があって電波信号の非対称性が生まれるんだろう?
科学を変えた10のコンピューターコード | Nature ダイジェスト | Nature Portfolio
FFTに関して、「ドイツの数学者カール・フリードリヒ・ガウス(Carl Friedrich Gauss)は1805年にこのことを発見していたが、発表することはなかった」という記述。
FFTアルゴリズムをガウスが発見していたという逸話、こういう小さい記述はいくつかのWebサイトやWikipedia(日本語版・英語版含め)では見かけるけど、いまいちちゃんとした場所に書いてあるのが見当たらない。
カール・フリードリヒ・ガウスにちなんで名づけられたものの一覧 - Wikipedia
こんな一覧があるのか。日本語版Wikipediaの「物理学に関する一覧」の中でタイトルに個人名が含まれる記事としては唯一のもの(ただしファインマン・ダイアグラムの一覧という記事がある)。数学だとオイラーとか数人の記事がある。
***
いくつかのNTPサーバーとの時刻差のログ
クロックエラーがそれなりに大きくて、260ms/36h(2ppm)くらいの誤差がある。とはいえTCXOくらいの精度はあるかな。
時差が増えると0秒まで引き戻して、また発散するという感じらしい。
途中で16時間くらいログが止まっているが、その間にステップ状の変化はなさそう。たぶんNTPに問い合わせて1秒以上ズレていたら強制的に引き戻すみたいな処理なんだろう。
各サーバーとのラウンドトリップタイム
Cloudflareが最優秀でほとんどすべて25msを維持している。NICTも良いときは25msを維持するが、場合によって32msあたりまで悪化する。AWSと水沢は常に32msあたりを維持している。Googleは常に62msあたり。NISTが145ms、USNOが200ms、あたり。
やはりCDN大手のノウハウが有るのか、Cloudflareが一番優秀。国家機関としてNICTも頑張っている。水沢はタイムサービスには大して力を入れていないはず(UTCしかり)。その割にRTTが低めなのは、単に国内にサーバーがあるから、ということかな。AWSは水沢より若干優秀だけど、大きな差はない。
Googleはアジア圏で1箇所のサーバーのはずだから、国外のサーバーに問い合わせに行っているはず。
NISTとUSNOはアメリカまで行くから、その分RTTが大きい。NISTのゲイザースバーグとUSNOのワシントンDCは日本から見ればほとんど同じ場所だけど、明らかにRTTに差がある。USNOは米軍向けのタイムサービスだから民間回線からはファイヤーウォールを挟んでいる分遅いとかなのかな?
PCとNTPサーバーの時差から適当な1次関数をオフセットして、サーバー間の差を見やすくしたグラフ。
最初の42時間くらい(ステップ状に引き込む前)と、それ以降では時間の進み方にかなり違いがある。とはいえ、差分を取ってようやく見える程度の小さな変化だけど。
1日19時(UTC)頃に傾きが大きく変化した場所があるけど、ここは窓を開けて部屋の空気を換気したところ。気温が大幅に変化したので、それに釣られて水晶も変動している。温度特性悪そう。
NTPはCloudflareやNICT、AWS、Googleあたりが優秀だけど、ジッタやバイアスがあるから、精度が欲しいなら5個以上のサーバーに問い合わせて上下2個を除外した複数サーバーの平均を使う、みたいなアルゴリズムにしたほうが良さそう。一つのサーバーに連続してアクセスするとアクセス頻度の問題やバイアスを除去できないといった問題がある。
ただし最近のNTPサーバ(特にIT系企業が運用しているもの)は閏秒の取り扱いに一貫性がないから、閏秒前後の1日程度で複数サーバーから外れ値/平均値を取ろうとすると問題がある。smearingを行うサーバーはおそらくLeap Indicatorはクリアのままだから、そういう操作を実施している事自体が把握できない。標準研究所(NICT、NIST、USNO、等)が運用しているサーバーはLIを正しく実装しているはずだから、それらのサーバーを問い合わせ先に含めておいて、どれかがLIを出しているときは、LIを出していないサーバーを除外する、みたいな挙動が必要になりそう。ただ、LIに関しても、サーバーによって「今月末に閏秒を実施する」とか「今日の最後に閏秒を実施する」とか、実装が別れているらしい。企業間・研究所間で閏秒の取り扱いがバラバラなのを見ると、閏秒を廃止したいってのもまあ分かる気がする。問題を先送りしているだけとはいえ。
*
NTPのログが面白そうだということで、もう少し真面目にコードを書き直して、安定して動くように改造。本当に安定しているかはわからん。前のコードで10時間ぐらい止まっていたのは、サーバーの一つから応答がなかったからそこで止まったので、今回は1秒位でタイムアウトしてそのサーバーはその時はスキップするようにしている。ただ、今のところはタイムアウトは起きてないっぽい。いくらUDPとはいえ今どきのインターネットで応答がないってことはそうそう起きないだろうしなぁ。
サーバーリストをハードコードから外部ファイルへ移動して、プログラムの実行中に書き換えても次の取得時には反映されるようにしたのと、ログに生データを入れて後で再解析できるようにしたり、ログにIPアドレスを含めたのが大きな違いかな。IPアドレスが残っていると、ラウンドロビンでサーバーが切り替わる場合に、そのデータをどのサーバーから取得したかがわかる。
PCとNTPの差
W32Timeが停止していたので、4日12時Zに開始させたけど、直後は特に変化は見られない。ただ、その後ステップ状に戻すときの処理が積分フィルタな挙動になっている。その後も定期的に似たような動きをしつつ、PCとNTPの差の傾きが少しずつ小さくなっていってる。2^15秒(約9.1時間)毎に誤差を修正していってる感じ。
一つ(ut1-time.colorado.edu)だけ有意にバイアスがあるけど、これはUTCではなくUT1を出しているため。
それと、途中でtime.nist.govが大きく(ちょうど2秒)ジャンプしている部分がある。ログを見ると、特定のサーバー(2610:20:6f96:96::6、NISTコロラド州ボルダー)にアクセスしたときだけジャンプする。いきなりIPアドレスの保存が役に立ったな。最後に値がジャンプしていたのが4日12時Z頃で、夏時間含めてUTC-6hなので、現地時間で朝6時頃。職員が普通に出勤してきたにしてはちょっと早い気がする。とはいえ常駐の職員が対応したにしては時計がズレてから修正されるまでに24時間かかっている。やっぱりNTPサーバーの外れ値を除くために複数サーバーにアクセスする挙動って重要なんだな。しかし、NIST(アメリカ国立標準技術研究所)が管理するタイムサーバーもこういう挙動があるのか……
ラウンドトリップタイム
特にどうということはない。アメリカにあるUSNO、NIST、コロラド大学ボルダー校は150-200msくらいのRTT。Googleのアジアサーバーは安定して60msくらい。
残りの国内サーバーはCloudflareやNISTの24msから水沢の33msくらいまで、ほぼ安定したRTTが得られる。
タイミングサービス専門企業のアマノセキュアジャパンが公開しているサーバーは26ms程度と、NIST/Cloudflareには2ミリ秒程度負けるが、かなり早い。また、自宅で契約しているプロバイダが公開しているNTPサーバーも同程度のRTT。アマノはIT系企業だから早い回線を確保しているとして、水沢はタイミングは本業ではないから(かつてはともかくとしても)注力しているわけではなく既設の回線を使っているとして、AWSがIT系企業のわりに遅いのはなんでだろう? いや、そんな事言い始めたらGoogleはどうなんだよという話なんだけど。
PC-NTPの差を一次関数でオフセットしたグラフ
縦軸の間隔はサーバー間のバイアスを示しているが、絶対値に意味はない。
大抵のNTPサーバーは0付近に固まっているが、UT1サーバーは0.07秒弱のバイアスがある。つまり現在のDUT1(UT1-UTC)は0.07秒位ということになる。
全米にサーバーが点在しているNISTは明らかにジッターが大きい。
時間軸を拡大
このグラフだと水沢のバイアスがだいぶ少ないように感じるけど、他のサーバーが増えて目立たなくなっているだけだと思う。NICTやGoogle、USNO、AWSみたいに中央に分布しているやつから比べると明らかにバイアスがある。プロバイダのNTPサーバーは水沢とほぼ同じバイアスがある。もしかしたら水沢をソースにしているのかな?
前半でCloudflareのジッターとバイアスが大きい。後半はかなり収束しているが。常に高い精度の時刻が得られるわけではないということか。1,2ミリ秒くらいの精度が欲しいなら特定のサーバーだけ取りに行くのではなくて、複数のNTPサーバーを参照して外れ値を除去した平均値を使うのは有効なんだろうな。
今回見た範囲だと、ジッターとバイアスが少ないのはAWS、USNO、NICT、Google、あたりか。USNOはRTTが大きい割に非常に優秀。Cloudflareはバイアスが大きくなることがあるから外れ値を除去できるなら使う、アマノは若干(1ms程度)バイアス有り、水沢も若干(3ms程度)バイアス有り、NISTは論外(ジッターとバイアスが大きすぎる)、という感じ。
W32Timeで引き込んでいる最中のPCとNTPの差を拡大
定期的に引き込んでいるが、クロックエラーを吸収するのにはかなり長い時間がかかる。2ppmのズレは48時間かけても修正が終わらない。10ms/6h(0.4ppm)くらいで制御が終わっている感じがする。
NISTの誤差が大きいのはいつものこととして、この図だと見づらいけど、やはりCloudflareに少しバイアスがある。それと、NICTと水沢も1回ずつ(6日9時Z前後)大きな誤差がある。ネットワークの問題だと思うけど。やはり複数サーバーへ同時に問い合わせて外れ値除去は大事そうだ。
とはいえ、多数決は単純にNTPトラフィックが数倍に膨れるから(複数のサーバーに分散させるとはいえ)、サーバー側の負荷も大きそう。そもそも今回はW32Timeが止まっていたのが問題であって、正常に動いていればシステムクロックで十分な精度を維持できるだろうし、というかミリ秒精度が必要な事自体ほとんどないだろうけど。ガチで時刻精度が必要な用途ならローカルにGPSでStratum1サーバー立てろって話だしな。超微弱なRFを信用できるかはまた別の話として。
NTPサーバーを比較してみるとそれぞれに特性があって面白いけど、自分でサーバーを探してくるのが結構面倒くさい。NTPサーバーの一覧みたいなところを見ても「定期的にアクセスするなら管理者に許可をもらってね」みたいなサーバーが非常に多くて、OSのNTPクライアントに設定することすらできないサーバーがかなり多い。なんでこんなポリシーのサーバーばっかりなんだろう?
NTPプールDNSに5分周期とかでアクセスしてIPアドレスでグルーピングしてグラフ化すればいいのかもしれないけど、シンプルなラウンドロビンでなく、経路的に近いサーバーを返すような実装になっていると、地理的に偏ったサーバー群しか見えない可能性があるんだよな。
***
Bulletin D - all available versions
IERSが公開しているDUT1の値。めちゃくちゃ飛び飛びの間隔。NICTが公表しているDUT1が飛び飛びなのが謎なんだけど、NICTはIERSの値を転記しているだけで、その大本のIERSの公表データが飛び飛びなのか。
IERSのデータをグラフ化したもの
1995年以降は閏秒のステップを除いて0.1秒以上の変化の度に値が公開されているらしいから、最近のDUT1の報告がないのはDUT1の変化が無いからということなのかな。DUT1の報告が「精度0.1秒」というのは、「最新の報告値から0.1秒以上ずれる場合は報告します」みたいな意味なのか。
1999年頃までは定義の秒と地球の秒の差がかなり大きくて、1999年から2005年頃までは傾斜が緩やかで、それ以降はまた傾斜が増えているけど、2019年頃からは急激に傾斜が小さくなっている。2024年はまた傾斜が大きくなったけど、傾向が見えるほどサンプルがない。
The GOES Time Code Service, 1974–2004: A Retrospective - PMC
GOESタイムコードの説明というか回想。初期の通信衛星(Echoとか)から段階を追って色々と説明している。
GOES TCは衛星から配信した初めての時刻情報で、送信位置情報を載せた初めての時刻情報らしい。例えばLORAN-CだってPNTコードなわけだから送信場所の位置情報は既知だけど、双曲線航法は送信場所の位置情報はあまり重要ではないから、伝搬遅延を高精度に推定するみたいな使い方はしていなかったのかも。そもそも伝搬時間も電離層の状態によって大きく変化するだろうし。
GOESタイムコードの仕組みとしては、DCP interrogationのヘッダにタイムコード(時刻・周波数)や衛星のLat/Lng/Radialが含まれているので、タイミングパルス単体で数十ms精度の時刻を得たり、自身と衛星の位置から伝搬遅延を求めて100us以下の時刻を得ることができる。
2000年代に入るとGPSタイムサービスを使うユーザーが増えてきたのでGOESタイムサービスを終了することになったが、それでもGOES受信機を使い続けるユーザーがいたため、GPSアンテナにGPS受信機やGOESエンコーダを内蔵して、アンテナだけ交換して電源を通せば既存のGOESシステムをそのまま使えるようにするシステムもあったらしい。
FAAではMode-SレーダでGOESタイムコードを使っていたんだそうだ。/* Mode-Sはレーダーカバレッジが重複している範囲では一つのレーダだけで追尾を行い、それ以外のレーダには伝送回線を使って同じ情報を配信することで、輻輳を防ぐ。おそらくそれ用のタイムスタンプとして使っていたんだろう */ FAAがいくらGPSを嫌ったとしても2000年代に入れば否が応でも使わざるを得ないらしい。2003年時点でFAAが使っていたGOES受信機は400台を優に超えるとのこと(冗長系でGOES-Westと-Eastの2つの受信機を使っているから、拠点数で言えば半分程度)。
GOESのタイムパルスを受信するシステム
https://nvlpubs.nist.gov/nistpubs/Legacy/TN/nbstechnicalnote681.pdf
Intel 4004ベースで、4.096MHzの原振から512kHzを4004へ供給し、さらに分周した100HzとGOESからの100Hzを位相比較してバリキャップで水晶へフィードバックする。回路図や基板パターン、アセンブリ等、一通りの資料が入っている。
https://tf.nist.gov/general/pdf/450.pdf
衛星の位置から伝搬遅延を補正するタイプの受信機。
遅延量は計算機用の半導体(MOS Technology?の7529-103)を使って計算するらしい。さすがに4004で自分で三角関数を計算するのは大変なのかな。計算チップの機能の説明もあるけど、四則演算や三角関数のほか、1/x、x^0.5、x^2、x^y、10^x、e^x、N!、など、いろいろな機能があるらしい。
https://wdc-cloud.nict.go.jp/IONO/wdc/hsv/gallery/pdfs/RRL1955JP_1.pdf
1955年。日本の短波標準電波の変調方式とかの説明。
各周波数で秒や分の切れ込みの入ったパルス信号を出したり、定期的にモールス符号や音声信号で時刻を通知したり、伝搬異常の予報を出したり、という感じ。
https://jjy.nict.go.jp/QandA/reference/ShortWave/JJYformat_199604.pdf
1996年。短波(5, 8, 10MHz)・長波(40kHz・実験局)の標準電波の説明。
当時は短波・長波共にDUT1値が放送されていた。長波の変調方式では現在のパリティ・予備ビット・年・曜日・閏秒が割り当てられていなかった。あくまでも周波数標準と時刻の放送がメイン。電波時計みたいな用途で使おうとすると年や曜日があったほうが便利だから、変更されたんだろう。閏秒は官報で通知していたらしい。
DUT1は0.1秒の分解能だけど、官報か何かを参照すればミリ秒くらいまで追い込める、みたいな話を何処かで読んだ気がする。天文みたいな用途だと電波でDUT1が得られるのは便利だろうけど、精度が欲しいなら別のソースが必要で、それならUTCから直接計算すればいい、ということでDUT1の放送は削除されたんだろうな。
https://www.nict.go.jp/publication/kiho/29/149/Kiho_Vol29_SI_No149_pp263-278.pdf
1983年。標準電波の説明いろいろ。歴史とか、伝搬特性とか。
時報を東京天文台から有線で伝送するために、三鷹からほど近い小金井に標準電波の送信所を作った。
秒は元々地球の自転速度に従属していたから、年ごとに周波数標準も変化していた。そもそも標準電波を開始した目的は、様々な無線通信間での干渉を防ぐために統一した基準を与えることだから、年毎に周波数標準が変化したのでは、それぞれの機器を常に調整し続ける手間がある。ということで秒(周波数)を定義値として、閏秒で対応するようになった。
小金井で宅地化が進んで電波障害が問題となったので、移設。
その他色々。
The most important part of every sports broadcast - YouTube
ASUSのコンシューマ向けマザボでU.FLコネクタが乗っていて、外部クロックに同期できる製品があるらしい。
メーカーWebサイトの製品写真にもコネクタは実装されているけど、ユーザーズマニュアルには一切記載がないし、そもそも製品イラストにはU.FLコネクタ自体が描かれていない。サポートされている機能なんだろうか? 将来的には、みたいなことなんだろうか。あるいはかつては使えていたが、なのか。
https://www.jstage.jst.go.jp/article/sicejl1962/17/5/17_5_395/_pdf
1978年。4ビット1チップコントローラとか8ビット1チップコントローラに関して、チップ自体の説明とか、応用の話とか。応用はPOSやテレビ、電子レンジなど。
やっぱりAirspy欲しいなーと思って下調べ中。Mini買いたいと思ってたけど、帯域幅広めのR2も魅力的なんだよなぁ。
試しにDLLをdumpbin /exportで見てみるといくつかの関数が見えるし、ソースコードもあるから、C#で叩くのにも支障ないはず。ただ、airspy_rx.cを見てみると、コールバックの中で構造体を触る必要があるっぽいのがちょっと嫌な感じ。構造体の定義を見てみるとポインタが3個、intとuint64_tとenumが1個ずつだから、C#で定義するのも難しくはなさそうな気がするけど。
あとは、R2やminiは製品としてはかなり古いのと、ファームウェア/ソフトウェアのアップデートが行われていないのがちょっとした懸念点。まあ、それだけ成熟していると考えることもできるが。
今のところ、某代理店でminiが在庫なしになっているので、近いうちに買うのであればR2の一択。買うかどうかはさておき。そのうち衝動買いしそうな気はするけど。
PRN122のPromptの相関値の自乗の平方根
コード・キャリアともにドップラを手動で設定してフリーラン。キャリアの周波数がなぜかステップ状に変化している。他のPRNだとフリーランでも線形だから、この衛星だけの問題だと思う。