2025年6月2日月曜日

陸自駐屯地イベントで撮った変な写真いろいろ

 地元の陸自駐屯地の周年行事に行ってきたので、そこで撮った変な写真をいくつか紹介する。

 今年は70周年で、ブルーインパルスの飛行も計画されていたのだが、最近のあれこれの事情で中止になってしまった。

 隊員の立ち話を聞いていた感じ、今年は例年に比べてかなり人が多かったらしい。個人的には数年前に行ったときと比べてそう多いという印象もなかったが、毎年開催している側からするとやはりコロナ禍で人数が減ったところから増えて来たのは実感としてあるのかも。


 写真はほとんどスマホ(Pixel 6a)で撮影したので、画質悪め。行ったり来たりしながら撮ったので順番もバラバラ。

 基本的に当ブログは画像の下に説明テキストを付けるスタイルだが、本記事では画像の概要を先に書いて、続いて画像、必要に応じて下に補足のテキスト、というスタイル。


 MLRSのコンテナの着脱式の緩衝スキッド



 MRLSコンテナの上についているトゲ、もとい、ロケーターピン? コンテナを重ねて保管するときに位置決めするためのものだと思う。


 釣り上げ用の金具


 マインスイーパーの弾体


 ランチャーレール?の先端部。複雑な機構。


 後端部


 固体燃料が左右2本ずつ、点火器がノズルに突っ込んである。環境維持(固体燃料の防湿とか)用のプラグも点火器が兼ねているのかな。ノズルは適当なキャント角がついている。1本不点火でも、真正面には飛ばずともまっすぐ飛ぶように、みたいな感じなのかな。あるいは単にアンバランスの影響を減らすためだけか。

 クランプバンドは弾体とランチャを拘束するためのものだと思う。バンドはかなり頑丈な見た目だけど、実際にテンションを受けてるのはかなり薄い板材1枚だけ、しかもそれを支えているのはプラスネジ6本程度にしか見えない。締め付けトルクから考えるに、締付用のボルトはM4とかM5とかその程度だろうから(もっと太く見えるけど)、テンションはあまり強くないのかもしれない。バンド自体がゴツいのは荷重の分散かな。鉄パイプだろうし、そんなヤワな物でもないだろうけど。

 バンド上部のボルト(見えているのはナット側)がおそらく分離ボルト。画像では上側のボルトにしかケーブルが出ていないけど、同じ大きさのコネクタが下部にも1個あるから、上下2個の冗長系だと思う。片方しかつけてないということは、今は片方しか使っていないのかもしれないけど。10時方向の大きなコネクタがアンビリカルかな。


 固体燃料前端のラグ

 かなり華奢な雰囲気。たぶんここで推力を受け止めてると思うんだけど。


 ドローンと油圧ショベルのシミュレータのテントの前のパネル

 ドローンはSOTENのやつで、ちょっと触らせてもらったけど、操作と映像のレイテンシが結構大きくて、慣れないと大変。日本企業製だけど、モード2だった。まあ、そりゃそうか。

 個人的にパネルの左下がすごく気になったので聞いてみたら、レーダ衛星を欺瞞するために使うリフレクタとのこと。本来の場所とは違う場所に車両のようなエコーを作ることで、攻撃をそちらにも分散させる、みたいな戦術らしい。さもありなん。ちらっと話しただけなので詳しい話は何も聞けなかったけど、「内輪ノリ」と自虐していたのが印象的だった。金網やアルミホイルでリフレクタを作れば偵察衛星を騙せるってのはあんまり有名な話じゃないだろうしなぁ。/* THE LAST SHIPの中で、敵艦の対艦レーダーを欺瞞するためにアルミホイルでリフレクタを作るシーンがあるけど、描写としてはちょっと間違ってるのよな */

 リフレクタは比較的シンプルな構造(物自体は小学生でも作れる)で、電子戦に対してある程度は有効なアイテムだし、使用が簡単だから教育費用も少ないし、費用対効果は高そうだけど。最近はアルミ蒸着PETフィルムをダンボールに貼り付けた製品もあるらしいし、それを使えばレーダリフレクタも安価に量産できそうだ。段ボールだから折りたたんでおけば荷台の隅にでも収納できるし、断熱性も高いからイザとなれば寝袋に重ねて防寒とかにも使える。アルミ蒸着段ボール、そのうち自衛隊に装備されるかもな。SARの分解能が上がったら車両とリフレクタを容易に見分けられそうではあるけど。


 88式地対艦の予備弾薬車両のキャニスター拘束部

 ナットは12角形状っぽい。航空機とかで特に高信頼のトルク管理が必要な分野でよく使われる形状。ボルトを外したときは外側に倒すから、根本のボルトがヒンジになっていて、それはキャッスルナットに割ピンで緩み止め。

 トルクの数字が見づらいけど、169.7-203.4 N m(1730-2075 kgf cm)、とかいう、いかにもお役所仕事みたいな数字で笑っちゃう。設計当時は125-150 lbf ftだったんだろうな。

 そもそも、このトルク指定ってヒンジ部と上側のナット、どっちなんだろう? 距離で言えばヒンジ側かな。上側は現場で頻繁に締めたり緩めたりするし、いちいちトルクレンチとか使ってられないって話もありそう。

 アイボルトの先端側にも穴がある。ここに割りピンを入れればナットが脱落することはないし、クリアランスも十分にあるっぽいから、ナットを完全に外しきらずにアイボルトを外側に倒したりできそう。ただ、ここに割りピンを入れたら正規のソケットが使えないような気がする。針金で縛ったりすれば問題ないだろうけど。


 キャニスター側のヒンジ

 同じ締め付けトルクが指定されている。やっぱりヒンジ部のトルクかな。割ピンが入っているけど、キャッスルナットではない。こっちは規定トルクでしっかり締め付けて、緩んだとしても脱落しないように割りピンを入れているのかな。


 ミニミの珍しい形態(おそらく)

 89式の20発弾倉が入るのか聞いたら入れてくれた。とはいえ、2人いた隊員のうち、一人は入ること自体知らず、もう一人も入ることは知っていたがその状態で撃っているのは見たことがないと言っていた。


 89式のブルーガン

 うーん、見たことあるロゴ。とはいえ、おそらくブルーガンを作ったのは別メーカーで、エアソフトから形を取っただけだと思うんだけど。


 駐車場に通じる道はアスファルト舗装で、装軌車両は進入禁止。

 奥では戦車の後ろにつけたカゴに乗る体験をやっている。土埃がすごい(これでもおとなしい方)。


 コンクリで舗装した道路


 端を除いて装軌車両でガリガリ削られて、骨材の砂利まで削れて平坦になってる。肉眼で見ると色々な色や大きさのドット柄がカラフルで綺麗。意図的に作ろうとすると表面を削らなきゃいけないから大変だろうけど、装飾のデザインとしては良さそう。


 戦車砲の先端。どっちだったかな。画像検索した感じ90式っぽい

 滑腔砲のはずなのにライフリングが!! いや、ただの傷だろうけど。

 太い方のボルトは割ピンで固定して、細い方のボルトはロックワイヤで固定している。

 ロックワイヤはめちゃくちゃ細いな。引っ張ったら切れそう。ボルトが緩まないように固定するためのものではなくて、緩んだボルトが脱落しないようにするための、陸上用っぽい思想な気がする。まあ、陸上装備品なので当たり前といえば当たり前だけど。

 それにしても、こんな小さな部品を固定するだけなのに太いボルトを5本も並べてあってすごい。戦車砲の発射の衝撃は凄まじいんだろうな。わずかなズレすら許容できないデバイスだし、とにかく頑丈に固定したいんだろうけど。


 90式の駆動輪

 駆動軸とホイールを固定するナットはセルフロックナットを使用している。スプロケットを固定するのは通常のワッシャとナットの組み合わせ。よく見るとセルフロックナットのボルト側にメーカーロゴとか型番らしい数字が入っている。

 スカートめくれ防止のピンが1本無い。


 10式の駆動輪

 こちらも同様にセルフロックナットと通常のナットの組み合わせ。ボルトのメーカーロゴは無し。

 90式と10式の履帯だけ見ると、90式は履帯とスプロケットがツライチで、スプロケットの内側で履帯のコマを接続しているが、10式はスプロケットの外側でコマを接続している。

 履帯だけ見ても10式と90式は見分けられる。湿った土とかで条件が良ければ、走行の跡が少し残っているだけでもどの種類が通ったのかわかりそう。


 90式の転輪

 軸の真ん中に赤く見えているのは、潤滑油の色。小さな窓があって、液面が把握できるようになっている。

 赤いオイルはATFと呼ばれるやつかな? ATFは色が変わったら交換のタイミングだそうで、窓は液面の把握だけでなく交換時期の把握にも役に立つのかも。/* アメリカの乗り物系YouTuberが湿式エアフィルタに赤いATFを染み込ませながらジョークを言ってたな(アメリカには別の有名なATFがあるので) */


 スカートで見づらいけど、スリットから覗いた10式の転輪の軸部分

 窓が省略されて、90式のように転輪1個ずつ液面を管理する必要がなくなっている。90式に比べて整備性がだいぶ良さそう。個別で管理すると1箇所液漏れしても他の場所には影響がない利点もあるけど、平時の運用コストがな。。。


 96式多目的誘導弾の起立用油圧ロッド

 断面が円形以外の油圧ロッドって初めて見た。おそらく円形の外側を四角形に切り落とした形状だと思うんだけど。シールの部品交換とかで汎用品が使えないから大変そう。それともこういう形状でも汎用品が売ってるんだろうか?


 75式ドーザの履帯

 ここもセルフロックナット。



 写真を眺めてると、ここの写真撮ればよかったとか別の向きから撮ればよかったとか色々後悔あるんだよなー。次機会があったら躊躇せず撮りまくろう。

2025年5月28日水曜日

小ネタ





 ギアとベアリングの一体化で機械部品に新たな進化を、ジェイテクトの「JIGB」:人とくるまのテクノロジー展2025 - MONOist

 片側だけ一体化しているけど、将来的に両方とも一体化するような感じになるんだろうか? 組み立てかなり面倒くさくなりそうだけど。それとも長周期の収縮みたいな成分をベアリングの部分で分離できるから一体化はできないのかな。



 HAC、衛星使う新着陸方式「LPV」運用開始 国内初、悪天候時の就航率向上

 2022年9月14日

 HACによると、奥尻空港の滑走路に西北西側(RWY13)から進入する場合、従来の方式では視界不良時に滑走路が視認できない際に対地高度380フィート(約116メートル)までしか進入できなかったが、LPV進入であれば約30%低い257フィート(78メートル)まで進入できる。

(中略)

 2025年以降はSBASの配信サービスを提供する準天頂衛星「みちびき」の運用機数が増えることで、「LPV200」と呼ばれる200フィートまで進入できるモードの実用化が見込まれており、ILSの「CAT I(カテゴリーI)」相当の運用が可能になる。

 MSASが1機だと制限がつくのはSBAS衛星の故障を許容するためのものだと思うけど、2機に増えてもILS CAT I相当までしか使えないんだな。固定の電波をゴリゴリ出しておくだけでいいILSのロバスト性すごい。微弱なCDMAをコヒーレント積分して浮かせて相互にナノ秒精度で比較して連立方程式を解いて各種補正情報を加算しなきゃいけないGPSの複雑なことよ。まあ、わざわざ何百億もかけて静止衛星を複数機打上げてILS相当のシステムを作ろうとしてるんだから、ILSもちゃんと信頼性を維持して長期間稼働させようとするとめちゃくちゃコストかかるんだろうけど。



 親が普段使いしている安物のアナログクォーツが、風防の水滴が目立つようになってきたとのことで、分解。裏蓋はかなり硬かったので、ナイフを突っ込んでガシガシやって開けた。べつに仕事でやるわけじゃないしね。多少の傷は気にしない。

 ムーブメントの小さいことよ。ムーブメント自体はJAPAN S.EPSON CORP. NO JEWELS 1 Y121という表記。セイコーエプソン製のY121というモジュールで、宝石無し。

 裏蓋にはパッキンがついているけど、竜頭の部分はスカスカな感じ。パッキン入れ忘れの不良個体? 実は入っているのかもしれないけど。汚れのつき方からしても、竜頭の穴から水分が入った感じっぽい気がする。

 とりあえずシリカゲルと一緒にジップロックに一晩入れて、風防の水滴も消えたので、そのまま蓋を閉じて返却。


 この腕時計自体は日本の会社のブランドらしい。一つの会社でウォッチとクロック合わせて12のブランドを持ってるんだそうだ。

 Y121はぐぐると大量に出てくるから、セイコーが小さいムーブメントを大量生産して売って、小さい時計メーカーは量産されたムーブメントを買ってきて、フレームやバンドだけ自分で作って(orさらに買ってきた部品で)オリジナルの時計を売ってるんだろう。



 久しぶりにCorsair iCUEを開いたら、「サービス開始に失敗しまいた」という微妙に残念なメッセージが表示されて、ダッシュボードが開けなかった。Corsair関係のサービスが停止していたけど、タスクマネージャーからは起動できず。インストールされているアプリの一覧からiCUEの変更で修復しても改善せず。一旦アンインストールしてから再インストールしたら無事ダッシュボードを開けるようになった。/* iCUE、相変わらずサポート欄には「不一致」があるな */

 ダッシュボードを開いたら急にファンの音が大きくなった。温度に応じたフィードバックはPCアプリケーションレベルで実施しているらしいな。低い値でフィードバックが止まると冷却能力が不足した状態で停止する。



 時々部屋の中にスズメバチが入っている。どこかに巣があるはずなんだけど、家の周りを歩いても極端にスズメバチが多いような場所も見当たらない。ここ数日は急に寒くなってあんまり飛んでないけど。



 2015年に買ったICOMの特小トランシーバ、アンテナ部の樹脂モールドがボロボロに割れて中の金属がむき出しになってるんだけど、樹脂って10年でこんなにボロボロになる物なの? アマチュアとかデジ簡だとアンテナ交換ができるけど、特小は原則としてアンテナ交換は不可だからなぁ。このモデルは同じ本体でアンテナサイズの違う2機種がラインナップされていて、アンテナ自体はY字ネジ1本で固定してあるだけだから、交換部品さえあれば簡単に交換できるんだけど、買えるものでも無いだろうし。



 ちょーっと特殊な機材を買いたいなーと思っていて下調べに軽くググってたら、別のモデルを買った人のブログを見つけて、曰く代理店に在庫があるらしいからショップに行って実際に触らせてもらった、とか書いてあって。田舎住みだと一か八かで通販で買わなきゃいけないところを、関東圏が行動範囲に入っている人は実際に触って判断できるの羨ましいなー。

 札幌の某家電量販店も売り場面積半分くらいになって店員も減ってて、気軽に手にとって確かめるような場所じゃなくなったんだよなー。特殊な機材ならともかく、普段使いする家電ですら触ってから買うのが難しい北海道。さすがに誰でも買いそうな商品は店頭販売しているけど、とはいえそんなものは店頭で確認しなくたって必要なら買うだろ、というものもあるし。



 Add additional Airspy R2 sampling rates. · AlexandreRouma/SDRPlusPlus · Discussion #335 · GitHub

Q.「Airspy R2では2.5Mspsと10Mspsが選択できるけど、それ以外のサンプリングレートはどうやったら設定できるの?」

A.「できない。あきらめろ(意訳)」

 そっかぁ……

 RTL2832Uも28.8Mspsでサンプリングして必要なサンプリングレートまでデシメーションしているわけだから、Airspy R2等も必要なら各自デシメーションしてねってことなんだろうけど。というかそもそも大抵の変調方式ってサンプリングレートにそこまで敏感じゃないだろうしな。地デジを始めとしたOFDMだとサンプリングレートが指定されているけど、そういうのは変調方式の中でもごく一部だろうし。

 10Mspsから8.126984Mspsを得るには結構複雑なサンプリングレート変換が必要になる。一番シンプルに変換すると、10Msps x 256 / 315 = 8.126984Mspsだけど、2.56Gspsを経由するから計算コストがアホみたいに高い。ステージを増やして変換すれば最大spsは減らせるけど、とはいえ処理が増える。R2でフルセグを受信するのは大変そう。


 Airspy R2ってSi5351CとかRTCとか、色々乗ってるはずなのに、APIからはそれらがほとんど見えないのが謎なんだよなー。

 一応airspy_si5351c_writeみたいな関数はあるけど、それを使って何ができるのかはよくわからない。ダウンコンバート用のLOはR820T2のPLLを使うはずだから、Si5351CはRF周りとは独立して、おそらくLPC4370のADC駆動用を意図して乗せているはずなんだけど、サンプリングレートを設定することはできない。

 RTCも、for packet time-stampingと書いてあるけど、それを使う方法がわからない。airspy_start_rxに渡すコールバック関数の引数で得られる構造体には、タイムスタンプみたいなデータは入っていないし、RTCに時刻を設定したりする関数も見当たらない。

 当初の計画では将来的なファームウェアアップデートで可変サンプリングレートとかタイムスタンピングに対応する予定だったのかも。ただ、思ったよりも販売数が伸び悩んだので、ベーシックな処理に対応した初期のファームから変更されず……みたいな。さすがに「各自LPCのファームウェアを書いてね」みたいな無責任な話ではないと思うんだけど、現状ではそうでもしないと使えないはず。じゃあ自由度の高いサンプリングレート(Si5351C要求?)やタイムスタンピングを諦めるならAirspy Miniでも良いのか、というと、帯域幅がR2の10MHzに対して、Miniは6MHzまで(エイリアスフリーは9MHzと5MHz)だから、性能的にも若干ミニという。

 R2のRTCは、基板上に乗っているわけではなさそうだから、おそらくLPCに内蔵したもののはず。だったら同じLPC4370を乗せたMiniだってRTCを内蔵しているはずだし、そもそもR2もMiniもR820T+LPC4370という同じ構成なんだから、Miniだって9MHzまで見えたっていいはず。MiniはR2に比べてR820T周りに実装してある部品の数が明らかに少ないから、そのあたりで特性の違いが出ているのかもしれないけど。

 Miniの解説記事によると、5351が乗っていないことでADCの設定の自由度が低い(少なくとも発売当時は低かった)らしいから、R2のADCが5351に依存していることは間違いない。ということは、airspy_si5351c_writeでPLLの設定を書き換えれば、好きなサンプリングレートを設定できるという可能性はありそう? 今度はIFの帯域幅が問題になるけど、それはairspy_r820t_writeで自分で帯域幅を狭めればいいわけで。とはいえ、5351はある程度の計算をすれば素直にレジスタを設定すればいいだけのはずだけど、820の帯域幅ってどうやって設定するんだろうか。一応rtl-sdr.comにR820T2のレジスタ一覧は公開されているし、あるいは何らかのOSSを見ればそのあたりのコードもあるんだろうけど。

 R2で、R820TとSi5351のレジスタ叩いて帯域幅/サンプリングレートを自由に設定できるのであれば、かなり良さそうだよなー。さらに言えば外部クロックとかPPS入出力(フレームに同期したパルスの出力、パルスに同期したフレームの開始点、とか)があればさらに便利なんだけど。5351CはXTALとCLKINを選択できるから、おそらく5351のレジスタを叩けば外部クロックに同期できるはず。CSACとかHMとか、そこまでいかなくてもOCXOとかMEMSとか、確度の高い発振器とか、あるいはSDR受信機に内蔵したTCXO(温度環境厳しめ)ではなく、もう少し安定した温度環境に置いたTCXOをソースにするということもできるし。

 R2をGPSクロックにスレーブさせて使う、みたいな使用例はちらほら出てくるから、もしかしたらクロック入力端子に10MHzを入れれば、自動的に選択されるのかもしれないけど。CLKINにクロックが検出されればそれを使用して、検出されなければXTALを使う、みたいな設定なのかな。

 Si5351のクロックをADCのトリガにしていて、完全にイベントドリブンで駆動して、DMA転送バッファがフルになった時点でUSB転送をトリガする、みたいな挙動になっていれば、外部からADCサンプリングレートを変えても問題ないだろうけど、実際にはADCのサンプリングレートを10Mspsとかに決め打ちして、周辺の動作もそれに応じた挙動にしている気もする。とすると、API(DLL)経由でレジスタを叩いたところで意味はないはず。どういう実装になっているかは実際に試してみないとわからないけど。ファームウェアのソースを読めばわかるだろ、という話ではあるけど、さすがにやりたくないというか、なんというか。

 MiniやR2を買わない理由を探して買わずに済むようにしたいのに、現物を確認しないと除外できない項目が出てきて、結局買わざるを得ない流れになっている気がする。もっと普及した製品なら、軽くググればレジスタを叩いてる人も見つかるんだろうけど、そこまで普及しているわけでもなく。というかそこまで普及していればオフィシャルに対応してくれたんだろうけど。人柱になるべき? 10年も前に発売された製品の??



 rtl_tcpからIQを受信して、IQの絶対値が閾値を超えたら、その前後を含めてWAVに保存する、キャリアスケルチみたいな機能を試しに実装中。

 場当たり的に実装しているので機能を追加する事に無理が出てくる。まっさらなところから作り直すべきかも。

 とりあえず、信号が入ったときだけ保存する機能は動きそうな気配なので、信号の頻度が低い帯域を連続的に記録するよりは、記録メディアに優しい。はず。実環境での動作確認ができてないんだよなー。とりあえず特小をOOKで出してそれっぽく動いているのは確認できるけど、実際の電波信号で良さそうなものが無い。

 433あたりっていつでも違法無線がいるイメージだったけど、最近は減った? 433MHz2.4Mspsでスペクトルを表示していてもほとんど動きがない。



 C#でループ内の任意の場所でbreak/continueを使えるような機能がほしいんだよなー。例えばvar bar=foo switch{0=>'A',1=>'B',_=>break};とか、var foo=flag1?1:flag2?2:continue;とか。現状だとif...elseで分岐するかswitchで分けるかしか無くて、ちょっとめんどい。switch文だとループを抜けることを目的としたbreakは不可能だし。三項演算子とかswitch式でbreak/continueが使えれば便利だと思うんだけどなー。

 breakが任意の場所で使えるようになった場合、邪悪な使い方だと、StreamReader sr;StreamWriter sw;があったとして、while(true){sw.WriteLine(sr.ReadLine()??break);}みたいに書いて、null合体演算子でsr.ReadLine()の戻り値を評価して、第2オペランド(break)が評価されたらループを抜ける、みたいな応用もあり得る。breakは戻り値の型が違うけど、??throw new Exception()が許されるならbreak/continueも許されそうな気もする。今のところはwhile(true){var line=sr.ReadLine();if(line is null){break;}sw.WriteLine(line);}とかstring?line;while((line=sr.ReadLine())is not null){sw.WriteLine(line);}とか、変数を1個噛まさなきゃいけない。

 最近のC#はwhile(!sr.EndOfStream){NotNullableFunc(sr.ReadLine());}みたいにすると警告が出るのが、しょうがないとはいえ、使いづらいのよなぁ。


 T[]に対してAsSpan(range)があるのにSpan<T>に対してSlice(range)が無いのが地味に不便。Span<T>spanに対してspan[range]すればいいって話なんだろうけど、T[]arrayに対してarray[range]しちゃう怖さがある。


2025年5月21日水曜日

小ネタ


 Why We're Building the HX50 the Way We Are - YouTube

 単発航空機は、1978年にはアメリカのメーカーだけで1年に1万8千機弱を製造していた。セスナ172は現在の価値で8万ドル。当時はアメリカ人の平均年収の1.3倍の価格だった。現代は当時よりも比較的裕福な社会にもかかわらず、平均年収の6倍の値段になっている。既存の航空会社は古い機体を以前よりも高い値段で販売し、市場が縮小していっている。

 可能な限り既存の技術を使用して低価格化する。ただし市販の部品(ジェットエンジンとか)を購入すると非常にコストがかかるから、可能な限り内製化する。複雑な製品は作らず、なるべくシンプルに。

 現在販売されている航空機が設計された1960年代から1980年代にはコンピューターを全面的に使用した作業はしていない。現在では容易に有限要素法解析や流体シミュレーションができるから、効率的に開発ができる。

 なんかロケットベンチャーに近い雰囲気を感じるな。大昔に開発されて特許が切れたような技術を再利用して、ソフトウェアで制御できるところはハードウェアを廃して、最適化しながらシンプルに安く作る。

 すでに1400機の販売が契約されているらしい。そんなに売れてるのか。今契約して受け取れるのは何年先になるんだか。1週間に1機作ったとして28年、休み無く1日に1機作ったとしても4年近くかかる(現在開発中だからさらに先になる)。セスナ172が70年近くで4.4万機以上、R44が35年で7000機弱の販売だから、魅力があればそれくらいの数は売れるんだろうけど、しかしすごいな。



 15年間の小型ソーラー電力セイル実証機「IKAROS」運用の終了 | 宇宙科学研究所

 むしろ10年も探してたんだな。どんな運用やってたんだろう? 地上局のスキマ時間にコマンド打ってスペクトル積分して、みたいな処理を走らせてたんだろうか。最近はP-CやHay2のダウンリンクに使ったりで深宇宙局も忙しそうだが。ここ5年位は運用の報告書みたいなやつも出てこないし、ちゃんとした(対外的に報告を行う必要があるような規模の、あるいは報告を行うだけの余裕のある)運用は行っていないんだろうけど。



 北海道上富良野町公式(行政)ホームページ|上富良野駐屯地創立70周年記念行事のお知らせ

「(前略)航空自衛隊のブルーインパルによる飛行展示が予定されています」

 地元に来るー!と喜んでいたら。。。



 Fr24のカバレッジマップみたいなものってないのかな。あるエリアに予想できるフィード数と、実際に報告されたフィード数の比みたいな図。それがあれば受信機を追加すべき理想的な場所とか、次善の策として指向性アンテナで受信する方向とかの判断に使いやすそうだが。



https://www.data.jma.go.jp/mscweb/technotes/msctechrep40-4.pdf

 気象庁の時刻・周波数標準の設備。2002年に、短波JJYの廃止に合わせて更新した際のもの。Csを基準に複数の周波数や時刻を出力して、各種機器の時刻同期や気象衛星の通信設備のアップ/ダウンコンバータへ供給する。

 IRIGのフォーマットや原子時計の原理、精度や確度の考え方とか、色々説明している。

 1,5,10MHzや、コンバータ用の中途半端な周波数が6種類とか。オシロで監視したり、ペンレコーダで記録したり。いろいろと複雑。



https://www.data.jma.go.jp/mscweb/technotes/msctechrep57-1.pdf

 2012年。気象庁の周波数標準設備の話。2010年に更新したシステムの紹介。

 クロックをRbへ変更し、GPSを追加。時刻や周波数の出力もだいぶ整理したらしい。とはいえ、周波数系と時刻系が独立していて、まだだいぶ複雑な感じ。

 クロックはRbから1MHzと10MHzを作って、周波数基準用としてはそれを出力。アップ/ダウンコンバータ用の中途半端な周波数は10MHzから合成。Rbの基準はGPSから得る。

 時刻はIRIGタイムコードとNTPの2系統があって、IRIG系はJJYから、NTPはGPSから得ている(時刻のGPSと周波数のGPSは独立)。

 周波数とIRIGはホットスタンバイの2重系なのにNTPは1系統しかないのが謎い。局内のPCの同期に使う程度であって、NTPサーバーが故障した場合は外部(例えばNICTとか)に取りに行く、みたいな考え方なのかな?


***


 L1 C/Aのビット列をログっていた時に体感できる地震があった。ので、PRN189(QZS-3)のDC Reportをデコードしてみたんだけど、HypocenterとSeismic Intensityだけで、Earthquake Early Warningは見当たらない。地震の規模とかによるのかな?



 SBAS Ionospheric Grid Point Masks

 バンド0-8は左下から上に向かって、1列ずつ東にずれていく。バンド9,10は赤道側左端から右に向かって、1行ずつ極にずれていく。おそらくこういう配置だと思うけど、正しいのかはわからん。ググって出てくる画像とは様相が違うのが怖い。

 アルゴリズム的にテーブルを作ろうとすると、バンド0-7で緯度85度に1箇所ずつ追加しなきゃいけないのが面倒。とはいえ、全部で2192点(バンド9,10は一部が他のバンドへ重複)あるから手動でテーブルを作ったりするのは大変そう。


 いくつかの衛星から受信したIGPのリスト。ただし3分間に受信したリストだから、他にも出ている可能性もある。

 ↑PRN128 GAGAN

 ↑PRN130 BDSBAS

 ↑PRN137 MSAS

 ↑PRN142 Unallocated (KASS?)

 概ね妥当な結果な気がする。とはいえ、かなり範囲が広いのがちょっと謎い。どうやって補正値を得ているんだろう? 



 IS-QZZ-PNT-006p53の、AlmanacのSV healthの、1st to 3rd bit (MSB)がL1C/A or L1C/Bになっているの、どういうエンコードなんだろう? 3bitの中で1bitでも立っていたらL1C/AとL1C/Bのどちらか(排他的に使用)が正しくない、とか?

 QZSのHealthは色々謎いな。



 Explanation for the GPS “special message” field - Geographic Information Systems Stack Exchange

 GPSのSpecial Message(ページ17、SV55)の用途に関して。まあ、何もわからないということがわかりました、という感じではあるけど。暗号化鍵(Wコード)の更新に使うのでは、みたいなウワサも。

 確かに定期的にデポに持ち込んで鍵を受け取るよりはOTAで配送するほうが楽だろうけど、とはいえ平文で飛ばすかな? Wコードの生成鍵をP(Y)で飛ばすと長期間電源OFFの受信機を再使用するときに困るというのはそうだけど、とはいえ。Wコードの生成鍵の短周期成分はC/AコードのOTAで飛ばして、長周期成分は受信機のRAMに入れておいて、セキュア情報を削除しなきゃいけないときはRAMをクリアすれば短周期成分をOTAで受信しても意味がない、みたいな感じの運用になっているのかな?


 QZSSの場合、Special Messageは各衛星のブロック番号の放送に使うことがあるらしい(GPSはSv63、A-S Flagsのビット列でGPSの世代をおおよそ推定できるらしい)。



 セキュアなPNTを想定したシステムで、L5について「国際的に保護された帯域(ARNS)だから信頼性が高い」みたいな説明があるけど、それってどうなんだろう? L1もARNS帯域では? 悪意を持って妨害するやつはそもそも非合法とか違法とか気にしないんだから、いくら法的に保護したところで無意味だと思うが。法的に保護しているから悪意のない電波を取り締まることが容易、みたいな話なら、L1もそうしろよということになるし。L5は拡散符号が高レートだとかの違いはあるにしても。


***


 JavaScriptベースでGPS L1 C/Aメッセージ(LNAV, SBAS, L1S)のデコーダを作ってる。デバッグ用にあると便利かな、と思って(あっても良さそうだけど、ググっても見当たらなかった)。

 とりあえず、テキストボックスにHEXを突っ込んだら全部デコードして、オプションでPRNを追加すればQZSSの変更部分もある程度処理してくれる。


 フィルタはPRNやメッセージ種類を選択できる

 とりあえず手元にデータ&仕様書がある範囲だけ実装。


 DCXは結構高い頻度で放送されているけど、全部テストメッセージ(ゼロ埋め)で、中身は何も無い。まあ、少なくとも「生命または財産に対する脅威の可能性」以上の警報を放送するシステムだから、中身が無いのは良い知らせってことなんだろうけど。


 SBASは1秒に1個のメッセージが送られてくるから、一つの衛星(例えば条件によって常時可視を期待できるPRN189とか)に絞っても、1日あたり9万個近いメッセージが送られてくる。全部を記録して、特定のメッセージ(MT43だけとか)を表示しようにも、読み込むだけでも大変そう。やはりWebブラウザはWebブラウザということなんだろう。

 WebブラウザでないJSエンジンを使えば高速に処理できるんだろうけど、それならC#で書いたほうが(個人的に)楽だろうし。Webブラウザは<sup>とか<sub>で数学的な表記がやりやすいのが便利ではあるのだが。



 しかし、JS使うの久しぶりだな。8年ぶりとか? うわーぉ。そんなに前か。

 JavaScriptで書いてるから、ブログのHTMLエディタに貼り付ければそのまま走ると思うけど、とはいえ5千行くらいあるからなぁ。UI周りは流石にデカくて、これだけで2千行くらいある。SLASデコーダも2千行くらいあるけど、これは市町村のテーブル(1800地域程度)がデカいだけで、デコーダ自体はそれほどのものではない。ちなみにこの市町村テーブルは火山/降灰に使うだけで、地震とか気象には使われない。

 まだ色々気になるバグもあるし、そのうち安定したら公開するかも。あるいはその前に飽きるか。



 ローカルファイルのページを再読込せずにURLパラメータを書き換える方法を探しているんだけど、見当たらない。ローカルファイルを読んだ場合、historyはセキュリティポリシーで使用禁止。location系に書き込むと再読込する。なんかいい方法ないものか。ググってもhistory系の操作しか出てこない。

 URLを再読込せずに表示だけ変えるのは別のWebサイトに偽装できるからセキュリティ的に危険、というのはわかるけど、せめてURLパラメータくらい好き勝手に書き換えさせろや、という気がするんだけど、URLパラメータを書き換えることで発生する危険性って何があるんだろう?


 配列の初期化で[1:"a",3:"b"]みたいに書いたら長さ4で0と2はundefinedが入ってる感じに初期化するような仕様があっても良さそうなのに、そういう挙動にはなっていないらしい。


 オブジェクトのキーがobj.abcとobj["abc"]を区別しないの、面白いな。同じような値が連番で入っているときに、obj.value1, obj.value2, obj.value3みたいにアクセスもできるし、for(let i=1;i<=3;i++){obj[`value${i}'];}みたいにforで舐めることもできる。C#でいうDictionary<string,object>みたいな感じだから当たり前といえば当たり前とはいえ。


 return\n123みたいなテキスト、要するにreturnの直後で改行してその後に戻り値を指定した場合、戻り値が返らないのが謎い。return文の中で三項演算子とかちょっと長めの文を書きたいときに、returnの直後で改行すると、バグる。JavaScriptは1文をセミコロンで終端する必要がないし、戻り値の形(少なくとも有無)も宣言する必要がないから、戻り値の有無の解析は面倒そうだけど、とはいえ。

 Webブラウザにデバッガがない時代に、コードの途中にreturnを挟んでそこまで正常に走るかどうかを見たい、みたいなときに、returnの次の文の結果が返るのが不便だった、みたいなことなんだろうか? それくらいセミコロンで終端しろよ、とも思うけど。それとも単に構文解析の都合の問題なんだろうか。


 C#でちょっとした情報出力がほしい場合、Debug.WriteLine((hoge.a,fuga.b));みたいにタプルにすればいくつかの変数をまとめて出力できるけど、JavaScriptでconsole.Log({hoge.a, fuga.b})みたいな文法は許可されていないはずで、console.log({a:hoge.a,b:fuga.b})みたいに書かなきゃいけないのがちょっと冗長な感じ。

 


 チェックボックスの indeterminate 状態は将来多分なくなる - feb19

 うーん…… マーケティング的にダークパターンで使いやすいから廃止すべき、みたいな理由っぽい。

 とはいえ、3ステートのチェックボックスはいろいろ使いやすいし、無かったら必要な人は画像で作るだろうし、悪用したいやつだって画像で作るだろうし。どうせ車輪の再発明を全員でやるくらいなら残したほうが便利だと思うんだけど。

 むしろ「すべて選択」ボタンを表示するほうがダークパターンっぽい気がする。ネスト/3ステートCheckboxならチェックボックスを押して全選択/全解除ができるけど、「すべて選択」ボタンは一旦全選択すると全解除ができない。そうするとCheckboxを全部ポチポチして解除する必要があるから、手間がかかる。興味の対象を選ぶUIで全選択ボタンを誤タップさせて全部選択した状態で、解除するのが面倒でそのまま申請したら大量の広告が届く、みたいなシステムが作れる。


2025年5月14日水曜日

小ネタ


 航空大のCirrus SR22。

 久しぶりにK-5を使ったらメインスクリーンのバックライトにフリッカーが出てるし、カードのアクセスも調子悪い(カードのアクセスが悪いのは前からの気もするけど)。2012年の3月かそのあたりに買ったカメラなので、13年以上使ってるのか。ここ数年はほとんど使ってないけど、それまではだいぶ酷使してたからなぁ。防水なのをいいことに土砂降りの中で使って水道水で丸洗いしたこともあったし。およそ精密光学機器とは思えぬ取り扱いをしてきた。

 ミラーレスも1台持っていて、軽いので持ち歩くには便利だけど、起動が遅いし、待機電力も大きいので、持ち歩いて楽しいかというとちょっと微妙なんだよなー。K-5は電源OFFでもファインダーを覗けば被写体が見えるし、電源ONで起動待ち無しに直ちに撮影できるし、そもそも電源ONで放置したって待機電力は全く問題ないし、持ち歩いてて楽しいカメラだった。

 ここ数年はカメラを持って出歩くこともほとんど無くなっちゃったなぁ。




 SR Series G7+ featuring Safe Return™ Emergency Autoland - Explainer - YouTube

 緊急(パイロットの急病とか)の際に自動着陸するシステム。

 アクティベートした際にはMFDに乗客向けの情報が各種言語で表示されるけど、その中には日本語も含まれているから、メーカー(Cirrus or GARMIN)としては日本にも売り込む気はあるんだろう。日本で使えるかどうかはさておき。まあ、FAAが認可してるならそのうち日本でも使えるやろ…… あるいは、単に米国とか特定の地域で、観光で来た各国の乗客を想定しているだけかもしれないけど。

 パイロットや乗客が手動(ボタン操作)で起動する以外にも、複数回の安定性アシスト(空間識失調等を想定)や、高すぎる飛行高度(低酸素症で判断能力を失った状態を想定)で自動的にONになる機能もあるらしい。

 もう少し発展させればAuto-GCAS的な機能も載せられそうだけど、少なくともSafe Return機能には入っていなさそう。とはいえ、もちろんSafe Returnによる自動操縦では地形を回避する機能は入っているけど。

 着陸進入では上空待機のトラフィックパターンっぽい表示もあるから、7700を出して脇目も振らず滑走路に突っ込んでいくわけじゃなく、ちゃんとATCに従って許可を得たうえで進入するんだろう。ということは何らかのデータリンクでATCと通信できるんだろうな。データリンクがあるなら航空機が自動で選んだ滑走路以外にも、外部のATCから指示された滑走路へ進入するとかもできるんだろうか。それとも、データリンクなんぞ全く整備されていないような場末の空港にも進入できるように、あまり外部には依存しないようになっているのか。


 空飛ぶクルマが実用化されれば自動操縦は巡航だけでなく離着陸も含めてフルタイム・フルオーソリティで動作するし、ATCだってデータリンクを使うだろうし、自動着陸というのはそのうち実用化される機能なんだろうな。Cirrusが一歩早く売り始めたというだけであって。やっぱり既存の機体を持っているCirrusや既存のアビオ系があるGARMINが一歩先を行っている。

 日本でも空飛ぶクルマはそれなりに力を入れて導入しようとしているはずだし、データリンクを始めとして航空機(数人乗りの小型機含め)の高機能化は避けて通れないし、そのうち日本でもSafe Return付きの機体も飛ぶようになるんだろう。

 あるいは、電子フライトバッグみたいに各種情報がデータ化されたり、航空機が自身のステータスを把握できるようにセンサが統合されていくと、人間のポカミスを防ぐようなシステムも作れるだろうし。脚やフラップの出し忘れ、燃料管理のミス、といったことで発生する事故は、完全自動化した飛行機以外にも、小型の固定翼機みたいな分野でも利点は大きいんだろうな。ただ、そういうシステムは概して導入コストが高いから、個人オーナーへ普及するには半世紀くらいかかるんだろうけど。飛行時間が短い個人オーナーほど知能化した航空機でポカミスを防ぐべきなんだけど、運用時間が短いせいでコスパが悪いから高額な機器にリプレイスできないというアレ。


 旅客機で自動着陸は実用化されているのに自動離陸が禁止されている理由を、乗客数などによって条件が毎回異なるから、と説明している記事があるけど、それって嘘じゃね? じゃあ何かね、自動着陸するときは一定以上の乗客や荷物は上空で捨てるとか、乗客が足りないときは着陸前に空中で補給するとでも言うのかね? そんなわけ無いだろう。離陸するときだって乗客数や荷物の重さはFMSに入力して離陸速度を決めてるんだから、システムがそれを知らないわけがない。

 あるいは、離陸するときは周りの航空機に注意をする必要があるから、みたいなことも書いてあるけど、じゃあ着陸時は周りを見ずに着陸していいのか、という話だし。

 自動着陸はILSに従って進入できるけど、離陸時はILS信号が受信できないから信頼できる位置情報が得られないし、オンボードの位置推定(INS)は信頼性が悪いから、みたいなことなんじゃないかな? SBASやGBASで離着陸時にGPSが使えるようになれば、自動離陸もそれで対応できそう。



「はやぶさ2」異常原因は姿勢制御装置の停止。姿勢立て直しエンジン再稼働へ | TECH+(テックプラス)

 JAXAの情報公開はX(旧Twitter)でしかされないし、それを報道するニュースサイトは最初の1行以外は会員しか読めないし。情報化社会が進むと情報を得るのが難しくなるなぁ。アカウントの2,3個くらい四の五の言わず作れって話だけど。

 TECH+は広告を超えてスクロールすると外部リンクがあるのが救いではあるが。



 INET2001 Paper: Advanced NTP Synchronization Device

 2001年。CRL等で試作したCs原子時計ベースのLinux PC。マザボの水晶(4fsc)を外して、HP5070Aから供給した10MHzをPLL経由で入力して、PCで高い時刻精度を得る。


https://jjy.nict.go.jp/tsp/research/labo3/xoreplace.html

 2007年。マザボの4fscの代わりに外部10MHzを供給するためのボード、とのこと。PCIカードに電源がFD用コネクタってあたりが時代よなぁ。ボード上にトリマ付きの10MHzTCXOも乗っているから、外部クロックが切れてもPCは動き続けるんだろう。もちろんCsに比べられるような精度ではないとはいえ。

 ボード上に高周波を通せるようなコネクタが見当たらないのが謎い。PCIバス経由でクロックを供給できるわけではないと思うんだが。それともピンヘッダで15MHzを出してるんだろうか?



 三技協サービスサイト | 光無線|三技協|The Optimization Company

 光無線通信の歴史から最近の高速通信の説明までいろいろ書いてある。所々誤字ったりしてるけど、企業の技術記事だし、御愛嬌ということで。

 この会社の製品ではLEDをOFDM変調して、300mで200Mbps弱、50mで600Mbps超を通せるんだそうだ。8P8Cを挿してEthernet(100M, 1G)を光で中継するので、自由空間で通信できるメディアコンバータみたいな感じで使えるらしい。



https://www.jstage.jst.go.jp/article/ieejeiss/133/2/133_268/_pdf

 2013年。照明用のLED素子を受信素子としても使用して双方向で通信できるような方式の提案。高演色性を得るためにRGBを個別に制御できる照明を想定していて、起電力の大きな赤色LEDを受光素子として使用する。また、受光時は応答速度を得るために逆バイアスを与える。チラツキを抑えるためにフレーム長は4.5ms秒(逆バイアス用の回路切替で追加0.5ms)で、1フレームはプリアンブル10bit+ペイロード32bitで構成。フレームを最大限並べれば6.4kbpsだけど、その間に少なくとも60Hz程度で照明としての発光区間を与える必要があるし、誤り訂正とかを含めると、実際のデータレートはせいぜい100byte/sec程度かな。

 基本的には照明側から大容量のデータを送るのがメインで、逆方向の回線は欲しいデータのリクエストに使う程度だろうから、あまり速度は必要ないだろうけど、とはいえあまりにも遅いとレイテンシが悪すぎるし。

 しかし、送信側も受信側もほとんど全く新しいシステムになるから、普及させるのは大変だろうな。BluetoothとかWiFiでブロードキャストするようなシステムのほうが作りやすそう。光でなければだめ、というような用途が無いと。光はカーテンで遮断できるから秘匿性が高い、とか言ったって、美術館の案内音声とかに秘匿する必要性なんて皆無だし。


 IMES(屋内測位)でL1 C/Aを使いWiFi/Bluetoothを使わない理由は、測位したいユーザーに測位システムの有効化を要求するのは良いが、WiFiやBluetoothを要求するのは手間が大きすぎる、みたいな理由があったはず。とはいえ、実際には既存のシステムを使うWiFi/Bluetoothベースの測位システムが普及したし、専用の受信チップ(少なくともファームウェア更新で対応した受信チップ)が必要なIMESは全く普及しなかった。

 全く新しい技術というのは、開発にも普及にもめちゃくちゃなコストがかかる。普及しないとメーカーは採用に踏み切らないし、メーカーが採用しないとユーザーは利便性を感じない。Appleみたいな巨大企業がゴリ押しする技術ならともかく、大学や研究機関が開発する全く新しい技術を普及させるのは現実的ではないような気がする。

 まあ、「普及する見込みがある技術しか研究しない」とか言い始めたら、それはその研究機関の寿命だろうという気もするけど。小規模な民間企業はともかくとして、研究機関とか大学とかの研究開発はモンテカルロ的にやるのが仕事だろうしな。あるいは、ビッグテックのアホみたいに巨大な研究機関のほうが「数撃ちゃ当たる」をはるかに大規模にやっている気もするけど。



 デジタルミラーデバイスを光通信に応用するみたいなことってできないのかな、という空想。

 例えばLEDパネルから空間多重化した光通信を出力して、DMDで特定のLEDからの光を選択的に受光素子へ反射する。単純なジンバル追尾と違って複数箇所から同時に導光できるから、ランダムな複数個のLEDの光を加算してSNRを稼げる。同じ信号を出力するLEDの組み合わせは高速に(DMDの応答速度程度で)変化させられるから、一つの信号を空間的・時間的に分散させて、複数の情報を多重化することで、LEDパネルは均一な発光に見える。

 一つの開口で空間的に大きく離れた複数箇所からの信号を受信できるのは利点か。例えばある程度の高度を飛行するドローンで同時に複数箇所からの信号を受信できる。もっとも、受信素子は単素子だから送信側で時分割制御が必要になるし、送信利得も相当必要だろうけど。

 空間的に分解するならカメラでもいいけど、カメラは素子数が莫大なために時間分解能が極めて悪い(せいぜい数百Hz、シンボルレートはその数分の一)という欠点がある。DMDなら受光素子の応答性は極めて高いものが使えるから、シンボルレートもある程度高くできる。

 受光素子を単素子ではなくて、分割型の(例えば2x2=4分割の)フォトダイオードを使用すれば、空間的に分離した複数の信号を同時に受信することもできるか。

 DMDって光をコリメート化してからDMDに当ててそのまま放射しているから、これを逆向きにすると受光面積がめちゃくちゃ小さくなって、受信用デバイスとしては極めてSNRが悪くなる欠点がある。DMDの前に対物レンズを置けるなら受光デバイスとして使えるけど、空間分解との相性はあまりよくなさそうな気もする。


***


 NTPのログ

 RTT

 特にどうということもなく。


 NTPとPCの時差


 w32tmが止まっていたときよりは少ない差で安定しているけど、誤差が数十msより小さくならない。8日から9日(UTC)で大きく下向きになっているけど、原因は不明。温度特性? システムクロック用の水晶くらいはせめてTCXOくらいのやつを積んでほしいなぁ。あと数年も経てばMEMS発振器が乗るようになるのかもしれないけど。


***


 C#でテキストファイルを圧縮しながら追記したりするやつ。非アーカイブ形式であるgzipを使えれば便利なんだけど、C#のGZipStreamはシークをサポートしていないから、追記はできないはず。gzの元になるストリームレベルでシークしてやれば追記はできるけど、もちろんエンコーダの連続性はないので、あくまでも追記した分でしか圧縮しない。1度に大量に書き込むなら(追記分だけで十分な冗長度があるなら)、GZipStreamのBaseStreamレベルでシークするのも効果がある。

 最近のWindowsはhoge.txt.gzとか作ればダブルクリックでhoge.txtを開いたりhoge/hoge.txtに展開してくれるから、gzipで作れれば便利だと思ったんだけど。


 今のところ、ZipArchiveで頑張るほうが現実的かな? 追記してもちゃんとシームレスに圧縮してくれるから、ちまちま書き込んでもちゃんと圧縮率が稼げる。

 ZIPファイルの形式的に、複数ファイルを突っ込むと容量効率が下がるはずだから、そのあたりは要注意だけど、ファイルが1個しか入っていないなら問題ないはず。

 ただ、この追記がどういう処理になっているのかわからないのが怖い。もしかしたら既存のエントリを一旦全部読み込んで、それに追記したうえで、再度ZIP圧縮して書き込んでいるのかもしれない。


 1回あたり1024バイト(ASCII1022文字+\r\n)を書き込んでそれを1024回繰り返す、という処理(1回毎にファイルを開き直す)が、1回目で24秒、2回目で51秒、3回目で78秒、くらいかかる。かなり遅いし、処理時間がどんどん長くなる。ASCIIで表現できる範囲とはいえ乱数でピックしているので、圧縮用のデータとしてはかなり特性が悪いと思うけど、それでも17%くらいは小さくなる(3回目で3MiBが2600kBくらい)。

 試しに0123456789の数字だけを同様に書き込むと、圧縮率は50%を超える。ただ、1回目でも51秒くらいかかる。SmallestではなくFastestだと18秒くらいで書き込めるけど、圧縮率は25%くらいまで低下する。

 同じように、ASCII文字範囲全体をFastestで圧縮すると、1回目で19秒、2回目で32秒、3回目で44秒、くらいになる。Smallestよりは早いけど、圧縮率はほぼ0%まで悪化するから、ZIPを使う意味がない。テキストファイルに追記するほうが圧倒的に早いし、ファイルサイズも大差ない。


 同様の処理をgzipで試してみると、1回あたり0.25秒前後で書き込める(もちろん劣化しない)。ただし圧縮率はかなり悪い。

 出現文字セットを0-9までの数字だけにすると圧縮率は高くなるけど、今度はWindows側から開けなくなる(0x8096002Aが出る)。C#のgzipエンコーダとWindowsのgzipデコーダで解釈が違うのかも。文字セットの問題じゃなくて木の作り方とかの問題だろうから、普通のテキストファイルなら確実に問題ないというわけでもないだろうし。

 そもそもgzipってバイナリレベルで連結していいものなんだろうか?


 結局、大容量のテキストファイルは、平文で書き出して適時人間が適当に圧縮するなり、大容量のメディアに移動するなりするのが一番確実な気がする。


*


 class ClsA{public event EventHandler HogeEvent;} class ClsB{ClsA _clsA;} みたいな構造があって、アプリからはClsBを見ているときに、ClsA.HogeEventを受け取るのって、どうやるのがいいんだろう? _clsAをプロパティで公開してclsB.ClsA.HogeEvent+=みたいな感じで登録しているけど、これだとsenderがClsAだから、どのClsBが管理しているClsAなのかがわからない。それを逆引きするためにDictionary<ClsA, ClsB>みたいなのを作るのも面倒くさいし。

 ClsBの中にevent EventHandlerを追加して、受け取ったイベントをsenderだけ付け替えて投げるみたいな挙動にするしかないのかな。


*


 C#の愚痴等。


 Spanの添字にuintが使えないの地味に謎いんだけど、どういう理由なんだろう。Spanで管理できる長さがuint.MaxValue未満(int.MaxValue程度)だからみたいなこと? どうせintで添字取ったところで負数ならIndexOutOfRangeExceptionを投げるんだから、uintで範囲外をIndexOutOfRange投げたっていいはずなのに。


 System.Numerics.Complexって、インスタンスを作るor積がかなり遅い? (double,double)にキャストして自分で複素数の積を計算して書き戻すとだいぶ早い気がする。SourceLinkをざっと見た感じ、単なるreadonly record structだし、operator*(Complex,Complex)も普通の実装だし、変な感じはないんだけど。ちゃんと確認したわけじゃないので、別の場所がボトルネックかもしれないけど。


 DictionaryのTryGetValueでkeyにnullを渡すとArgumentNullExceptionが出る仕様、ちょっと使いづらい気がする。クラスのインスタンスから何らかの値を逆引きするような用途で辞書を持っていて、クラスのイベントから送られてくるobject senderをkeyとしてTryGetValueで逆引きする、みたいなときに、sender as Class hoge && dict.TryGetValue(hoge,out var value)みたいに2段階で判断しなきゃいけないのがちょっとめんどい。直接dict.TryGetVakue(sender as Class,out var value)みたいにできたらいいのに。


 lockが代入で透過的だと嬉しいな、という気がする。例えばvar value=lock(lockObj) dict[index];的な感じで。今のC#だとint value;lock{value=dict[index];}みたいに変数の宣言と代入を別に書く必要がある。int valueくらいだと書くのも手間ではないけど、型名が長いとvarで書きたい。


 List<T>に相当するスレッドセーフなヤツって何を使えばいいんだろう? AddとRemoveができるのが最低条件。今回の用途ではアイテムが重複する必要はないから、ConcurrentDictionaryのKeyで代用することもできそうだけど、なんかアホっぽいよな。


 EventHandler<T>と合わせて使うようなやつで、class EventArgs<T>(T item) { public T Item => item; }的なやつがあれば便利そうなのに、なんで無いんだろう。


***


 Windowsのfindstrコマンドが結構便利。findstr /s /n HogeFuga *.csみたいな感じで呼ぶと、サブディレクトリを含む拡張子csのファイルからHogeFugaの文字列を含む行を、ファイルパスと行番号付きの一覧で出力する。この文字列はデフォルトで正規表現として認識し、大文字小文字を区別する。findstr /?で呼ぶとヘルプを表示する。

 昔書いたコードで使った機能のはずなんだけど、みたいなときに、直交性の高い文字列を覚えていればそれで検索できて便利。


***


 GPSのドップラスキャン、本物のGPSだと1msとか、かなり短時間のサンプルで信号の有無を判定するらしいんだけど、SDRでサンプリングした波形だと、4msとかでもSNRが足りなくて判断が難しい。少なくとも相関強度で信号の有無は判定できなくて、場合によっては信号が入っていても相関強度がノイズレベルを下回る。ノイズ以下の信号は更に長いコヒーレント長、例えば20msとかでスキャンすれば浮いてくる。本物のGPS受信機が1msとかで判定できるのが信じられないんだけど、ワンセグチューナーの熱雑音が高すぎるってことなのかな。広帯域のミキサが乗ってたり多ビットADCでサンプリングしたらノイズも増えるだろうけども。


*


 試しにrtl_tcp経由でL1をサンプリングして、全PRNをスキャンしつつNAV/SBASメッセージを自動判定して受信するプログラムを書いてみた。単にメッセージのビット列と、適当な頻度で衛星のタイムスタンプ・ドップラ・ドップラレートをテキストファイルに出力するだけ。生データ(IQファイル)を保存するよりマシとはいえ、テキストファイルだと容量がすごいことになるねぇ。



 PRN142からSBASメッセージが出てるっぽいんだけど、L1 C/A PRN CODE ASSIGNMENTS April 2023を見てみると、PRN142はUnallocatedになっている。謎い。

 メッセージの内容はMT0,1,2,3,4,9あたりが出ているから、SBAS衛星で間違いなさそう。ただし時々フレームエラーが出る(メッセージ健全性はプリアンブルとCRCで確認)。

 エフェメリスをデコードしてみると、東経116度0分、緯度0度が出ている。位置のZや速度・加速度はすべてゼロ埋めで、X/Yも極座標の116度を直交座標に換算しただけのもので、リアルタイムに軌道決定して(or推定して)放送しているわけではなさそう。

 Celestrakのactive geosynchronousをプロットしてみると、この場所にはKOREASAT 6A(61910, 24206A)がいる。


 KOREASAT 6A to embark a satellite-based augmentation system payload built by Thales Alenia Space | Thales Alenia Space

 KOREASAT 6Aは116度のスロットに打上げて、SBASペイロードを搭載とのこと。PRN142のSBASメッセージを放送しているのはこれで確定かな?


 ちなみに、メッセージエラーが出るSBASメッセージは142の他に134がある。この2衛星は比較的高い頻度(毎秒~1分に1回程度)でエラーが出る。134も韓国のSBAS衛星。他の衛星からは全く問題なくメッセージが受信できて、韓国の2衛星からはエラーが出るということは、なにか特殊なメッセージを放送しているんだろうか? (134と142は別のメッセージが放送されていて、エラーのタイミングも各々独立している) あいにく復調に成功したメッセージのビット列しか保存していないので、プリアンブルエラーなのかCRCエラーなのか、あるいはそもそも信号強度が弱いのか、とかの判断はできていないんだが。

 しかし、なんでPRN ASSIGNMENTSに記載がないコードが放送されているんだろう?


 gps.gov、「NOTE: The contents of this website have not been updated since February 2025 due to staffing shortages. Please bear with us as we work on a solution.」(Google翻訳 / 注:人員不足のため、このウェブサイトの内容は2025年2月以降更新されていません。現在、問題解決に向けて作業を進めておりますので、今しばらくお待ちください。)だそうで。

 PRN142も本当は正式に割り当てられているけど公開資料が更新されていない、みたいなことなのかな? トランプやイーロンのせいでゴタってるって噂は聞いてたけど、本当にいろいろ支障出てるんだろうなぁ。そうやって国内で揉めて信頼性落とすから他の国が優位になるんだよ。。。


*


 試しにL1帯のQFHをモデル化

 直径30mm、高さ60mmくらいだからかなり小さい。そりゃまあAPT用に比べれば1桁以上小さいのは当たり前とはいえ。

 導体だけで自立しそうだし、治具さえ作れば作れそう。しかし、結構ウネウネした形だし、治具のデータを作るのも大変そうだ。


 NOAAの旧衛星も最終19号機の打上から16年以上が経って、正式運用の終了も発表されたらしいし、APTの運用が続いている間に受信しておきたいんだけど、いかんせんAPT(VHF)のQFHはデカすぎてなぁ。。。


2025年5月7日水曜日

小ネタ


 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だとフリーランでも線形だから、この衛星だけの問題だと思う。