2024年11月20日水曜日

小ネタ



 目力らの強さよ


 Amazon.co.jp: よって、初恋は証明された。 -デルタとガンマの理学部ノート1- (電撃文庫) 電子書籍: 逆井 卓馬, 遠坂 あさぎ: Kindleストア

『氷華』を理系にした感じかな。

 主要な登場人物は生物・化学の方向が得意で、物理・数学が苦手、という感じ。ホワイトボードマーカーに油性ペンで書いてしまったという文脈で「アセトンで拭けばいいじゃん」みたいな発言が出てくるあたりいかにもケミっぽい。/* なお、油性ペンはホワイトボードマーカーの溶剤で溶けるので、油性ペンで書いてしまった場合はホワイトボードマーカーでなぞったりぐちゃぐちゃに上書きしてからイレーサーで消せばいい。ホワイトボードに文字や線が印字されている場合はアセトンみたいに攻撃性の高い溶剤を使うと消えるので注意してね */



 Additive Friction Stir Deposition from Mazak MegaStir - YouTube

 FSW的な方法でアルミ材を積層造形するAFSDというコンセプト(AFSD、字面に戦車砲みがある)。高温で溶かすわけじゃないので材料特性の面で有利(材料強度がほぼそのまま出る)。FFF方式の3Dプリンタの感覚だと層間の強度が低そうだけど、とはいえ金属を溶かすほどの強い摩擦力でこねくり回すわけだから、下の層にもある程度強く張り付くのであろう。今のところはアルミで開発中だけど、将来的には鉄とかチタンも使えるようにしたいとのこと。

 理想的にはマシニングセンタにAFSDを対応させて、造形しつつ切削しつつ、という感じなんだろうけど、AFSDはおそらくスピンドルの中から材料を通さなきゃいけないので、既存のMCへの搭載は厳しそう。横型MCあたりからフレームを流用しつつ同じ規格のパレットを採用して、AFSDと切削は機械を分ける、あたりが落とし所かな。AFSDも5軸化したいみたいな話も出てくるだろうし、結局スピンドル周りしか違わないじゃん、という話にもなりそうではあるが。横型MCのスピンドル交換で付加と切削を切り替え可能、あたりが良さそう。一つの工場に同じ機械を10台とか20台とかずらーっと並べて、パレットチェンジャで付加と切削を行き来させて、付加に時間がかかる形状なら付加スピンドルの機械を多めに、作るものが変わって切削に時間がかかる形になったら数台は切削用のスピンドルに交換して、みたいな感じで。ただまあ、アディティブってことは多品種少量生産的な方向性だろうし、スピンドル交換の作業量はちょっと厳しい感じもあるか。材料供給はターニングセンタのバーフィーダーみたいな形になるんだろうけど、ターニングセンタは回転軸が固定なのに対して、横型MCはスピンドルが上下左右に動き回るからちょっと面倒そうではある。まあ、棒材はFSWで接合できるんだから、1mとか2mとか短めの振り回しやすい棒材を送って、短くなったらつなげていけばいいだろうし。


 A320 Sidestick - YouTube

 飛行機のサイドスティックってトランスデューサーに直結して電線が出てるだけだと思ってたけど、かなり複雑なんだな。A320だから? それともA350でも似たような構造なんだろうか? 機種変で操作感を変えないようにとすると、延々同じ構造を使い続けそうだな。設計やテストの手間も省けるし。

 素人考えだとスティックにリターンスプリングだけつけて、スティックの力はひずみゲージで検出すれば構造はシンプルになるだろうし、ひずみゲージを何枚か並べればそれだけで冗長系が作れるから、ロッドを並べて冗長系にするよりよほどシンプルで信頼性が高くなるだろうけど、とはいえ、飛行機は赤道直下の炎天下から極域の極寒地域まで、幅広い温度範囲で問題なく起動できなきゃいけないし、運用中だって上空で圧が抜けたら断熱膨張で急激な温度変化にさらされるから、極端なレンジの温度特性を保証するくらいなら、機械的な回転で角度を電気信号に変えるような仕組みのほうが簡単に作れそう。

 F-16のサイドスティックはA320に比べればかなりシンプルな感じらしい? 気安く買えるものじゃないだろうし、写真もほとんど出てこないけど。エアバスのサイドスティックは例えばピッチ方向はリターンスプリングだけでなく重力加速度で重さを加えるためのウエイトがついていたり、ピッチ・ロール共にダンパースプリングがついていたり、オートパイロット時にスティックをロックするための機構がついているけど、F-16の場合はそういうギミックは一切なくて、単にロードセルに接続されているだけっぽい。旅客機と戦闘機の設計思想の違いなんだろうな。最初期のYF-16はさらにシンプルなはずだし。



 おおむね外気温に近い数値の図

 このあたりはそろそろ平地でも氷点下に入るようになってきた。1日で温度差15℃とかね、熱衝撃アホかと。

 気温が氷点下になっても日常会話だと符号が省略されるのがなんとも。そういう意味では-17℃あたりまでは正の値をとる華氏は日常生活では便利そうだよなー。まあ、-20℃あたりだと華氏も符号の曖昧さがありそうだけど。

 本格的に符号を使いたくないならケルビンとかランキンとか使えばいいんだろうけど、極低温系のごく一部の研究室を除いて通じなさそうだな。「今日の気温250Kだってよ」とか。北大とか室工大とかだと時々聞こえてきそう。

 ケルビン、ファーレンハイト、セルシウス、ランキン…… フライドチキンが食べたくなる文字列だな。。。



 アマチュア無線のコールサイン、CWならCWで、NFMならNFMで、という考え方に則ればFHDデジタルATV(ISDB-T方式)は映像の中にコールサインを写し込めばいいんだろうけど、とはいえ、交信を行っている者以外もコールサインを知ることができる必要があるということを考えると、映像信号の中にコールサインを埋め込んでそれで十分かというと怪しい気がする(ISDB-T受信機が普及した世界観ならともかく、今の日本じゃアマチュア無線の帯域のISDB-Tを受信できる機材ってほとんど普及してないだろうし)。

 例えばISDB-Tは補助チャンネルの割当があって、ATVで使う場合はACは不要だろうから、このキャリアをISDB-Tの平均レベルより高い出力でOOK変調させることでCWとしてコールサインを出力する、みたいな機能はあっても良さそうな気がする。あるいは、ISDB-Tの誤り訂正能力を信用して、データキャリアの領域に信号を加算して、AMやFM、CWで復調したときにコールサインに聞こえるような信号を出すとか。

 ISDB-Tの送信機(変調器)をFPGAとかで自作しているならそういうオマケ機能(ISDB-T非準拠機能)も自由に作れるだろうけど、買ってきた汎用の変調器を使っている限りはそういう機能は作れないだろうな。信号加算をするならアップコンバータの前にちょこちょこと細工すれば出せそうではあるけど。とはいえ、FHD ATVでDXやろうとすると妨害波にしかならないISDB-T非準拠コールサインは嫌がるだろうなぁ。



 ISPから与えられているメールアドレス、最近はそのプロバイダを名乗る迷惑メールが大量に届いている。自社を名乗る迷惑メールって真っ先に潰しそうだけど、金融機関とかを名乗るのが消えてプロバイダを名乗るのが残るあたり、企業努力の差というか、被害額の規模というか、そういう感じなんだろうか。自社を騙る迷惑メールを素通しさせているあたり、メールの検閲はやってないんだろうなという安心感はあるけど、むしろそれ目的で素通りさせている可能性も……


***


 先週、電子基準点の近くに行く用事があったので、というか近くに行く用事を無理やり作ったので、30分ほどサンプリングしてきた。

 とりあえず単独測位相当

 9個の衛星(7xGPS+2xQZS)を受信。

 原点は電子基準点根本の第二水準点に設定している。アンテナの位置はこのプレートから南に10m、上に1.5m、位の場所。東西方向はかなり狭いけど、南北方向は若干広く分布している。分布の中心は概ね正しそうな位置。上下方向は分散が広いし、かなりズレてる(本来は1.5m程度の場所が中心になるはず)。


 仰角の低い1つを外したうえで、SLASの札幌をダイレクトに適用(H/Uは上の図と表示範囲が異なる点に注意)

 水平方向は南北方向が少し小さくなる。上下方向は、上方向の誤差は変わらないけど、下方向に大幅に誤差が広がって、トータルで中心値は近づいたかな、といった程度。この電子基準点は標高がかなり高いので、基準点との標高差がすごく大きい。直線距離でもかなり離れているから、本来は距離や標高に応じた補正が必要になる(計算が面倒そうなので未対応)。


 このときはHDOP1.20,VDOP3.05くらいなので、上下方向にはあまり配置が良くない。ということで、妥当な測位結果かなぁ、という気がしないでもない。とにかく、三角点を基準にして単独測位させて、ちゃんと妥当そうな(極端に離れていない)結果が得られたのは良かった。


 今回はノートPCでサンプリングして、IQファイルはPC内臓のSATA SSDではなく、USBで外付けしたSATA SSDに記録していた。ロガーのスペクトルを見ると、1Hzくらいでパルス状の広帯域なノイズが入っている感じがあった。もしかしたらSSDへの書き込み時に強いノイズが出ていて、RFに入り込んでいた可能性がある(SSDへの書き込みの消費電力で電源が暴れてBias-T経由で入ったみたいなシナリオは妥当性がありそう)。このファイルはSLASのデコード率も結構悪いので、信号品質はあまり良くなかった可能性がある。そう考えると、家で受信したとき(NUCでRF→TCPに変換して、別PCで記録)に比べて、上下方向が広がったのもノイズの影響が否定できない。

 オーディオの人たちが使ってるノイズ対策アイテム(USBの電源ノイズ云々のやつとか)、あんなの絶対オカルトだろ、と思ってたけど、実際自分がノイズに晒されている気がしてくると、俄然興味が湧いてくるのよな。。。

 まあ、数時間程度ならUSBの5Vだけ(あるいはBias-Tだけ)、Ni-MHあたりからシリーズレギュレータで給電すれば良さそう。北海道はもうかなり寒いので、来シーズンになって、飽きていなければ、RF周りももうちょっと考えよう。/* そういえば2024年夏シーズンの間に1090MHzのアンテナを交換しようと思ってたのに、全く手を付けなかったな。あれだけ1090MHzで遊んでたのに */



 QZSのSLAS、パケットのフォーマットとしてはSBASと同じかな。このフォーマット、復調(特に最初の位置合わせ)がだいぶ面倒くさい気がする。

 航法メッセージであれば1bitずつ受信したビット列をプリアンブルと比較して、プリアンブルが一致したらパリティを調べて、6メッセージ中誤り率が十分に低ければそれをメッセージの区切りとして採用する、みたいなアルゴリズムが使える。

 一方、SBASは1/2FECを使っているから、単純にウインドウをスライドさせてプリアンブルを探すことができない。一旦適当な長さのシンボル(1100とか)を貯めたうえで、それをビタビ復号して、それに対してウインドウをスライドさせて、CRCで確認するような処理が必要になる。また、FECを使っているから、G1/G2ビットも区別しなきゃいけないけど、先に区別することはできないから、1シンボルずらして2種類のビタビ復号を行ったうえで、プリアンブル同期・CRCチェックを行う必要があるはず。/* L5 SBASだとこれに加えてマンチェスタ符号まで使うらしい。CDMAのコードで1bitの区切りが厳密にわかるんだから、CDR用の符号なんて追加する意味あるんだろうか? */

 L1 SBASは静止衛星からしか放送できないから、受信機の位置がわかればおおよその受信タイミングも推定できるし、衛星のスロット(経度)は長期間で変化しないという前提で、単独測位後にSBAS衛星との距離を推定すればかなり狭い時間ウインドウを探すだけでいいけど、受信機位置が未知の場合(先にメッセージの受信と擬似距離だけ記録しておいて、あとから解析する)とか、あるいはL5 SBASの周回衛星みたいに衛星の位置が未知の場合は、タイミングを決め打ちしてメッセージに同期することができない。

 QZSSのSLASはPNTと高い精度(3σ2ns?)で同期しているから、PNTを基準にしてSLASを受信する手も使えるけど、とはいえQZS-3みたいにPNTの放送デューティーが低いやつもあるから、あまり依存はできない。

 SBASはICAO Annex 10の範囲らしくて、ググってもほとんど情報が出てこない。あるいは民間企業が作ったDO-229というドキュメントもあるけど、これも基本的に有料販売。Annex 10もDO-229も簡単に入手できるものではないから、パケットの中身はほとんど情報がない。とりあえずSBASの受信には対応したけど、使い道はなさそう(QZS PNTと独立してQZS SLASを受信できる程度)。

 SBASの説明で「SBASは航空機向けに放送されているが、一般のユーザーも使用できる」みたいなことが書いてある事があるけど、メッセージフォーマットが非公開なあたり、一般ユーザー向けに容易に使えるようなものでもなさそうな気がする。もっとも、文章は機密とかじゃないだろうし、GPSメーカーならドキュメント買って実装してるんだろうけど。あくまでも「個人の遊びでGPS信号を処理しようとすると(情報の入手が)難しい」程度だろうな。大学の研究室でもドキュメントは買ってるだろうし。


 PRN 130 BDSBAS-G1やPRN 143 BDSBAS-G3が結構強く受信できるけど、SBASメッセージの中に6秒に1回の割合でMT0(TEST)が入っている。MT0が受信できた場合って、それ以前に受信したメッセージをすべて削除したうえで、続く60秒間のメッセージも削除する、というような処理が必要なはず。数秒に1回MT0が出ているということは、意図的にそのSBASは使えない(衛星の試験中とか)という感じのはず。とはいえ、この衛星は2020年6月に打上げられたものだから、そこから4年も試験中なんてことあるかな? もしかしたらBEIDOUに非対応のGPS受信機が誤ってBDSBASを使わないように、ということでMT0を出しているのかもしれないけど。米政府機関が使うようなセキュアなGNSS受信機ならコード割当からBEIDOU系を除外するみたいな処理はあるだろうけど、民間用の衛星だとコードスキャンで見つけた衛星は片っ端から受信する、みたいな処理はありそうだし、そういった場合に米国内でBEIDOUを除外するためにはMT0で削除させるしかない、みたいなロジックなのかな。


 BEIDOUのサイトにはSBASのフォーマットのドキュメントもある(ChromeでPDFをダウンロードすると「このファイルは安全じゃないぞ」みたいなダイアログが出るけど)。ICAOとかアメリカの企業が有料で販売しているドキュメントが中国の組織から公開されている状況。なんだかなぁ。ICAO等もドキュメントの販売が財源の一部なんだろうし、気安く無料化できるようなものでもないだろうけど。

 このドキュメントによると、MT0はDon't use for safety applicationとのこと。やはりBDSBASもMT0が出ている時は使っちゃだめなんだろうか? 安全用途じゃなきゃ使ってオッケー、ってことなのかな。


 試しにSBASのメッセージをいくつか復調。いちおう妥当性の有りそうな結果が得られている。

 L1 SBASのエフェメリスはカルテシアン9要素(ECEF位置・速度・加速度)で提供されている。カルテシアンが実際に使われているの初めて見た。位置・速度・加速度ともに、XY平面とZ軸ではレンジや精度が違う。例えばXY位置は約4.3万kmの範囲を0.08mの分解能で表現できるけど、Z位置は約6.7千kmの範囲を0.4mの分解能で表現できる(XYに比べてZは10分の1の範囲)。速度はXYが約41m/sまでに対して、Zは約520m/sまで表現できる。Z軸が6千km程度しかないので、あまり離心率の大きな衛星は表現できない(XY移動速度の問題もあるだろうし)。そのあたりがL1 SBASが静止衛星専用たる所以かな。L5 SBASだとケプラリアンになるのかな? MT9には予備が8bit確保してあるらしいから、それをフラグにしてカルテシアンとケプラリアンを分岐するみたいなフォーマットは作れるか。

 放送される軌道はカルテシアンだけど、地球の重力モデルに従って伝播させるわけではなく、単に2次関数として計算するだけっぽい。例えばBDSBAS-G1だと128秒間隔くらいでエフェメリスが放送されていて、それぞれ位置や速度や加速度が異なる。1つ目のエフェメリスの+64sと2つ目のエフェメリスの-64sの位置で距離を計算してみると0.3mくらいずれる。もう一声精度ほしいところではあるけど、とはいえSBASは測距用のデータフォーマットじゃないし(測距に使えないわけではないが)、0.3m程度でもまあそれなりに位置精度はあるか。

 SBASで対象にできる衛星は51個だそうだけど、補正用のメッセージのアドレス空間は52(MT2-5、13*4)とか64(MT25)くらいの範囲がある。MT6(補正値じゃなくて衛星の信頼性情報)が51個までしか出せないから、それがSBASの制限かな。

 今回デコードした結果だとBDSBASからはGPSの補正情報しか出ていない。GLONASSとかQZSSは非対応らしい。QZS-3から出ているSBASはどうなのか気になるけど、手元のデータだとQZS-3のSBASに相関値が出ない。いつ放送してるんだろう? (or もう放送してないの?) いちいちIQファイルを経由するのも面倒だし、相関値程度はリアルタイムで表示する機能は作りたいな。


2024年11月13日水曜日

小ネタ


 【近畿霊務局】ファイティングポーズを取るタイプの怪異をシメるお仕事【にじさんじ/ベルモンド・バンデラス】 - YouTube

 っぱベルさんなんだよなぁ!


 宇宙から帰還のNASA飛行士、地球への再順応の苦労語る 「座るのがきつい」(1/2) - CNN.co.jp

 誰も本に書いてない? お前が書くんだよ!!


「気象衛星ひまわり」の「赤外画像」で障害 復旧見通し立たず | NHK | 気象

「ひまわり9号」トラブル半日余りで復旧 センサー温度上昇原因 | NHK | 気象

 唯一のミッション機器が外国(L3H)から買ってきたセンサーってのは、トラブったときに面倒そうよね。最近の日本の宇宙開発は国産化を頑張っている気がするけど、日本の宇宙機の中で国民の生活に一番直結している気象衛星の唯一無二の観測装置が外国製ってのはちょっと最近の日本らしくないというか。

/* 28年度頃打上げ予定の10号機も追加の観測機器(サウンダ)含めL3H製。次期(10号機)までは時間がないから国際競争入札だけど、その後は国産したいよね、みたいな話はあるらしいが */


 テレビ朝日、7月の障害の原因は「中性子線の衝突」 半導体の進化でソフトエラー発生率は上昇 - ITmedia NEWS

 SEUはその他の原因の障害(サイバー攻撃とか、EMP攻撃とか)と比べて、同時に複数発生する確率は極めて低いから、本来であれば同構成の冗長系で緩和できるはずなんだよな。ただ、普通の冗長系は適切にハンドリングできる障害、大抵の場合はソフトウェアが投げた例外をキャッチしたシステムが正常にシャットダウンしたりして主系が使えなくなったことを従系が検出する、みたいなロジックだろうから、ちゃんと落ちず、ゾンビみたいに生き残るようなトラブルを綺麗に回避するのは結構大変そう。

 確率で言えばRAMみたいに総ビット量が多いところに突っ込んでくるような場合が多いだろうから、ECCメモリ使えみたいな話になるんだろうけど、とはいえECCで保護できない領域(メモリの外側はたいてい該当)に衝突する確率だって無視できないだろうし。根本的にはソフトエラーフリーのプロセスを使って全部ハードウェアで実装する(Xilinxの宇宙用グレードFPGAをメインで使うとか、理想的にはASIC化)になるんだろうけど、コストとか柔軟性とか考えるとそんなわけにもいかないし、WindowsとかmacOSで動くソフトウェアはどうにもならないし。WindowsとかLinuxはソフトエラー対策を頑張ったハードウェア(ECCメモリを使うとか、ソフトエラー対策を行ったARMプロセッサを開発してもらうとか)で対応できるとしても、macOSはそういうことは不可能だし。結局「調子悪かったら電源引っこ抜いて無理やり冗長系に切り替える」的なマニュアルを用意するしかないんだろうな。で、データの破損とかサービス中断を怖がって手順通りに作業できず、大規模化するみたいな繰り返しになるんだろう。/* Appleってプロセッサを自社で設計しているけど、ソフトエラー対策設計はどの程度力を入れているんだろう? */


 The Universe is Hostile to Computers - YouTube

 SEUとかの解説の動画。Veritasiumは何でも知ってるな。



 JAXA協力の宇宙ステーションシム『ISS Simulator』Steamにて無料公開。緻密に再現された船内を、自由に探索し放題 - AUTOMATON

 Int-Ball(初号機)や宇宙服の三人称視点や一人称視点でISSの内外を動き回ることができる。Int-Ballと宇宙服はXboxビューボタンで切り替えられる(ローディング時間がアホほど長い)。船内はNode1まで、つまりアメリカ側のモジュールだけ動き回れる。

 グラフィックはレイトレで表現されているので、グラフィック設定を落とすとかなりノイズ感が出る。グラフィック設定をUltraに設定すれば、RTX3060 FHDで30fps、ほぼノイズなしで描画できる。とはいえ、内部はテクスチャの解像度が低いし、テクスチャがないモデルは真っ白とかのっぺりした感じだから、Graphics Presetを上げて動くのでも、Graphical QualityはMediumとかに落としてザラザラにレンダリングさせたほうが雰囲気が壊れなくていいかもしれない。

 運動モデルはニュートン力学とは違う挙動で、宇宙機の動きとしておかしい。自分が操作するInt-Ball以外は、船内に浮いている物体を含めてすべてが一つの剛体としてモデル化されているから、ぶつかっても相互干渉しない(Xbox Bボタンで別のInt-Ballを5個まで呼べて、それらは相互干渉する)。当たり判定もかなり簡略化したモデルを使っているっぽい。姿勢はオイラー角で管理しているらしくて、ヨーの符号が変わる場所は360度近くグルンと回る事がある。ジンバルロックもあるから、真上とか真下を向くとそれ以上ピッチングできないし、ゲッタンする。

 例えるなら「リアルに再現された世界で自由に飛び回れるフライトシミュレーターという売り文句のゲームを遊んでみたら、エースコンバットのSTANDARDの操作モードしか対応していなかった」みたいな感じ。操作の次元が一つ少ない、という感じかな。車で言うなら「レースゲームを遊んでみたらアクセルとブレーキしかなかった(横軸の操作が欠如している)」みたいな感じか。同じように表現するなら、「電車のゲームを遊んでみたら「進む」と「止まる」のボタンしかなかった」とか。とにかく、そんな感じ。ゲームとしてインタラクティブではあるけど、ユーザーの自由度が本来よりも低い。

 窓(JEM or キューポラ)から見える地球もおかしい。ISSの高度が高すぎるし、ISS底面(ローカル座標Z+)も地心方向からズレている。おそらくJEMの窓からほぼ正面近くに地球が見えるように、という理由でこういう無理やりな配置になっているのであろう。ISSの位置は日本海上空あたりで固定かな? もちろんこんな位置(高度・緯度)に静止衛星なんて配置できるわけもなく。日時は4月1日or10月1日から±1ヶ月程度の19時JST頃かな? 影の幅がちょっと狭い気もする。雲は地面とは別のテクスチャで西向きに等角速度運動している。偏西風を考えるなら逆向き。背景に恒星は見えない。まあ、恒星カタログの再利用とか手続き面倒くさそうだもんね。

 現状、「宇宙機開発や宇宙実験のツールとしての使用も想定している」と言うにはお粗末な出来。今後のアップデートで運動モデルが改善されればあるいは、といったところか。せめて四元数なり、回転行列なり、ジンバルロックフリーの姿勢を使って、慣性や慣性モーメントを現実に即したモデルに改善してほしい。最低限、物理的に正しい挙動を実装して初めて「宇宙機開発のツール」としての入口に立てると思う。

 さらに言えば、キーマウやゲームコントローラーだけでなく、TCPでコマンドを送ったり、テレメトリを受信したり、Int-Ballのカメラ座標系で見た画像を受け取ったりできるようになれば、ロボット制御とか画像認識とかの学習にも使えるツールになりそう。SteamでサクッとインストールしてTCPでコマンドを叩けるKibo-RPC的なシミュレータとして使えれば色々と使い道がありそう。PRCはJava(APK)専用でシミュレータは登録したユーザーのみ、実行に数十分、といった感じらしいけど、SteamからインストールできてTCPで叩ける、誰でも使えるISSシミュレータがあれば色々と便利そう。宇宙はモデルに忠実(外乱が少ない)だから、現実に則ったモデルを内蔵した手軽に使えるシミュレータがあればそれなりに需要がありそう。ISSの中のInt-Ballのモデルもそうだし、さらに言えばHTV-Xみたいに軌道上で動き回れるモデルがあれば宇宙機(軌道)制御のシミュレータや学習用の機材としても使えるようになる。

 今のところは「アセットを配置してモーションのサンプルスクリプトを適用しました」程度の機能しか無い感じがする。これが地上の建物に人型ロボットとか(「いかにもゲームのキャラクターです」的なアセット)を置いたのであれば違和感は少ないのかもしれないけど、宇宙という環境では違和感がある。JAXA提供のデータとかISSのアセットはともかくとして、やる気とか運さえあれば高校生でも作れそうな感じ。JAXAから気温や湿度のデータも提供を受けた、と言っているけど、そんな要素どこに反映されているんだ。。。

 仕事でデジタル空間を扱う会社が、新入社員の練習用に作ったとかでもないのに、こういう簡素な(違和感のある)ゲームを配布すると会社の技術力に疑問がつくから気をつけたほうがいいと思う。特にこの会社は宇宙関連の仕事に力をいれたいらしいが、そういう意気込みの会社がこういうものしか作れないとなると、宇宙に興味はあるけど知識はない人(会社)を騙して仕事をする会社なのか?と勘ぐってしまう。


 スペースデータ、宇宙ステーション開発基盤「Space Station OS」を公開 | TECH+(テックプラス)

 ISS Simulatorの会社。ISS Simが11月7日に公開、S.S.OSが同月11日に公開。

 うーん……

 JAXAからデータの提供を受けた、とかはSSOS側の話であって、ISS Simとはまた別件の話なのかな? ISS Simはあくまでもアウトリーチ用の簡素化したゲームであって、宇宙を再現することは重要ではない、みたいな。


 SPACEX - ISS Docking Simulator

 4年ほど前にSpace Xが公開したブラウザゲーム。ジンバルロックもないし、運動モデルもある程度リアルに作り込まれているはず(GUIはオイラー角だけど、それはしょうがないね)。ISSの周りを飛び回ろうと思ったら推力が小さいとか、かといって精密にドッキングしようと思ったらインパルスビットがデカすぎとか、あちこち見て回ろうとすると範囲外判定でゲームオーバーになるとか、細かいところでは遊びづらいけど。

 あと、地球のテクスチャは解像度が低いし、ISSの飛行方向が逆な気がする(西向きに飛んでいる気がする)。飛行速度も結構早い? もちろんISSのリアルタイムの位置とも連動していない。



 京浜ラムテック -SSW(同期撹拌接合)Tool Holder ー【日本語版】 - YouTube

 SSW Amazing Welding speed - YouTube

 SSW(同期撹拌接合)事業 | 事業紹介 | 京浜ラムテック

 摩擦攪拌接合(FSW)は強い反力がかかるため、高剛性なFSW対応工作機械を導入する必要がある。SSWでは反力を抑えられるため、一般的なマシニングセンタやフライス盤で加工ができる。FSWに比べて2倍の加工速度、FSWより低い加工温度、FSWより高い接合強度、というふうに、FSWよりも高い性能が得られる、とのこと。アルミに深さ1mmで21m/min程度の加工速度が出るらしい。

 何が「同期(Synchronized)」なのかよくわからない。SSWは回転だけでなく、軸方向の振動もミソらしい。ただ、「マイクロ波」と言っているけど、機械振動でマイクロ波レベル(GHzオーダー)の振動ってけっこう大変じゃね?という気がする。「振幅がマイクロメートルサイズの波」みたいな意味でマイクロ波と言っているのかな。


https://ilrs.gsfc.nasa.gov/docs/2024/NESC_Slides_0215_2024.pdf

 Omni-SLR関係の資料。英語だけど。順調に開発が進んでいるようでなにより。

 SLRってリターンを検出できれば国際的な地図に登録してもらえるのかな? 当面はともかくとして、数年か10年かすればアメリカとかEUあたりのYouTuberがSLR地上局を作りそうな気もするけど、そういうのも妥当性のある結果を報告すれば登録されるんだろうか。Omni-SLRだと4.6kWくらいのレーザだから当面は気軽にアクセスできるものではないとしても、最近のガチのYouTuberはやることがいちいち本気だからなぁ。

 最近だと50万円くらいの小さい発振器でも10kW程度のパルスレーザーを出せるものもあるらしいし、アメリカの方だと研究室が放出した機材を確保する個人も多そうだし、ある程度のものなら作れそうな気がする。アクティブな光学系(レーザー発振器)とパッシブな大型光学系(受信開口)、それと機械構造(追尾用装置)、それらを制御する電子回路やソフトウェア、等々、SLRは結構幅広い領域である程度の技術力が必要だから、仕事でSLRを触っているわけではない個人が自力で作ろうとするとちょっと大変そうではあるけど。とはいえ、最初は小さな開口(TX用とか)だけで衛星を追尾する機構を作って、追尾を実証した後に大型の経緯台に交換して、それで追尾精度を高めつつ大型の開口を乗せて、追尾信号に1Hzくらいの振動を与えたうえでフォトンカウンタで検出できるように引き込んで、最後にレーザーを追加して、みたいな流れで、ある程度段階的に作れるはず。トータルのコストは、まあ、大して変わらんだろ。最初から大型の経緯台を使えば最終的に全部必要になる機材しか使わないし。全部新品で揃えて数百万、eBayで買えば数分の1、くらいで、欧米のYouTuberなら十分手が届くレンジな気がする。



 マイナビのテック系のニュース、数年前から会員限定コンテンツがちらほらあったけど、ここ最近で急に増えてきた感がある。会員登録してみようと思ったんだけど、メールアドレスが「勤務先メールアドレス」と明記してあるのが不思議。個人が自宅で契約したISPから付与されたメールアドレスとか、あるいはフリーメールとかは駄目ってことなんだろうか? 利用規約とか会員規約を読んでみても「個人の登録は禁止」みたいな記述はなさそうだが。

 マイナビにもフリーのライターが書いた記事があるはずだけど、彼らは自分が書いた記事をどうやって読んでいるんだろう? 自分が書いた記事は当面は書きっぱなしでいいとしても、他のライターが書いた記事とか、あるいは自分が書いた記事をあとから参照する必要がある場合もあるだろうに。マイナビと契約したらマイナビから仕事用のメールアドレスが割り当てられる、みたいな仕組みがあるんだろうか。

 会員規約で「当社から付与された会員IDおよびパスワード」と書いてあるのが面白い。会員IDはともかく、パスワードはユーザーが入力するんだから、「当社から付与された」ではないだろうに。ゲームだと「ユーザーが作ったコンテンツは当社の管理下に入るよ」みたいな規約があったりするけど、同じように「ユーザーのパスワード等は当社の管理下に入るよ」ということなんだろうか。


 Mac miniの底面のアレ。MacってCPUの外で細かい処理をするチップが乗ってるはずだし、電源OFFでもキーボードとは常に接続しておいてキーボードのTouch IDを押したら起動できる、みたいな感じになるのかと思ってたけど、そういうわけでもないんだな。その程度の機能は簡単につけれるだろうに、なんでついてないんだろ。


 Fireタブレット10でAcrobatを2画面表示。さすがに表示サイズが小さくなるので見づらいけど、並べて表示できるので便利。

 Androidの画面の下に表示される3個のボタンの右側の■ってダブルタップすればアプリが切り替えられるんだな。わかれば便利だけど、普通気づかんだろ…… スマホの機能、古代遺跡並みに謎解きが多い。

 作業PCは正面のメインディスプレイ(4K)と、その右側にサブディスプレイ(FHD)が置いてあるけど、視線の左右移動は結構疲れる。16:9モニタだから横方向は離角が大きいという理由もある。メインディスプレイの下、机の上にタブレットを置くと視線の移動量が少なくて住むから、頻繁に視線を移動するのも苦にならない。タブレットでPDFを表示するのは思ったより快適。まあ、そんな事言い始めたらメインディスプレイの下(手前)に大きめのモバイルモニタ置いたらいいじゃん、という話になるんだけど。


***


 QZSS SLAS、復調率はかなり悪いけど、いくつかのパラメータは取り出すことができて、札幌のDGPSの補正項(擬似距離に対する補正値)も得られたので、測位計算に適用(とりあえず大気遅延の補正は省略)。分布の大きさは変わらないけど、中心位置は結構変わる。単独測位(SLAS DGPS非適用)の場合、Pixel6aで受信した位置との差分ではほぼ誤差が無いけど、SLAS DGPSで補正するとそこから大きく(10m程度)ずれる。Pixel6aは単純な単独測位だろうから、確度としてはさほど高くはなくて、SLASで補正したほうが正しい位置、という可能性もあるけど、判断に悩む。

 正解位置を、地理院地図の写真から、実際にアンテナを設置した場所の座標を得ると、Pixel6aで得た値と若干ずれる。ただ、それはSLASの補正と同じ方向にずれるから、SLASの補正を合わせるとより大きくズレる。SLASの補正の符号を逆にすると少し戻るけど、まだ多少は残るし、高度方向はより大きくズレる。地理院地図の精度は17.5mとのことだから、今回の測位計算で得られる精度(半径15m程度)に比べてあまり高いとは言えない。地理院地図の精度は保証値だから実際にはもう少し高いとしても、微妙なところ。結局、精度を確認しようとすると、三角点みたいに正確な位置が求まっている場所でサンプリングするしかないんだろうな。

 SLASの仕様書によると、観測局と距離が遠い場合は対流圏遅延の補正を行う必要があるし、最小二乗法を解く際にも衛星ごとに重みを設定しろというふうに書いてある。重み付けは衛星ごとに誤差の量を推定して誤差の少ない衛星を優先的に使うようなパラメータだけど、この計算がかなり複雑で、1ページ丸々重みの説明に使われている。この重みはDGPSを使わない、通常のGPS単独測位でも使われるものだけど、DGPSの場合は地上局との距離とかも含めるので、もう少し複雑。

 IS-QZSS-L1Sの式5.5-4、重み付きの最小二乗法を解くものだけど、POS = (G^T・W・G)^-1・G^T・W・dPRcorrectedという形。ここでPOS:User positionが直接出てきているのが謎い。この計算で得られるのって移動量(POSへ加算する量)じゃない?


 SLASの復調率が悪すぎるので、ビット復調のアルゴリズムを変更。遅延検波を使うようにしてみた。以前は1フレーム6メッセージで復調率0/6が連続するのが当たり前みたいなタイミングもあったけど、新しい方法では数分間程度ならすべて復調率6/6でメッセージが取り出せるようになった。

 SLASのメッセージはIODの組み合わせを取り扱うのが面倒そうな気がする。SLASのIODも何種類かあるし、その中ではエフェメリスのIODを指定する部分もあるし。衛星から特定のメッセージを受信した場合は過去のメッセージと続く一定時間のメッセージを破棄するようにも求められているから、SLASは衛星ごとに管理する必要がある(ハンドオーバー時も次の衛星ですべて必要なメッセージを受信したあとで切り替えることが求められている)。すべてのIODの組み合わせを適切に処理しないとだめなので、取り扱いが大変。どうやって処理するのがいいんだろうか。

 SLASのDCとかDCXを復調すると地震情報とか海上気象とかの情報が得られるので、これらのメッセージを貯めるような機能も作りたいな。


 適当なタイミングでサンプリングしたIQファイルから、C/Aコードの相関値

 右側に184,185,186,189,194,195,196が出ている。189はQZS-3から放送されているもで、中程の137も同じくQZS-3から出ているもの。一方で、QZS-3から出ている他の129と199はピークが出ていない。他にも、可視範囲にいるはずなのにピークが出ていないものがいくつか(これはアンテナの指向性の可能性もあるけど)。



 準天頂衛星の仰角

 衛星配置がちょっとズレていて、10時半頃に深めのノッチがある(時刻は1日あたり4分程度の速度で移動する)。この隙間に5号機が入るのかな?



 試しに、人工衛星の軌道を描画。横軸がXY平面の距離、縦軸がZ軸の距離。

 ↑左端が地心、右端が8万km、上下が±4万km。左端のグレーの丸が地球の大きさ。

 橙がQZS、緑がIRNSS、赤がBEIDOU、青がNAVSTAR、黒がそれ以外の物体。

 こうしてみるとGPSが結構上下方向に広く分散しているのがわかる。そりゃ相対論的補正も効いてくるだろうて……


 ↑中央が静止軌道付近、左右が±300km、上下が±3000kmの範囲。

 外側の赤や緑は傾斜角の大きいBeiDouやNavICを表している。静止軌道の外側を回るように(静止衛星が濃集している領域を高速で通過しないように)飛んでいる。QZSSも静止衛星が濃集している領域をある程度避けて通過している(傾斜角が大きい衛星グループの断面を通過する形ではある)。



 ついでに、静止軌道付近で上下左右とも±100kmを拡大(各測位衛星もすべて黒で表示)。大部分の静止衛星も南北方向に若干(50km弱)ふらついている。0.1度にも満たないような軌道傾斜角だけど。



 GPSの記事で、衛星が出力する電波が「一般的な電球と同じ程度」という説明があるけど、うーん、って感じ。GPSのL1 C/Aの送信電力と電球の消費電力は確かに近いんだろうけど、電球はスペクトル幅がアホみたいに広いので、人間の目が持つバンド幅では全放射電力の10%程度しか検出できない。その10%を指して「これが2万km先で光っていると考えてください」というのは、ちょっと乱暴。まあ、「一般的な電球10個分の明るさが2万km先で光っていると考えてください」と言われても、大して違いはないわけだが。ランダウ記号で定数倍を無視しているのと同じと考えれば、当たらずとも遠からずとも言えるか。

 例えばEQUULEUSは1W(豆電球の数分の1)で150万kmまで64kbpsで通信できるわけだから(受信側でアホみたいな利得を確保しているとはいえ)、電気通信の電力を人間の視覚に当てはめてもあんまり納得はできないような気がする。人間はコヒーレント積分なんてできないし、宇宙通信はコヒーレンシーに依存してるし。

 周波数と通信距離が反比例すると考えれば、GHz帯とnm帯では6桁近い差があるし。


 GPSのC/Aコード、Coarse/Aqcuisitionの略だと思うんだけど、松浦さんの本とか記事(例えば 航法の歴史(4)SAの廃止|衛星測位入門|みちびき(準天頂衛星システム:QZSS)公式サイト - 内閣府)ではClear and Acquisitionの略として書かれている。Clear and Acquisitionでググってもあまり出てこない。全く出てこないわけではなく、例えばPseudorange Error Correction of Clear/Acquisition Code for civil users of CPSとか、ちらほらとは出てくる。内閣府の仕事でもこの表記が使われているのは、内閣府がその表記を承認しているのか、単に誰もチェックしていないだけなのか。後者だろうなぁ。

 ちなみに、本家本元のICD-GPS-200CやIS-GPS-200Nでは、3.2.1 Ranging Codesの中で「coarse/acquisiton (C/A) code」と書かれている。IS-GPS-200Nの中では「clear」という単語は1回も出てこない。



 準天頂衛星に対する批判の中で、GPSに比べて2倍の高さを飛ぶから4倍の送信出力が必要で衛星が大型化し、衛星や打上げコストの高騰を招いている、という物があるけど(例えば松浦さんの9784594095741とか)、ちょっと違う気がする。

 対地同期軌道を選択しない場合、地域測位システムとしては成立しないわけで、全地球測位システムではなく地域測位システムを作りたい場合、衛星の配置は対地同期軌道(GPSの2倍の高度)が唯一の選択肢となる。少なくとも30機弱が必要な全地球測位システムと、10機程度(システム単独で測位する場合)で済む地域測位システムでは、衛星の構成にもよるだろうけど、地域測位システムのほうが安く作れるはず。

 他の測位システムと比べると、GPS Block IやGalileo、GLONASS-Kの750kg前後やGPS Block IIの1500-2000kgと比べると、QZSの4000kg超は非常に重いと言わざるを得ない。一方で、NavIC衛星が1500kg弱程度であることを考えると、対地同期軌道という距離の遠さによって衛星が大型化した、という批判は正しくないと思う。

 どちらかといえば、対地同期軌道で使用できる信頼性のある衛星バスが日本には三菱電機のDS2000系しかなく、DRTSを除けばDS2000は5トン前後の衛星しか作ってこなかったから、準天頂衛星もそれに倣った規模にならざるを得なかった、という流れのような気がする。

 DS2000はもう少し小型の衛星も想定しているから、本来であればDRTSの様な比較的小型の対地同期衛星を作ることもできたはずだが、ではなぜDS2000が4-5トンクラスしか作ってこなかったかといえば、それこそ本の中で書かれていたように、スーパー301条の影響であろうし、301制限下でも小型化した衛星で低価格を武器に民間市場で勝負するといった方針を推進しなかった政府の宇宙政策の問題でもあるはず。

 QZSが測位衛星の基準ではかなり巨大でゆえに高コスト化したという批判は、「軌道高度が高いから」ではなく、「日本国内で作れる人工衛星がそれしかなかったから」という感じになるんじゃないだろうか。それに対して「地域測位システムはNavICが最適な形であって、日本もNavIC型を採用するべきである」というのは、ちょっと違う気がする。そもそもGPS衛星より高い高度を採用したという理由でQZSを批判すると同時に「NavICを見習うべきだ」という書き方は主張に一貫性がない。


 あと、NavICの開発は軍事的な要求が少なからず存在したという点を留意する必要がある。1999年に印パ間で起きたカルギル戦争の際に、インドは米国へGPSを含む宇宙技術の使用を求めたが、米国はこれを拒否した。それによってインドは早急に独自の測位衛星を必要とし、NavICの開発につながった。それが比較的小型の衛星を対地同期軌道へ投入する形で実現した。少なくとも、パキスタンや中国との領土問題を抱えるインドの宇宙開発は軍事的な側面がより強いと考えるべきなはず。

 対して日本は独自の測位システムを早急には必要としておらず、それゆえに大型の衛星に実験機材を多く搭載して、「これは実験用の衛星ですよ」という建前を全面に押し出した衛星を1機打上げた。あるいは、301だけでなく、兵器を誘導するシステムとしての意味合いが強い測位衛星の特色を最大限避けるという狙いもあったのかもしれない。

 宇宙技術の側面から見ると、準天頂衛星は政争とか301以降の事なかれ主義や主体性のない意思決定を続けた政府の宇宙開発方針の問題といえばそれまでだけど、もう少し別の方向からも見たほうがいい気がする。軍事面から見れば「平和ボケ」という形になるのだろうし、政治面から見れば「アメリカからの横槍(あるいは周辺国からの強い反発)を防ぐ」という形にもなるだろうし。



 あとは、最近の小型衛星コンステの文脈で、高度を下げると送信出力を大幅に下げられるから小さな衛星で構成できて、衛星単価や打上げコストを削減できる(安価に測位衛星システムを構築できる)、みたいな話を見かけることがあるけど、GPS互換に近い信号(CDMA)を使おうとした場合は遠近問題が出てくるので、おそらくシステムとして成立しなくなると思う。CDMAに関するもう一つの問題は、大量の衛星(数百機以上)から信号を放送する以上はアメリカの猛反発が予想されるから、放送帯域もGPSから移動する必要がある。結局、受信機もRF周りから多重化方式まで、そこまでやるなら測位計算まで含めて全部作り直しになるから、おそらく誰も乗ってこない。既存のGNSSに強い不満があって、かつ莫大な費用を許容できるユーザーであれば採用するかもしれないけど、全世界に対して宣戦布告して全地球規模で交戦を行い、なおかつそれに勝って地球全体を支配下に置く、位の見込みがないと、今更全く新しい測位システムを作る、なんてことはできないはず。敵性エイリアンが地球に侵攻してきたら、彼らの測位システムはGPSとは非互換だよね、位のイメージ。まあ、ココ・ヘクマティアルあたりなら作るかもしれないが(あいつは既存のGNSS自体クラッキングするなり撃墜する形の方向性だからな。。。)。

 逆に言えば、全く新しい衛星を大量に打上げて、それ用の受信機が普及してしまえば、問題はない。例えばスターリンクは衛星が大量に打上げ済みだし、それと通信できるスマートフォンもあと数年程度で大量に普及するだろうから、スターリンクのビーコンを使って測位する機能は数年で普及しそう。スターリンクはTDMAやビームフォーミングで地上局の位置情報がほしいだろうから、自身の信号でユーザー局を測位できるなら、GPSを使わずに自身のシステムで測位するはず。とはいえ、これはLEO測位衛星コンステレーションを普及させようとして作ったものではない。


***


 最近のVisual Studio、インテリセンスがちょっと進化してて、「最後に選択した項目」じゃなくて、「最後に使った項目」が次に使われる。例えばhoge[]があったとして、hoge.Selectをインテリセンスで選んで手動でManyを入力して、hoge.SelectManyを使った場合、古いVisualStudioでは次にhoge.Sel[Enter]を行うとhoge.Selectが選択される。一方で最近のVisualStudioでは同様の操作を行うとhoge.SelectManyが選択される。

 自分はSelectを使うことが非常に多くてSelectManyを使う機会はかなり少ないから、次回にSelectManyが入力されると面倒なので、Manyは手動で入力することでインテリセンスにはSelectを記憶させていた。最近のVisual Studioでは手動で入力した項目が記憶されているから、次回Selectを使いたいときにちょっと面倒くさい。


2024年11月6日水曜日

小ネタ



 IC-R6でALOS-4 SARの電波を受信。PALSAR-3はfc1257.5MHz、BW84MHz、8kWくらいだから、そりゃ簡単な受信機でもAM復調でガーガー聞こえるか。/* R6は1300MHzあたりまで受信できる */

「自分が住んでいる場所を誰でも見られる(ただし関東に限る)」ぐぬぬ。。。


***


 この間Pixel6aを買ったばかりだけど、またAndroidデバイスを買ってみた。といってもFire HD 10だけど。

 このデバイスをAndroidと読んでいいのかはちょっと怪しい。ChromeとかPlayストアとかが無いので。とはいえ、中身はAndroidだし、Chromium系ブラウザが入っているから、クラウド系のサービスは一通り使える。もちろんAmazonのサービスはKindleやPrimeビデオをはじめとしてネイティブのアプリが入っている。

 初期設定だとネットワークが不安定で、1日に1回程度再起動する必要がある。設定で省電力モードからネットワークのスリープを止めれば安定して使えるようになる。

 画面サイズはA5程度なので、Kindleでマンガを見開きで読むのにもちょうどいい大きさ。PDFも1ページを表示して支障のない程度。自分は主にPDFビューアーを目的として買った。が、Kindleのマンガを読むのにも結構使ってる。PC(24")だとちょっとでかすぎるし、スマホだと小さすぎるし、Kindle PWもマンガを読むにはちょっと小さいけど、10”だと見開きでちょうどいい。

 SilkブラウザはAndroidのChromeと同様に、ブラウザ内でPDFを開くことはできない。KindleアプリでもPDFは開けるようだが、自分はAdobe Acrobatをインストールした。便利機能はAdobeのサブスクだけど、無料(&アカウントなし)でもPDFを開くだけなら支障なく使える。タブ機能はないけど、ファイルごとにAcrobatも複数起動してくれるから、OSのタスクマネージャー(3個並んだ右端の■ボタン)からファイルを切り替えられる。画面の下左寄りから弓なりに右へスワイプしてタスクを切り替える、みたいな機能がないから、アプリを切り替えるには2,3回タップしなきゃいけないので、ファイルを頻繁に取っ替え引っ替えして開くのには向かないけど、数分に1回切り替える程度ならそれほど煩雑ではないかな。

 FireタブレットはBluetoothでのファイル交換に対応しているから、PCからPDFをBluetoothで転送すれば、PCでダウンロードしたPDFをタブレットで読むこともできる。転送時にはタブレット側で通知から受信を開始する必要があるけど、一旦受信を始めればスリープにできるから、転送の遅さはあまり気にならない。ただしBluetoothのファイル転送は同時に複数個行うことはできず、またキューイングもできないから、複数のファイルを転送する場合は1個1個順番に転送する必要がある。大容量とか複数個のファイルを転送したいならUSBで直結するほうが楽そう。

 タブレットは見た目の割に結構軽いので、持っていてもあまり苦にならない。とはいえスマホの2倍程度の重さはあるから、気がつくと腕がつかれている。PCの前に延々同じ姿勢で座ってPDFを読み続けるのと、適当に動きながらタブレットで読むのと、どっちもどっちという感じ。

 YouTubeはSilkブラウザで再生できる。デスクトップ版を開けばPnPっぽい表示(PCでiキーを押したときの表示)もできる。さすがに動作はカクつくけど、動画の視聴は1080pなら問題ない。2160pだと途切れるけど、タブの解像度が1920x1200なので事実上支障なし。YouTubeはタブを切り替えると再生が止まる。YouTube Musicはブラウザをバックグラウンドにしても再生できる。とはいえ、タブで音楽を再生してもな…… Amazon Musicアプリだとアートワークと歌詞を表示できるが、かといって表示しておいたところで。

 カメラの性能はお世辞にも良いとは言えない。ついていることに意味がある、という程度。例えば、ブラウザベースのQRコードリーダーを使えば(ある程度大きなQRコードであれば)読むことはできる。PCで読んでいるWebサイトからQRコードを作ってSilkブラウザで認識して開いたり、といったりもできる。カメラアプリにQRデコーダがついてればよかったのに。最短撮影距離がちょっと遠めなので小さいQRコードはピンボケして認識できない。

 理想的にはChromeがインストールできれば開いているタブの共有とかができて便利なんだけど。そうでなくても、せめてPC版Chromeの拡張としてSilkブラウザにURLを転送できるような機能があればいいのに。その拡張機能でLAN内でのファイル転送にも対応していればなお良し。まあ、そういう便利機能は無いので、工夫して頑張るしかない。意外と不便はしていない。


 URLの共有用に、PCでHTTPサーバーを立ててリダイレクトするようなプログラムを作ってみた。C#のHttpListenerで待って、指定されたURLに飛ぶJavaScriptを返すだけの単純な機能。HttpListenerは管理者権限が必要で、かつWindows側で任意のポートを開く必要もあるので、ちょっと面倒。あと、結構不便。PC側にうまくGUIを作り込めばもう少し便利になるのかもしれないけど。QRコードならPC側はクリック2回、タブレット側は新しいタブを開いてQRリーダーにアクセスしてカメラの使用許可を出して認識したURLをクリック。手間は多いけどスムーズに操作できる。


***


 GPSで言うところのECI座標系(20.3.3.4.3.3.2)、X軸を春分点に固定したECIじゃなくて、X軸を任意の方向に取る慣性固定座標系(=回転座標系(ECEF)に対して)という程度の意味なのかな。

 20.3.3.4.3.4曰く、衛星から受信機までの距離はECI座標系で計算しろ、とのことなので、そういうふうに処理

 ↑回転させない場合(ECEFで更新)

 ↑回転させる場合(ECIで更新)

 水平面の誤差が大幅に減って、水平面は分散の中心でほとんど正しい位置が得られている。


 対流圏遅延量のモデル

 横軸が高度[km]、縦軸が遅延量[m]。仰角90度なら高度7kmあたりで1m未満になる。このモデルだと対流圏を出たあたりでも傾斜としてはあまり変わらない。このモデルってどの程度の高度まで近似してるんだろう。


 ↑対流圏遅延量の補正なし

 ↑対流圏遅延量の補正あり

 若干改善。まだ少し高く出ている感じはあるけど、かなり良くなった。

 正解値は地理院地図から拾った緯度・経度・高度に、国土地理院のジオイド計算機で求めたジオイド高を足して、楕円体高に変換した数値をECEFに変換して、推定位置とのENUを求めている。つまりこの正解値は地面の高さを採用しているが、受信アンテナは2階のベランダから少し上げた場所に設置しているから、地面から6m弱の高さにある。そう考えるとほとんど誤差のない結果が得られていると考えてもいいかもしれない。

 適当に書いた復調・位置推定コードでこんなに確度の良さそうな結果が得られるなんて思ってなかったから、評価方法なんて考えてない。どうしたものか。


 時間ドメインでの誤差

 横軸が秒、縦軸が基準位置からのズレ(3D)。完全にランダムじゃなくて、数秒くらいの周期で振動している感じがある。


 測位計算を1kHz(受信機時刻系)で行って、1000ポイント(1秒)の動きをプロット

 ランダム誤差というよりふらふらと動き回るような誤差。キャリア/コードのトラッキングのパラメータを変えるとふらつき具合が変わるから、アナログ部の特性かな? アナログ処理の調整メンドクセ。。。

 そもそも、C/Aコードは1chipで300mだから、10mオーダーの精度にこだわってもあまり意味が……という感じがなきにしもあらず。とはいえ、位相は細かく数えようとすれば1/100くらいは行けるだろうし、短期的には5m程度の精度があっても良さそうな気もする。C/A位相(というか周波数)へのフィードバック帯域幅を減らして(フィードバックゲインを絞って)やれば固定受信で長時間の安定性は改善するはずだけど、今度は受信開始時のセトリングとか、動きながら受信した場合の特性が犠牲になる。本来は適当な運動モデルを想定して、それにあったチューニングをするべきなんだろう。固定受信ならしっかり絞った帯域幅で、自動車なら少し加速度を広めに、みたいな感じで。


 屋根の上に三脚で1m程度浮かせてGPSアンテナを置いて、なるべく物陰が無いように受信。10Hz60秒分をプロット

 7xGPS+2xQZSで9個の衛星を受信できて、DOPはG2.76,P2.29,H1.47,V1.76,T1.55と、かなり良くなっている。受信位置のLat/LngはPixel6aで撮影したアンテナ部の写真から、高さは地理院地図の標高とジオイド高、それと地面からの高さをレーザー距離計で計測したものを足している。ほぼ誤差無しで計測できている。若干南北方向にズレているかな、という気はするけど、十分誤差の範囲だろう。

 スマホのGNSSとは1時間差くらい(1時間くらいサンプリングして、解析は最初の1分程度、写真は撤収時に撮影)。上の図はWGS84空間での相対航法を見ている感じ。受信機の外側の長期的な誤差要因(衛星のクロックエラー、電離層遅延、対流圏遅延、等)は打ち消して、主にコード追尾や測位計算の誤差だけが見えているはず(スマホはGLONASSとかBeiDouとかも使っているはずだけど)。Google Pixelに乗っているちゃんとした受信チップで得た位置情報とほぼ差がないので、正しく測位計算ができている、と考えていいはず。

 ちなみに、屋根の上に登るときのはしごの長さは6m弱。サムはこの2倍弱の高さを登っているのか。そして僕はそれに対して「はしごが短すぎる!」とか言ってるわけか。


 復調処理は、9衛星の60秒分の復調で55秒(シングルスレッド、デバッグビルド)程度。かろうじて等倍以上、、、程度。衛星ごとにスレッドを分けてやればもう少し早くなるはずだし、リリースビルドにしてもだいぶ早くなるはずだけど。

 元々1分40秒くらいかかっていて、Complex32を(int,int)のタプルで似たような処理にすると結構早くなる(それが50秒台)。で、readonly record struct Complex32I(int,int)を作ってみると、1分台まで遅くなる。実はC#のstructって遅い? それともDebugビルドだから?

 OSが珍しい挙動の調子の悪さで再起動をかけたので、Visual Studioのプロファイラが使えるようになった。で、CPU使用率を見てみると、カーネルが99.8%位を占めている。このカーネルって何なんだろう。言語のコア部分とか? OSの起動時間が2,3日経つとまたプロファイラが使えなくなる。定期的に再起動しろっていう話なんだけど、地味に不便。



 GPSの測位計算で、ECEFでなくECIで距離を測る必要があるのは、光速度不変の法則(いわゆる特殊相対性理論)による効果なんだろうか?

 相対性理論がどれくらい身近であるかを説明する文章でGPSがよく出てくるけど、今まで触っていた範囲(af0、af1、af2、Δtr、のあたり)はすべてのユーザーが等しく同じように処理する必要があるから、本来はユーザーが行う必要がない処理のはず、という気がしていた。言うなれば’80年代の宇宙技術の未熟さによるものをユーザー(受信機)に押し付けたものであって、身近な部分(ユーザーセグメント)で相対論を処理する必要はないのではないか、と。

 ECEFではなくECIで計算しなきゃいけない、というのはユーザー固有の処理なので、このあたりはなんとなく「身近な相対論効果」っぽい感じがする。


 L5 SBASの話題で、コードの長期的なジッタを1usから1msへ広げる、というような話題が出てくる。L1 SBAS(静止衛星からの放送専用)の場合は衛星にはベントパイプを乗せてメッセージは地上で作るから、地上の高精度なクロックを使うことができ、非常に少ないジッタ(それでも距離換算300m)の信号を作ることができる。L5 SBASでは非静止衛星からの放送が追加されて(主に極地向けサービス)、ベントパイプではなくオンボードでメッセージを作るようになった。そうすると、コードの基準は高精度な地上のクロックではなく、オンボードのクロックを使うわけで、ジッタを増やす必要がある。どれくらいの範囲に広げればいいかというと、既存の測位信号と同じ程度に設定すれば、既存のクロックを流用できる。ということで、af0で補正できる程度の1msへ広げる、ということらしい。

 ということは、最近のミッション機器でも高精度なタイミングでの放送はできないのか。クロック(原子時計+水晶)と放送機器の間にNCOを1段挟んでやれば正しいタイミングで航法メッセージを出せそうだけど、そう簡単な話ではないのか。


 SBAS関連の細かい話、ググってもあまり出てこないんだけど、IS-GPS-200とかIS-QZSS-PNTみたいなドキュメントって公開されてないのか? SBASを作ったのがICAOだとすると、非公開かなぁ。


 日本で遊ぶならQZSS SLASを受信するのがいいのかな? これはたぶんドキュメントが公開されている。

 SLASはビットレートが高い代わりにCRCとFECで誤り訂正・誤り検出ができる。FECは畳み込み符号で拘束長7の171,133だって。おっ、ISDB-Tで見たやつだッ!


 測位演算もある程度のところまで来たし、気分転換にSLASの復調。

 試しに適当なコードを500spsでBPSK復調して、適当な長さ(とりあえず30秒)のブロックでビタビ復号(硬判定)してみると、プリアンブルっぽいビット列がチラホラと出てくる。ペイロードの中にもプリアンブルに一致するビット列があるから正確に250の整数倍のタイミングではないけど、いくつかの間隔を積算すれば750bit間隔で同じプリアンブルが現れたり、隣のプリアンブルと250bit差っぽかったり、という感じで、いかにもそれらしい雰囲気はある。

 SLASは1パケットの長さが1秒で、航法メッセージ(6秒)に同期して6個のパケットが送られてくる。航法メッセージにタイミングを合わせてSLASの3000symbolsをビタビ復号すると1500bitsが得られて、250bit毎の最初の8bitは概ねプリアンブルに一致する。頭に6bit分のゼロをパディングして256bit(32byte)にしたうえで、CRC24を計算すると、正しくゼロが得られる。このCRCはプリアンブルとかメッセージタイプも含めて計算するようだ。

 時々プリアンブルが正しくなかったり、CRCが正しくないパケットがあるけど、ビット反転させたら正しいCRCに戻ったりするので、デコーダのBPSK復調エラーらしい。20codes/bitの航法メッセージに合わせたデコーダだから、2codes/symbolのSLASのデコードはちょっと厳しい。現在は2symbolのコヒーレント積分が閾値未満になったらビットが反転したと判定する、みたいな処理だから、これが誤ると正しく復調できなくなる。1パケットより長い周期でビット反転が起きるのであれば、プリアンブルを見てパケット全体をビット反転させる、みたいなアルゴリズムでおおよそ除去できる(途中のパケットは復号できないけど)。これならBPSKの180度の曖昧さも除去できて一石二鳥。

 同期検波できているならビット反転の問題もないし、ビタビ復号で柔判定が使えるのだが、今のところFLLしか実装していない。同期検波も結局180度の曖昧さの解決判定が必要になるしな。十分なSNRが確保できる遊びの復調なら非同期検波のほうがはるかに楽に処理できる。/* 本物のGPS受信機(というかBPSKデコーダ)って搬送波の180度の曖昧さはどうやって除去しているんだろう? */

 SLASのビタビ復号は6秒ブロックで処理するより、もう少し小さいブロックで処理したほうがいいかもしれない。1秒周期の頭に6bit分を含めて、後ろはビタビ復号の収束用に32bit程度をつけて、SLASメッセージ1個毎にビタビ復号を行う。こうすればパディングビットをマスクして末尾を切り捨てれば直接バイト列として使えるから、CRC判定だったり後処理だったりが楽になる。CRCは24bitだから、ペイロードだけほしいならCRC判定後に3バイト分切り詰めればいい。

 ISDB-Tではビタビ復号用に1パケット(204バイト)の末尾が常に固定(同期ワード)という仕様だけど、SLASはそういう便利機能は無いのかな? 自分が実装したビタビ復号処理は簡易化のために一定のブロックサイズを頭からパスメトリックを計算して後ろからビット列に戻す処理だけど、本来は(専用の計算回路を作るのであれば)1symbolを入れたら少し前の1bitが出てくる、みたいな逐次処理になっているはずだから、そういう場合は末尾を固定値にするみたいな必要もないはず。SLASもそういう処理を想定しているのかな。あるいは、プリアンブルのパターン(3種類)は航法メッセージのタイミングと比較することで既知になるから、次のメッセージのプリアンブルまで含めて復調して、その時のレジスタ値を使うのかもしれない。


 久しぶりにISDB-Tもちょっと触りたいなー。ワンセグを受信して受信機のクロックエラーを推定するようなやつを作りたい(手持ちのRTL-SDR blogドングルのクロックエラーが5ppmを超えているような疑惑があるので、定量的に測る機能が欲しい)。

 あと、R820は1ppm単位でしか調整できないけど、Si5351Bを使えば外部電圧でクロックを微調整できるはずだから、ボリュームとかで調整できるようにすれば短期的には手動で1ppm未満のクロックが作れる。もっとも、VCO感度は55mV/ppmくらいらしいから、細かく追い込めるかは微妙だけど。Si5351ってどれくらい自由にクロックを作れるんだっけ? VC入力で微調整できる、コヒーレントな28.8MHzと10MHzが作れれば便利そうだなって。まあ、ウチには10MHz入力対応の計器なんぞはないわけだが。/* SIGのDSO、微妙にクロックがズレてるのがムカつくんだよなー。10MHz入力に対応していてくれれば。。。それがないのが廉価帯たる所以 */

 RTL2832はR820とかEEPROMにI2Cで通信できるし、確かlibrtlsdrにはI2Cを叩くようなコマンドもあったはずだけど、rtl_tcp.exeにはI2C系のコマンドがないのがちょっと残念。I2Cが使えればI2C制御のPLLを追加するとか色々遊べるのにな。まあ、そういう使い方をしたい人間なんて世界中でも2桁いるかどうか程度だろうし、そいつらのためにわざわざコード書くとも思えないし。ほしいなら自分でビルドしろって話だろうし。


***


 Excelでctrl-zがファイル間で共有な問題。

 Excelは普通に起動すると一つのプログラムで複数のファイルを開いている、という認識になるらしい。要するに見えないところでMDI(Multiple Document Interface)的な挙動になっているようだ。例えばタスクバーのExcelをホイール中クリックで新しいウインドウを開いた場合、それは複数のExcelが起動していても、内部的には一つのExcelのインスタンスであって、操作履歴も共有している。

 Excelの新しいインスタンスを作成するには/xオプションを与えて起動すればいい(自分の環境ではAlt押し起動は使えなかった)。例えばWin-Rでexcel /xを起動すれば新しいインスタンスで起動できる。

 それが面倒な場合は/xオプション付きのショートカットを作るという手もある。デスクトップで"C:\Program Files\Microsoft Office\root\Office16\EXCEL.EXE" /xのショートカットを作って、タスクバーにドラッグ・アンド・ドロップして、デスクトップのショートカットを削除、といった手順で、新しいインスタンスを起動するボタンをタスクバーに追加できる。そのボタンをクリックすると、Excelの新しいインスタンスを起動できる。ただし新しいインスタンスも古いインスタンスと同じグループに入る。


 Wikipedia曰く、最近のMS OfficeはMTI(Multiple Top-level Interface)と呼ばれるものらしい。複数のドキュメントでプロセスを共有するからリソース(メモリとか)の消費量を下げられる、ということらしい。

 事務用の低リソースなPCでも比較的快適に使えるように、ということでMTI設計になったのかな。特にRAM空間が狭いパソコンだと仮想メモリの退避が行われてパフォーマンスめちゃくちゃ落ちる、みたいな状況を避けたかったのかも。


 Excelのインスタンスを複数作った状態。1個で数十MBから100MB程度のメモリを消費するので、RAMに余裕のないPCで大量のファイルを開こうとするとちょっと厳しいかも。とはいえ、RAMに余裕のあるPC向けの機能(毎回インスタンスを用意する、操作履歴を分離する)があってもいいと思うんだけどなぁ。そのための/xオプションか。exeのプロパティでデフォルトのオプションを指定できれば便利だけど、そういう機能はなさそう。


***


 デスストで超弦理論って出てきたっけ? ゲーム内で「ひも」とか「ストランド」がキーワードになっているし、「ヒッグス」も出てきたけど、超弦理論は見かけてない気がする。DS2では小さいキャラクターが出てくるけど、ミクロな世界に降りていったりするんだろうか? ヒッグスは人名由来だからキャラ名に使いやすいけど、stringは使いづらそうだな。

/* デススト、車を引っ張るための「ストランド」がほしいよなぁ。物理エンジンの変な挙動で車がスタックすることがよくあるから、牽引できたら便利そうなんだが */


2024年10月30日水曜日

小ネタ



 地元で草。……地元? まあ、隣町も四捨五入すれば地元だろ…… 隣町と2つ隣町の合わせて2箇所。どっちも行ったことないけど(もちろん名前程度は聞いたことあるが)。


 にじさんじ NIJISANJI EN×アマノフーズコラボ開催!! - インスタント味噌汁・フリーズドライ食品(即席味噌汁・みそ汁) | アマノフーズ公式通販

 レオスとメロコが案件配信やってたフリーズドライ詰め合わせセット、試しにメロコセットをポチってみた。

 届いたので、とりあえずカレーを試食。150mlのお湯でちょっとシャバシャバな感じになる。中辛だけど結構スパイシーで、刺激の強いものが苦手なので単体で食うのはちょっときつい。レトルトのご飯(180g)と一緒に食べるとちょうどいい味&量。パックご飯とレトルトカレーを合わせて食べようとすると2回に分けて加熱する必要があるけど、フリーズドライのカレーならご飯を温めている間にカレーを用意できるから、結構便利。ただしレトルトカレーだとパックご飯の片隅に少しずつ注ぎながら食べたりすればスプーン以外の食器が不要であるのに対して、フリーズドライだと器を用意する必要がある。まあ、普通はそこまで切羽詰まって食うこともそうそうあるまいし……

 セットの他のカレーや味噌汁・豚汁も美味しかった。汁物はちょっと塩味が強い気がするけど、そのあたりはお湯の分量で適宜調整という感じで。

 この案件は受付期間が結構長くて、しかも注文したらすぐ発送してくれる(注文の翌営業日に発送された)。フリーズドライの食品はあまり食べたことがなかったので、とりあえず1セットだけ注文してみたけど、届いて実食したうえで、もう一度コラボ商品を追加注文したりできる。あと、届いた人のレビューを見た人が注文する余地もある。その代わりに受注生産の案件みたいに特典がついているわけでもないけど。まあ、受注生産で発送まで2ヶ月かかるような商品でも入ってるのはチェキ風カード程度だしね。案件配信としては、気軽に注文とか再注文できるようなこういうタイプの販売形式のほうが好き。



 Gmail、広告を表示するために受信したメールの時系列をデタラメにする馬鹿みたいな機能どうにかしてくれんかなぁ。最近のGoogleは結構高い頻度で頭の悪いことをやらかす。


 WindowsSearchHostが中断または応答なしとなり検索ができない。 - Microsoft コミュニティ

 スタートメニューの検索ボックス(おそらくタスクバーの検索ボックスも)が使えない問題。

1) Google IMEからMS IMEへ切り替える

2) SearchHost.exeのタスクを停止する

3) 検索ボックスに適当な文字列を入力する

4) Google IMEへ戻す

 で治った。ような気がする。3を省略するとまたSearchHost.exeが応答しなくなるから、適当な文字列を突っ込んで一旦呼んでおく必要がある。Googleが原因かぁ。。。


 Pixel6aに保護フィルム(ガラス)を貼ってみた。シートの付属品がかなり色々ついていて、貼り付け用の治具とか、アルコールシート、レンズクリーナー、ペリペリはがせるシール(ホコリ除去用)など。その割に説明書がペラペラで内容がかなり薄い。治具の使い方の説明とかも書いてないし。おそらくQRコードから動画を開けばいいんだろうけど。

 結構気をつけて作業したけど、3個ほど埃が入ってしまった。小さいけど目立つねぇ。

 ゆっくり作業するとその分埃が落ちる確率が高くなるから、手早く作業するべきだったんだろうな。あとは、入浴して体を清めてから薄着で作業するとか。作業領域の周りにろうそくを何本か立てるとか…… どんどん儀式っぽくなってくる。短気な神様が相手と考えるとちょうど良さそう。化物語の登場人物達がスマホの保護フィルムを貼る薄い本。


 GPSロガーに使っている単4のNi-MH、なんか容量がすげー少ないような気がする。電池残量結構多いはずなのに低電圧で電源落ちることが2度ほど。電池の寿命かな? Ni-MHの寿命ってどうやって測ればいいんだろう。1Ω3Wくらいの抵抗を繋いで無負荷時と電圧を比べて、降下が大きければ(ESRが大きければ)寿命と判断する、みたいな感じだろうか。1A程度を流せる電池ボックス…… 本来は満充電のセルから1V付近まで放電させて電圧と電流の積和を取って容量を直接測るほうがいいんだろうけどな。結構手間がかかりそう。

 本職の人たちが「充電池なんて信用できねぇ(CR123なら新品のセルを突っ込めば確実に使える)」といってた気持ちがなんとなくわかる気がする。再利用できる(使い捨てでない)やつを買うと捨て時を見失う。


***


 GPS、RF受信から擬似距離を経てアンテナ位置の計算まで、とりあえず動くようになった。4週間くらい前の地点までようやく戻ってきた。長い回り道だったぜ…… キャリアへの位相ロックを省略したり、色々手抜きだけど。

 前回は航法メッセージの送信時刻を固定として受信時刻から擬似距離を測っていた。要するにサブフレームが始まったタイミングの受信機時刻を擬似距離として使用していた。時刻分解能は1/sps(≒0.42us≒125m)に制限される。今回は任意の受信機時刻におけるサブフレームのタイミング(+GPS秒数)を擬似距離として使用している。内部的にはNCOでC/Aコードを出しているので、1/spsより細かい時刻分解能がある。実際にどの程度の精度が得られるかは怪しいところではあるけど。

 クロック補正だけ適用して正解値との誤差が100m強、相対論を適用して60m弱。

 電離層遅延を補正して50m弱。微妙な違いだけど、効果はある。電離層遅延を使わない場合、ENUで34m、9m、47m、位の誤差だったのが、電離層遅延を使うと37m、15m、22mと、上下方向の誤差が半減する。その分3次元的に平均的な誤差になる。東西方向の誤差が大きいけど、このときは7機の衛星(5xGPS+2xQZS)の内、東側にいたのは1機、北側にいたのも1機で、5機は南西側に固まっていたから、衛星配置はあまり良くなかった。その影響で東西の誤差が大きめに出ているんだと思う。

 GPSからは電離層モデルは12.5分に1回しか送られてこないから、昼間にコールドスタートした受信機は最大で10分から15分程度待たないとある程度の精度の単独測位ができない(夜間であれば固定値なので情報を受信せずに補正できる)。UTC時差(主にうるう秒)も同じペースなので、起動してからしばらくは協定世界時ではなくGPS時刻を出力することになる。とはいえ、GPSのうるう秒の挿入は最大2^8週(約4.9年)先まで指定できるから、数週間前に受信したうるう秒の値があれば、UTCに比較的近いGPS時刻を出力できるはず。GPSのうるう秒の通知ってどれくらい前から実施されるんだろうか。というかうるう秒の挿入・削除ってどれくらい前から決定してるんだろうか。100年に1度程度の挿入へ変更すると「数年前から計画できる」とのことだから、今の1秒差未満の条件だともっと短期間でしか推定できないんだろうな。夏に急に台風が来て慌てて冬にうるう秒を入れたりみたいなこともあったんだろうか? 今後最大10年程度はうるう秒が使われるはずだし、廃止される前に1回くらいは受信しておきたいな。/* もしかしたら電離層とかUTCのパラメータはSBAS経由で頻繁に出ているのかもしれないけど */


 地理院地図の標高って、いわゆる「標高」なのかな? ジオイド高を足して楕円体高に変換したうえで、GPSで求めた位置座標と比較すると、高度方向の誤差が+22m→-10mに変わって、ENUの距離も40m強まで(数m程度)改善する。

 このあたりまで来ると、瞬時値(ある特定のタイミングで測定した擬似距離)を使って評価するのはあまり適切とは言えないな。もう少し長い時間、数秒から数十秒・数百点から数千点のサンプルで評価したほうが良さそう。


 ということで、10Hzで500ポイントくらい計算。

 ↑電離層補正無し

 ↑電離層補正有り

 上下方向がかなり改善している。水平方向は若干東側にずれる。もう少し大きく補正すると上下方向はほぼピッタリになりそう。対流圏遅延かな。

 位置は綺麗に分散するのではなく、楕円形に固まっている。北東・南西に長い楕円なのは、衛星の配置が南西に固まっていて、かつ北北西と南南東に衛星が1基ずついるから、北西・南東の向きは拘束できている、という感じかな。衛星の配置が適切であればもう少しきれいな球に固まりそう。このときのDOPはGDOP4.98, PDOP3.93, HDOP2.54, VDOP2.99, TDOP3.05、くらい。HDOPは結構いい数字。北東側に衛星がないからもっと悪そうな気がするけど。測距精度が0.1チップ程度としてPDOPを掛けると120m程度。実際の測距精度を40mとしてPDOPで割ると測距精度10m(0.033チップ)程度、といったところか。まあ、妥当な感じかな?

 ちなみに、電離層補正はQZSから得た値を使っている(先に航法メッセージを取り込んでから測位するので、距離的に遠いQZSの補正値が保存される)。GPSから得た補正値を使うとさらに5mくらい下がって、上下方向がより正しい位置に近づく。GPSとQZSの補正値、どっちを使うべきなんだろうか。QZSは日本地域向けの補正情報を出しているから、World補正値は日本周辺の重みを多少減らしていそうな気もする。



 物の本で、測位に使うGPS衛星の位置(時刻)を未知として扱っているのが謎い。受信機の時刻にクロック誤差と伝搬時間を加味した時刻でGPS衛星の位置を計算して、位置計算に使用する、という流れらしい。しかし、ある受信機時刻に受信した航法メッセージは、そのメッセージが送信された時刻が100ns程度の精度でわかっているわけだから、その時刻の衛星位置を使うことができるはず。

 測位でサニャック効果を含めなきゃいけない、というようなことも書いてあるけど、いまいちよくわからない(ググってもGPS/IMUのFOGとかRLGの話ばっかり出てくる)。確かにECEFの座標系は慣性空間の回転しているから、光速度が(見かけ上)変化しそうではあるが。


 GPSの本、「GPSのための実用プログラミング」(2007)より新しいこの手の本(お手頃価格)ってないんだろうか? 軽くamazonで探した感じだと見当たらない。1980年代の技術がここ10年で急激に変わったみたいなこともないだろうから、わざわざ新しく出版するようなものでもないということなのかな。それ以降だとオンラインでの情報共有が活発になったから本にしなくても、という可能性もありそう。


***


 C#で0xFFFFFFFF << 32の結果が0xFFFFFFFFになるのって直感に反する気がするけど、これってどういう処理になってるんだろう? シフト幅は下位5bitしか見てないから0bitシフトとして計算される、みたいなことなんだろうか?


 ビットごとの演算子とシフト演算子 - 整数型の個々のビットに対して、ブール演算 (AND、NOT、OR、XOR) とシフト演算を実行します - C# reference | Microsoft Learn

 上の方のシフト演算子の説明に何も書いてないからそんな制限はないはずなのに、と思ってたら、下の方に書いてあった。intとuintは5bitだけ、longとulongは6bitだけ使う、とのこと。もう少し上に書いておいてくれませんかねぇ。。。


 operators - Why would a 32 bit shift in C# return the value it was originally shifting? - Stack Overflow

 こういう実装を採用した確たる理由は書いてないけど、環境依存を減らしたいんじゃね?みたいなことらしい。32bitのシフト命令には右オペランドの下位5bitしか見ないCPUがあるから、そいつに合わせた、みたいな。そういうCPUで1<<32を0にするには左シフト命令を呼ぶ前に右オペランドが32以上の場合は0を返すような分岐処理が必要になるから、そのコストを避けたいってことなのかな。

 切り捨てするのもそれで追加コストかかるだろ、とも思うけど、分岐するよりはandのほうが軽いからそっちを優先したのかな。大抵のCPU(で走るランタイム)は切り捨てたりする必要ないから、32bit幅の右オペランドをそのまま使うほうが楽そうだけど。


***


 WindowsからBluetoothで他のデバイスへファイルを転送するやつ、fsquirt.exeにファイルをドラッグアンドドロップすると送信モードでファイルが選択された状態で起動する(ターゲットデバイスをダブルクリックすれば転送が始まる)のに、コマンドラインとかで適当なファイルパスをオプションに与えてもその通りに動作しないの、謎い。なんでだ。Windowsで割り込んでなにかオプション追加してるんだろうか?


 Fast Bluetooth Sharing From Windows- CodeProject

「"fsqirt filepath"で送信できるよ」とのこと。実行ファイル名間違ってるが。本当に送信できるんだろうか。


 レジストリを見てみるとHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\BTHENUMの下にDev_XXXXXXXXXXXXみたいにデバイス固有の16進12桁のフォルダがあるから、fsquirtでデバイスIDとファイルパスを指定して、ドラッグアンドドロップするだけで特定のデバイスに送信してくれたら便利だな、と思ったんだけど、そうもいかないらしい。


 fsquirtってWin XP SP2あたりで入った機能なのかな? SP1の頃は対応デバイスが少なくてテストしきれないからSP1にはBluetoothのサポートは入らない、みたいな記事があった。SP1より後にWindows Updateで入ったのか、あるいはSP2で入ったのか。

 en.wikipedia曰くSP2ではBluetoothの部分的サポートを追加だそう。とはいえ、fsquirtの古い記事は2004年頃の物が出てくるから、SP2(2004年9月)から乗ってそう。20年前のアプリかぁ。ちなみにSP1(2002年9月)ではUSB 2.0のサポートが追加されているらしい。この当時だと実効100kB/s程度でもBluetoothのワイヤレスファイル転送は(対応デバイスが十分にあれば)魅力的だったんだろうなぁ。今の時代だと相当低速だけど。


***


https://www.chuden.co.jp/resource/seicho_kaihatsu/kaihatsu/kai_library/news/news_2000/news_76_N07615.pdf

 2000年? 中部電力で、モノリシックRLGとサーボ加速度計を使った可搬型のIMUを試作。

 電力会社は送電線の保守とかで森林の中を歩き回らなきゃいけないけど、ナビゲーションに問題があるので、IMUで解決したいみたいな方向性(この頃のGPSは樹冠の下では厳しいらしい)。


2024年10月23日水曜日

小ネタ


「卓上で半導体製造」実現を目指すミニマルファブ、研究開発や教育向けで導入加速:CEATEC 2024 - MONOist

 展示会の様子だけ見ると機械の間隔がすごく広くてめちゃくちゃ場所を食うイメージだけど、実際はピッタリ並べられるんだな。


 Discover DMQP Vol.3 圧入式ツーリングシステム「powRgrip」 - YouTube

 2分32秒あたりでERコレットの作業の様子。トルクレンチも泣いてるよ。。。

 袖とか手袋の感じが同じだから、DMGの社員が作業してる様子を撮ってるんだろうなぁ。技術スタッフじゃないから工具の使い方を知らないとしても、周りで見てる誰か、工具の使い方くらい教えてやれよ。メーカーのスタッフも近くで見てるだろうに。



 デジイチを久しぶりに使用。SONYのデジイチはLIBを本体に入れてなくてもすぐに放電するな。ペンタは本体に入れっぱなしでも全然放電しない。

 GPSモジュールを使おうと思って探しても見当たらなかったので、GPS無しで撮影。終わってから改めて探したら、前に棚回りを片付けたときに別の場所に移動していたことが判明。これだから片付けなんかするとどこに何があるかわからなくなるんだよ。。。


 10月16日。60mm(@APS-C)くらいで撮影。ND代わりにつけっぱなしにしてたC-PLを忘れていた。外せばもっとSNR良く写ったのに。



 最近、Chromeでリンクを新しいタブで開くときに、同じページが2回開かれていることがある。中クリックのチャタリングかな? Razer君さぁ。。。

 左右クリックはRazerロゴのマイクロスイッチだけど、中クリックはTTCロゴのマイクロスイッチ。そういうところでケチろうとしてBOM増やすから製品の質にしわ寄せが。。。スルーホールだから取り外すのも面倒そうだ。どうしたものか……

 Razerのマウス、信頼性低すぎてどうにかしたいんだけど、とはいえ側面12ボタンのワイヤレスマウスも種類がないからなぁ。Corsairの製品があるらしいけど、日本では正規ルートの販売は無いのかな?


***


 久しぶりに大量のフレーミングパルス

 およそ1時間半の間、数多く受信できた。F1とF2の角度はどれも同じなので、コヒーレントなトランスポンダから送信されたものと考えられる。ほぼ同じタイミングでコード1200とMode-Cも受信できている。ただし1200が出ていても0000が受信できていない時刻もある。0000や1200が受信できるときでもMode-Sは受信できないから、Mode-S(&ADS-B)非対応機らしい。


 Xビットを含むリプライ

 赤い点がXビットを含む応答で、3273X(3/A)がいくつか出ている。同じタイミングで2370(3/A)が大量に出ているのと、1524(FL340)が出ている。背景塗りつぶしの緑はデコードに失敗した応答(大部分はMode-S応答、いくつかはMode-3/A/C応答)。1524、2370、3273X、それとMode-S信号は振幅がほぼ同じで、時間変化で信号強度が変わっても、連動して変化する。

 1524を拡大すると最初に連続的に変化しているから、Mode-Cの可能性が高い。最初に受信した応答はFL328だから、山の向こう側から現れたと考えるべきか。

 距離が離れると信号強度が低下して、トリガされなくなると以降は記録されなくなる。それに先立ってMode-3/A/C信号が復調できなくなり、すべて復調失敗として保存される。復調に失敗した波形のうちいくつかはMode-3/A/Cの波形であり、手動で復調すれば先に受信できていたコードと同じ応答が得られる。

 この時刻をFr24で再生してみると、ANAのB738が、スコーク2370、気圧高度34,000ftで飛行している。

 つまり、少なくともMode-3/Aの2370応答、及びMode-CのFL340応答はこの機体から出たものであると考えて良いはず。Mode-3/Aの3273Xも、タイミングや信号強度が一致している点から、この機体から出力されたものと考えていいはず。

 2370応答が受信できていた期間中、数は少ないが同じタイミングで3777(3/A)や、1個だけだが3171(3/A)も受信できていた。角速度(1bit毎の位相回転)や振幅から考えて、これも同じ機体からの応答と考えられる。

 つまり、この機体のトランスポンダに何らかの不具合があり、数は少ないが、設定されたMode-3/AコードやMode-C高度と異なった応答が行われていた、という可能性がある。


 別の機体

 Mode-3/AとMode-Cの応答の途中でいくつかのコードがパラパラと出ている雰囲気。コード/高度からするとJALのB738らしい。


 また別の機体

 重なっているけど、直線状のMode-3/Aと傾斜しているMode-Cが出ていて、時々いくつかのコードが出ている。Mode-3/AからするとJALのB738らしい。このトランスポンダは7777が複数個出ていたり、Mode-3/A/Cとして壊れているリプライ(フレーミングパルスが足りない)だったり、変な応答がかなり多い。角速度が正常なMode-3/A/C/Sと同じだから、同じ機体からの応答。

 翌日の同じ時間にも同様に7777等が出ていた。おそらく同じ機体で、同じトランスポンダのはず。再現性がある誤応答らしい。


 ログを見ていると時々低頻度で出てくるMode-3/A/C応答、デコーダ側の誤デコードだろうと思ってたけど(実際、誤デコードも多いけど)、それなりの確率で明らかに異常な応答が出ているらしい。

 飛行機のトランスポンダってものすごい高信頼性な物だと思ってたんだけど、実際はそうでもない? 受信側(ドングル)の安定動作範囲(2.4Mspsまで)を超えた範囲(約2.76Msps)で使っているからそれが原因という可能性もあるけど、とはいえコヒーレンシー(位相が直線状に乗る)とか同じ応答が複数観測できるとかを考えると、受信側の問題はあまり無いはず。

 これだけ大量に誤応答が出てくるってことは、ENRIあたりの資料を漁れば出てきそうな気もする。気が向いたら探してみよう。


 リプライのサンプリングはMode-3/A/C狙いで約2.76Msps(1.45us/bitの4倍)に設定しているから、Mode-S(マンチェスタ/BPPM、2Mbaud)のデコードには不適。Mode-Sのデコードを行うなら4Mspsくらいほしいところだけど、3Mspsとか、アルゴリズム次第では2Mspsでも可能らしい(かなり大変そうだけど)。せめてICAOコードだけでも取得できれば、誤応答を連発するトランスポンダでMode-S対応の場合は、誤応答を多く出す機体番号を自動で取得できるんだが。電波品質を見るような目的でやるなら10Mspsとか20Mspsとか、高いサンプリングレートが欲しいな。

 まあ、それを取得したところでどうするんだという話ではあるけど。航空会社に「御社のICAOコードXXXXXXの機体のトランスポンダが調子悪いっぽいですよ~」とか言ったところで対応してくれるとも思えんしな(運用上の問題がないからそのトランスポンダを使い続けているわけで)。



 途中でコードが変わった機体

 Mode-3/AとMode-Cのリプライ。1200で飛んでいた機体が途中で1563になった。航空大の機体で、旭川空港でタッチアンドゴーを繰り返していた。旭川空港付近では1200で、ある程度離れたところで1563に変わった。Fr24で見ると、旭川空港と帯広空港でいえば旭川空港に近い側で、大雪山系-日高山脈のラインより東側。

 パルス列はコヒーレントだけど、直線状ではなく、周波数変動がかなり大きい印象。とはいえたかだか20us程度でここまで大きく暴れるってこともそうそうありえないはずなんだけど。

 PAの発熱が水晶に戻って発振周波数が変動する、みたいなメカニズムはあり得るけど、それでも熱移動で駆動する以上、ある程度大きな時定数が必要になる。マイクロ秒オーダーだとかなり厳しい気がする。小型機に乗せるような小さいトランスポンダなら基板のPAの裏に水晶が乗っていて熱的にほぼ直結、みたいな可能性もあるけど、それにしたって基板を貫通できるだけの時定数が必要だし。

 あるいは、電源がヘタってる、という可能性もあるか。RF系は大電力のパルス放電なので、一旦キャパシタに溜めてPAに入れているはずだけど、TX電源が容量抜けすると送信中に上流から引っ張るから電圧低下が伝搬して、発振周波数が引きずられる、みたいな。この場合、熱容量で平滑されないから応答性が高くなる可能性がある。ただ、この場合はF1に比べててF2は送信出力が低くなるはずだけど、振幅を見る限り電力の変動はほとんど見られない。RF電力でほとんど影響のない範囲でも発振周波数である程度変動する可能性はあるけど。

 F1側は20deg/1.45usくらい、F2側も同様に20deg/1.45us程度(ただし符号が逆)として、20deg/360deg/1.45us=38.3kHz程度。2倍で80kHz程度。1090MHzに対して75ppm弱程度の変動。結構でかい。


 JALの機体。このあたりをこの高度で飛んでいるのは見たことがない気がする。この機体はもちろんADS-B out対応機なのでFr24でも見える。まっすぐ滑走路に進入していった。旭川空港に南東から進入するルートは、普段はもっと西寄りの経路を通るはず。FL40くらいのMode-Cが受信できていたので、AGL1km(未校正)程度か。


 21日の午前中にかなり大きな音がした。回転翼機みたいなバタバタした音じゃなくて、ジェットエンジンみたいな音。自分は見れなかったけど、目撃者曰く「戦闘機が3機」だそう。まあ、その人はシルエットで機種を判断できるような知識のある人ではないから、本当に戦闘機なのかも怪しいけど。

 当時のログを見ると、Mode-3/AとMode-Cがパラパラと受信できていて、ほぼ同じタイミングで3種類のMode-3/Aと、心の目で見ると3つのMode-Cがあるような気がする。2分半程度でMode-3/A/Cのみ(Mode-Sは無し)。


 近くに飛行機がいるかどうかは1090MHzを見れば(運が良ければ)わかるけど、その飛行機がどの方向にいるとか、どういう機体か、みたいな情報はほとんど得られない(Mode-Sを受信できればICAOコードが取得できるし、ADS-Bを復調できれば位置情報も得られるけど、未実装&ICAOコードから機種への紐づけはまた別問題)。

 どちらかというと、MGSのサラウンドインジケーターみたいなモノが欲しいんだよな。方向と音量を可視化するようなシステム。パワースペクトルが見えれば、ヘリコプターなのか、ターボプロップなのか、ターボファンなのか、みたいな情報もある程度得られるはず。ゲーム内のサラウンドインジケーターは周方向が方位、半径方向が音量だけど、半径方向にスペクトル、輝度で音量、みたいな表示にすれば、方位とパワースペクトルを表示できる。分解能の低い低周波側を内周に、分解能の高い高周波側を外周に、という感じで。問題はビームフォーミングだが…… 大量のマイクを並べなきゃいけないからオーディオインターフェースが大変そうだ。

 音を視覚的に表示するインターフェースは例えば潜水艦のソナーが考えられるけど、こちらは方位と時間を2次元に表示して輝度で強度を表示している。スペクトルはカーソルで選択した信号源を別画面で表示する、みたいな感じだったはず。これはスペクトル情報の重要度が低いというわけではなく、単に歴史的な由来のような気がする。ソナーにCRTを組み合わせた頃は容易にスペクトル解析を行う方法がなくて、まずは方位と時間だけ表示して、その後で周波数解析ができるようになったら追加で画面を用意して、みたいな感じだったんじゃないかな。

 とりあえず方向はわからなくてもいいから、パワースペクトルだけでも見れると便利なはず。周波数だけでも把握できれば、飛行機の機種もある程度判別できるはず。旅客機(ターボファンエンジン)は音が似てるとか、プロペラ機はスロットルレベルでピークが移動するから判断しづらいとしても、ヘリコプターは機種ごとに結構違うはず。さすがにUH-1とAH-1くらい似てるとパワースペクトルだけで判別できるかは微妙な気もするけど。パワースペクトルの表示だけならさほど面倒ではないはず。C#でやろうとするとマイク周りのインターフェースがちょっと厳しい気もするけど。最悪、オシロスコープをFFTモードで表示してPCから定期的にスクショするだけでもいいし。問題は屋外に設置するマイクの耐候性だが……


***


 GPSの相関器のDLL(Delay-locked loop)について、なんとなく分かったような気になっているので、メモ。例のごとく素人考えなので間違ってるかもしれないけど。

 Phase-locked loop(PLL)は位相(Phase)を固定するもの。Frequency-locked loop(FLL)は周波数(Frequency)を固定するもの。Delay-locked loop(DLL)も同様に遅延(Delay)を固定するもの。

 例えばデジタルデータをデータとクロックの2本の配線で送る場合、周波数が高くなるとデータとクロックが同時に届かなくなってくる。このズレ(遅延・Delay)を調整するために使うのがDLL。この用途の場合、DLLは単なる移相器と考えればいい。

 DLLをロジックで作る場合、シフトレジスタを大量に並べて、シフトレジスタ間からのタップをスイッチで切り替えることで遅延量を決める(最大の遅延量はクロック速度とシフトレジスタの数で決まる)。通常、外部から入る信号に対する遅延を固定する場合、DLLの最後のレジスタの後ろから出てくるデータはそのまま捨てることになる。

 GPS(というかCDMAのコード)をDLLで再生する場合、ウロボロス的に後ろから出てきたデータ列を再度DLLに戻す(シフトレジスタでDLLを組めば劣化なしにループさせられる)。1クロックごとにシフトレジスタで1段ずれるから、N段のDLLであればNクロックで1周する信号列が得られる。

 例えば10230段のシフトレジスタに10.23MHzのクロックを入力すれば(適当な初期値を設定しておけば)1kHzで回る信号列が得られる。このシフトレジスタ列からのタップに対してEarly/Lateの差をフィードバックすれば、0.1chip(30m)分解能でレプリカの位相を制御できる。スイッチは基本的に固定だから(E/L差のフィードバックがあるから多少の速度で回る)、ハードウェア内で高速に信号を振り回す必要がない(シフトレジスタをブン回す必要はあるけど、直線的に流すだけ)。

 つまるところ、この手のDLLは発振周波数が固定のNCO(1bit・任意波形)と考えれば良い。そしてこのDLLへのフィードバックはNCOの位相に対する加算・減算指示と等価。NCOはレジスタ値をテーブルのアドレスとして使うから、パラレルバスを高速に駆動する必要がある。DLLであればシフトレジスタは高速だが、制御信号は低速でいい。

 それと、NCOは初期値をテーブルに流し込む処理が必要になる(GPS32個なら4KiB程度なのでROMで持てないこともない気もするけど)。DLLも初期値を与える必要はあるが、DLLの頭にスイッチを置いて、自身をループさせるか外部から読み込むかを選択できるようにして、外部のGold符号発生機から読み込ませることができる。C/Aコードの場合は10bitのLFSRを2個並べて1.023MHzのクロックを与えるが、片方には1024回に1回クロックを遮断するスイッチを設ける(10bitのカウンタがオールクリアorオールセットでスイッチを切ればいい)。こうすると約1kHz周期(1クロック遅れるので約999.02Hz)で1個のPRNが出力される。1回毎にG1/G2の遅延が1段増えて、1.024秒毎に1023個のGold符号が出力されるから、適当なタイミングでDLLのスイッチを符号器側に設定してやれば、PRNをDLLに流し込むことができる。任意のPRNを取得するのに最悪で1秒以上かかるけど、当時の受信機はスキャンNch+トラッキング4chみたいな構成だろうから、衛星切替時はスキャン用相関器のDLLからトラッキング用相関器のDLLにコピーすれば、任意のタイミングで切り替えができる。

 DLLをクロック再生に使う場合でも、DLLをループさせて使うような用途があるらしい? DLLの後ろからDLLに戻して適当な位置からタップすれば固定周波数・可変位相の発振器として使えるけど、適当な位置からタップしてDLLに戻してやれば可変周波数・固定位相の発振器として使える(ループ位置とタップ位置を変えれば可変周波数・可変位相にもできる)。送信側と受信側のクロックに多少のズレを許容しているシステムだと、フレームの先頭に同期用のビット列がついていて、この周期を保存するのにDLLを使うらしい。周波数がある程度固定であれば、入力側のシフトレジスタはシンプルに遅延させて、後ろ側の適当な位置でタップすれば、ある程度の範囲で周波数を可変できるクロックジェネレータが作れる。



 QZSSのL1 C/Aって将来的に廃止されるのかな? 1RではC/Aを放送中だけど、5以降ではC/Aを放送せずC/Bを放送し、5を打上げたあとは1RもC/Aの放送を終了してC/Bを放送するらしい(いちおう、5以降もC/A送信能力は残っているらしい。サブキャリアのON/OFFで切り替えられるってことだろうけど)。

 C/Bってどんな信号なんだろ。ぐぐってもわかりやすい解説はあんまり見かけない。GPSの文脈で探しても出てこないから、QZS用の信号なんだろうか? C/Bを使う理由もよくわからない。「よくわからない」とか「なんで変えるのかわからない(既存の別の信号との差別化ができない)」みたいな感想もいくつか見かける。

 C/BがQZSだけの場合、アメリカからの政治的な圧力とかあったのかな、とか邪推してみたり。GalileoがL1 C/Aに互換性がないのは米国が管理できないGNSSで米軍への攻撃を誘導されるのが嫌だから(周波数で分離すればジャミングできる)みたいな理由だったらしいけど、準天頂衛星システムは対地同期軌道(日本やオーストラリア、東南アジアの東側)でサービスを提供するから、米軍への大規模攻撃に使用される状況は想定しておらず、L1 C/Aが許されていたが、昨今のこのあたりの情勢を考えるとQZSのカバレッジの中で米軍が大規模に展開する可能性が出てきて、嫌がられたのかも。

 邪推に邪推を重ねると、そういう場合にL1のC/A以外を妨害したうえで、L1 C/Aはどうするんだろう。最近のGPS衛星にはS/A機能は乗っていないけど、米軍が本格的に参戦するようになったときに、C/A信号はどうするんだろう? そもそもC/AはCoarse/Acquisitionの略で、Pコード(10.23Mcps・7days)の非常に長い拡散符号を捕捉するためにC/Aコードで大まかな位置を掴むことが目的だったわけだけど、信号処理の発達でC/Aコードに頼らずにPコードを捕捉できるようになった現代では、軍内部でC/Aコードの重要性が相対的に低下しているわけで、S/Aが有効化できない以上はC/Aコードの放送を停止するみたいな方向になるのかな? あるいは、衛星にS/A機能がなくたって、地上セグメントからクロック補正に適当な誤差を投げてやれば同じような機能が作れるしな(C/AコードとPコードで異なる航法メッセージを放送できるのであれば。送信機は冗長系で切り替えられるだろうから、C/AとPで別の変調器に接続すればできそうな気がする)。S/Aが廃止されてDGPSインフラがどんどん廃止された現在、再びS/A的な機能が有効化されると社会的な影響も大きそうだ。とはいえ、その「社会」はアメリカではないし、戦争中のアメリカが他国の社会を気にするかというとな…… そういう諸々が嫌になったからQZSS単独で測位できるように数を増やそうみたいな話にもなったんだろうし、各国が独自の測位システムを作る理由でもあるだろうし。そうやって増えたGNSS衛星群は平時では測位精度の向上に直結しているけど。

 いちおう、QZSSがL1 C/Bを使うのは、L1 C/Aを使う衛星(GPS衛星やSBAS衛星)が増えたために干渉レベルが上がったのでQZSが出ていく、みたいな理由もあるらしい。C/Bのほうが性能がいいというわけではなく、C/Aの性能を落とさないために、という消極的な理由らしい。SBASは航空機等で使うシステムだから今更変えるわけにもいかないんだろうけど、最初っから測位信号(航法メッセージ)と補助信号(SBAS)はスペクトルで分離しておけばこういうトラブルはなかったはずなんだよなぁ。SBASは航法メッセージと互換性がない(変調方式・変調レートが違う)から、元々C/AとSBASの互換性はさほど大きくないはずだし。当時は相関器のコストが高かったから、そこだけでも共通化すればだいぶ楽になる、みたいなことなのかもしれないけど。


***


 C#の変数(特にタプル)の初期化で、(int i, int j, int k) a = default with { k = 123 };みたいな文法が使えたら便利なときがありそうな気がする。プリマリコンストラクタで初期化するときに、ほとんど全部は初期値(ゼロとか)でいいんだけど、一部だけ特定の初期値を設定したいというときに、他の全部にも初期値を与えるか、あるいはコンストラクタメソッドを作って一部を上書きする、みたいな行為が必要になる。


2024年10月16日水曜日

小ネタ


 2025年度の探査機打ち上げ断念 エンジン爆発影響、搭載機をH3に変更し28年度に - 産経ニュース

 SLIMといい、乗り換えが多いわね。PLANET-Cも元々はM-Vの予定で開発していたのにロケット側の都合(運用終了)で液体ロケットに乗り換えたし。最近のISASのミッション規模は固体でやるにはちょっと厳しそう。

 DESTINY+は順調に進めばイプシロンで打てたんだろうけど、とはいえイプシロンSの飛行テストを行う前に(次のロンチビークルが用意できる前に)イプシロンの運用を終了する意思決定とか、ISASの組織としての問題もあるだろうし。その点ではM-Vも、後続機の影も形もない頃に運用を終了してるしな。イプシロンはH-IIAの運用とも連動しているからISASだけで決められる話ではないとしても、それならそれでH3の開発とH-IIAの運用終了はだいぶ前から既定路線なんだから、イプシロンSをもっと早く作り始めるみたいな判断もできただろうし。イプシロンが残ってたとしてDESTINY+のミッションに使えるかは別としても。

 大学の研究室が会議室で意思決定する、みたいな流れは最初の頃の宇宙研では有効だったんだだろうけど、ここ四半世紀のミッション規模ではISASの組織運営は無理がありそう。ASTRO-Hの事故だってそういう環境が少なからず影響していただろうし。LUNAR-AやPLANET-BやASTRO-Gみたいに背伸びしてうまくいかなかったミッションも多いし。ASTRO-Eみたいにロケット側で失った例もあるし。MUSES-Cはかろうじてミッションを達成できたから美談になってるけど、首の皮一枚といった感じだし。SLIMも最後に転んだし。

 ISASの比較的大型の衛星・探査機で、大きな問題がなく長期間運用できたやつって、ここ20年だとASTRO-F、SOLAR-B、SELENE、SPRINT-A、はやぶさ2、ERG、位しかないのか。IKAROSは運用期間は長いけど、そもそもISASの尻拭いみたいなミッションなので除外。ASTRO-EIIは含めるか微妙なところ。20年で6機は十分と見るか少ないと見るか。そもそも最近は打上げた数が少ないとか、その元を辿れば国の予算配分とか、そういう方向にもなるんだろうけど。/* ISASの宇宙機一覧のページ、いくつか足りない気がするんだが、広報も手が足りてないのか */


 SAOオルタナGGO14、久しぶりの続編。SAO本編は最初の方しか読んでない(アニメはかろうじて2期あたりまでしか見てない)からよくわからない点がいくつか。そりゃ公式同人誌なんだから本編知ってなきゃわからん場所もあるわな。バトルシーンとかは、まあ、いつも通りかな。同じ舞台で14巻も続けてりゃ形も決まってくるだろうて。


 カロリーメイトリキッド、時々探してたんだけど、近所のコンビニとかスーパーでは売ってなくて、薬局系列の店でようやくゲット。と言ってもカフェオレとフルーツミックスの2種類が棚の下の方に乱雑に詰め込まれている程度の扱いだったけど。

 カフェオレはだいぶ前に飲んだことがあるはず。あまり口に合わなかったような記憶。飲み直してみても、ちゃんと苦手な後味だった。鉄っぽいというか、なんというか。体には良いんだろうけど、みたいな味。もっとも、缶をちゃんと見ずに飲んだから「良く振って飲め」の指示を見逃していたわけで、沈殿物を撹拌してから飲めば問題ないのかもしれない。やっぱ転がしたり振り回したりするべきじゃないか!!!

 フルーツミックスはかなり飲みやすかった。愛飲するかはわからないけど、1カートン(6本)くらいなら買い置きしておいてもいいかな、くらい。さすがにamazonの30本とかはちょっと多すぎる感。賞味期限もあんまり長くないし(田舎の実店舗で買ったから回転が悪すぎるだけかもしれないけど)。

 ヨーグルト味も試してみたいんだけど、どこに行ったら買えるんだろう。

 田舎じゃ手に入らないような日用品(主に食料品とか)を気軽に注文できるという点で、amazonパントリーは便利だったんだよなぁ。飲み物は3本単位とかだったはずだけど、そのくらいならお試しで買うにもちょうどいいし、それで気に入ればまたパントリーで買い直すなり、amazonで箱買いするなりできるし。パントリーが無くなったamazonはちょっとした食材を買おうとすると販売単位がデカすぎて使いづらい。


 PCに有線で接続しているイヤホン、時々音が極端に変になることがある。といっても気がつけば明らかに変だけど、気が付かないとあまり違和感がない。接続端子をグリグリ動かすと戻る。おそらくGNDが接触不良になってL-Rの差信号だけが聞こえている状態なんだと思う。聞いてる内容によっては短時間ではあまり違和感がなかったりするので、人間の耳が(or僕の耳が)いかにいい加減なのかという。

 これだけスマホ用のイヤホンが普及しているのに、デスクトップPCの音声端子がいまだに3極なのが謎なんだよなー。4極でリモコンに対応してくれればだいぶ便利だろうに。まあ、スマホももうイヤホン端子のない製品が数多く出てきて、有線イヤホンの将来性を考えると今更4極に対応しても、という感は無きにしもあらず。とはいえスマホみたいに常に動かすわけじゃないし、イヤホン挿しっぱなしみたいな需要もありそうだけどなー。

 あるいは、ケースのフロントIOに4極のジャックを乗せて、そこからイヤホン端子を分離してマザボのフロントIOピンに差しつつ、リモコン信号はUSBヘッダに入れる、みたいな製品は考えられるか。

 リモコンは分圧抵抗で表現しているだけだから、マイクが不要ならマイコンのADCで読んでUSB HIDで投げる、みたいなこともできそうではある。別件でUSB HIDで遊びたいやつもあるし、近々そっちもやりたいな。


 CICフィルタ 論理回路デザイン

 このページの一番上や一番下のCIC Filterの図、右側の遅延器はZ-MじゃなくてZ-1じゃない? 微分器にM段の遅延器が必要なSincフィルタを、デシメーション用に整理して1段の遅延器を使えるようにしたものがCICフィルタだと思うんだけど。



 GPS、一応キャリア追尾は動くようになってきた。0度/180度に位相ロックできているから、実部を取り出せばBPSKベースバンドも得られる。ただ、計算量がめちゃくちゃ多いので、ほぼ1倍速程度しか出ない。例えば15秒のIQファイルを処理するのに14秒くらいかかる。衛星数が増えても並列処理はできるけど、とはいえ遅い。2.4MspsでサンプリングしてCICやFIRで帯域幅を絞って1kspsまで落としているから、そのあたりで重いんだと思う。例によってVisual Studioのプロファイラが動かないのでどこが遅いのか確認できていないけど。

 GPSの同期はコードとキャリアに分けられて、コードはDLLで、キャリアはコスタスループで、みたいなのが標準的な実装?

 コードの同期はEarly - LateのSカーブで処理する、みたいな話だけど、この場合、信号強度が変わるとSカーブの振幅も変わってしまうはず。DLLの前にAGCが入っているはずなんだけど、GPSのブロック図でAGCが入っているのを見たことがない。衛星の距離や周辺環境(見かけ上の衛星付近の障害物とか)で衛星ごとに信号強度は変わるから、衛星(相関器チャンネル)ごとにAGCが必要になるはずなんだけど。

 コスタスループもググれば色々と例が出てくるけど、非ゼロIFの図しか出てこないような気がする。実部信号にVCOからIQ信号をかけてIQを出力する、みたいな。アナログ回路(VCO)で作るなら入力にはある程度の周波数があったほうが扱いやすいだろうし、移相器も周波数を決め打ちしてるだろうけど、デジタルで処理するならゼロIF用のほうが作りやすいはず。ゼロIF用のコスタスループってどんな処理になるんだろう?

 あと、コスタスループは変調信号を無視できるのが利点らしい。これは航法メッセージみたいな信号を除去できる点で有利だけど、BPSKを無視できるなら拡散符号も無視してしまわないんだろうか? コスタスループが拡散符号に影響を受けないのであれば、同じ相対速度を持つ複数の衛星に対してマズイことになりそうなのだが。望むと望まざると、結局のところは航法メッセージの50bpsと拡散コードの1023kcpsが重なった1023kbaud変調の信号しか受信できないわけだから、逆拡散してあろうがなかろうが関係ないのかな。

 SカーブのDLLは、符号だけ見て振幅は使わない、みたいな方向性なのかな? そもそもSカーブは例えばズレ0.4と0.6、あるいは0.4→0.3と0.6→0.7の違いを区別できないから、振幅情報があってもそれを利用して比例制御やPID制御を行うことはできないはず。とすると、符号だけ見てコードNCOの位相を一定値スライドするだけ、みたいな実装でも良さそうな気がする。それなら信号強度由来のSカーブ振幅は無視される。Sカーブが0付近ならスライドを止めるとか、あるいは0付近でもスライドは止めず、0チップ付近では前後(Early/Late)に振動(ディザ)させて、擬似距離を後段のLPFで滑らかにして使う、みたいな感じなのかな。



 NICT(CRL時代)の衛星搭載機器(ETS8の時刻比較実験機器)のPDFを読んでたら、異常検出に「watch doc timer」とか言うやつが出てきた。ぐぐってみると結構大量にヒットしてびっくり。富士通が申請した特許の文章にも出てくる。よくあるヤツなんだな。キーボードでタイプすればどちらも左人差し指だが…… これだけ頻出するなら誤入力は無いだろうなぁ。語源を知っていればやらないミスだけど、語源を知らずに語感で覚えてれば間違いそう。



https://repository.kulib.kyoto-u.ac.jp/dspace/bitstream/2433/85049/1/d605.pdf

 2003年。宇宙太陽光発電(SPS)のレトロディレクティブ用パイロット信号にスペクトラム拡散信号を使う手法の研究。

 20年以上前の話なので、アナログ回路で頑張っている感。もっとも、前述のNICTの資料は同時期にフルデジタルでDLLやPLLを構成しているから、時代というよりはその機関が得意とする手法の違いなんだろうけど。NICTは情報処理特化の実験機器だから精度重視でフルデジタルだし、SPSは大電力メインの研究室だろうからアナログ回路が好きだろうし。NICTのはフライト品だから潤沢な計算リソースとは言えず、デジタル処理でもある程度は妥協しているけど。

 DSSSの利点はいろいろあって、送信電波の干渉を減らせるとかの他にも、秘匿性の高さからなりすまし(盗電とか)を防げる、みたいな理由も。まあ、SPSが実用化したらレトロディレクティブ用パイロット信号の拡散コードなんてあっという間に漏洩するんだろうけどな。GPSのPコードだってあの当時にすぐに無効化されたわけだし。結局はパイロット信号といえど認証用の公開鍵みたいなのを垂れ流すような使い方になるんだろう。それに、送ってほしい電力量とか受電する場所や面積みたいな情報もある程度はパイロット信号に乗せて送るだろうし。送信側の余力(供給可能な電力量)とかも放送するだろうから、結局は双方向でハンドシェイクするような形にもなるだろうし。

 SPSの送信出力、全体で見るとでかいけど、1素子あたり0.17W(23dBm)程度らしくて、めっちゃ少ないのな。例えば秋月で売ってるクレジットカードより一回り小さいサイズの太陽電池セルが300mWだから、それよりさらに一回り少ない程度の電力でしかない。

 システムとしては、太陽電池は太陽を追尾するし、アンテナは地球を追尾するから、いわゆるデスパン系のスピン安定な静止衛星みたいなシステムに近くなるので、発電面積と送信アンテナ面積を一致させる必要性はなく、RF電力密度は太陽光エネルギー密度の20%程度(光電気変換効率と電気RF変換効率の積、クレジットカードサイズで1W程度)に縛られるわけではなく、波長とアンテナサイズで決まるビーム幅のほうが拘束条件としては強いはず。GEOから数GHz程度の電波を出す場合、どう頑張ったって物理的な制約でアンテナ直径はkmオーダーになるから、1素子自体の送信電力はあまり高い必要はなさそう。

 1素子1W未満なんて2.45GHz程度ならSiで出せそう。5.8GHzを使おうとするとGaAsあたりになりそうだけど。SSPAが使えるならパッシブフェーズドアレイよりアクティブフェーズドアレイのほうが作りやすそう。FPGAというか、この数を並べるならASICでも十分にペイするだろうけど、PDM+BPF+SSPAでアクティブフェーズドアレイを作って、フェアリングに入るくらいの大きさを1モジュールにして、軌道上で並べていく感じで。ある程度の集積密度の半導体を乗せるならその片隅に移相器を並べてDSSS復調器とかも載せられるだろうし。

 日本のSPSはなまじ研究期間が長いだけあって、古い方法に固執しそうだなぁ、という悲観的な感想。最近はどういうトレンドなのか知らないけど。そのうちアメリカか中国あたりの会社がSPSの実験機を飛ばしてそのまま実用化しちゃいそうだよなー。悲観的な予想の中で精一杯楽観的な空想をするなら、UAEがオイルマネーで研究をゴリ押しして三菱電機が下請けで衛星システムを作って、H3で打上げ、あたりか。将来的に化石燃料厳しいですよねー、ウチはSPSの研究も歴史ありますから一緒にやりませんか?打上げ費用ちょっとお安くしておきますよ~、とかそそのかして……


https://repository.kulib.kyoto-u.ac.jp/dspace/bitstream/2433/267462/1/rish_01700_16.pdf

 2021年。マグネトロンの発明から100周年の節目として、最近のマグネトロンの話とか。

 電力(振幅)と位相を制御できるマグネトロンの構成。出力の一部を取り出して移相器とサーキュレーターを経由してマグネトロンに戻すと、位相制御ができる。投入電力で振幅も制御できる。ノイズレベル-50dB以下、位相精度1度、制御時間100us以内、だそうだ。出力の波を戻すあたりレーザーみがあるな。制御時間が長いからレーダーみたいな短パルス出力は難しそうだけど、CWなら問題ないだろうし、あるいはFMCW的な用途でも使えそう。

 このマグネトロンをアレイ化したビームフォーミングの例。

 電子レンジを改造して、マグネトロンから変調信号を出力して、テレビの映像と電力を同時に伝送する実験。2.45GHz309WのFMを出してテレビ側で48Wを得て映像を表示。大きなホーンアンテナをつけられた電子レンジが不思議な様相。2.45GHz300Wなんて生活空間で使えるはずもないだろうし、見た目も相まってデモンストレーションとしての用途しかないだろうけど、見た目のインパクトはすごい。

 SPSの話。サイドローブ対策に中央は高出力で、周辺は低出力で電波を出す必要があるから、周辺はSSPAで、中央部はマグネトロンで出したいよね、みたいな話。マグネトロンはコスパはいいけど、非修理系で使うには寿命の問題を解決しなければならない。

 変調できるマグネトロン、面白いけど、どんな用途で使えるかなぁ。SSPAでビームフォーミングして食材を選択加熱できる電子レンジの提案とかあったけど、マグネトロンは共振させなきゃいけないから、出力電力を下げても大きさはあまり小さくできないはず。電子レンジに低電力マグネトロンを16個とか25個とか乗せてビームフォーミングするのは厳しそう。既存の大電力な変調波が必要な用途はTWTが使われているだろうし。TWTより構造がシンプルな分で低コスト化や高信頼性化はできるだろうけど。


https://www.jstage.jst.go.jp/article/ieejjournal/129/7/129_7_418/_pdf

 2009年。IHIエアロスペースのマイクロ波送電に関する解説。SPS以外にも、電気自動車の充電とか、建物内での給電とか。

 位相制御マグネトロン(Phase Controll Magnetron)の話も少し。外部から同期信号を注入することで、マグネトロンの発振周波数を引き込む。移相器でフィードバックするような形ではない。


https://www.mhi.co.jp/technology/review/pdf/406/406340.pdf

 2003年。三菱重工のSPS用マイクロ波送電の実験。MHIなので、宇宙領域特化(いや、MELCOじゃないのかよ。。。)。9個のマグネトロンを電力合成することで大電力を得る。マグネトロンの制御方法の説明とか。マグネトロンを使っているのはあくまでも大電力出力の実験用であって、ビームフォーミングはSSPAを使った別のシステムかな? ビームフォーミングはPN符号に対するレトロディレクティブ。

 マグネトロンを制御しようという話は結構昔からあるんだな。そりゃ電流-周波数(I-f)特性は昔から知られていたわけだし、それを制御に使おうみたいな話も出てくるか。ただ、I-f特性はマグネトロンの設計(特に発振周波数)で特性がだいぶ変わるらしいから、2.45GHzあたりでは使えるけど5.8GHzでは使えない、みたいなものらしい。京大のやつは5.8GHzを含めて様々なマグネトロンに適用できて綺麗な信号が得られるという意味で新しいらしい。


 Space Solar Power Incremental Demonstrations and Research Project (SSPIDR) - YouTube

 ARACHNE – Air Force Research Laboratory

 アメリカ空軍研究所のSPSシステムのプロジェクトがSPIDER(スパイダー)で、そのサブスケール実験機がARACHNE(アラクネ)。前線基地の電力供給のために大量の燃料トラックが必要で、そこが脆弱だから、SPSで解決しようぜ、みたいなプロジェクト。打上げ時期は昔の資料から順に2023年、’24年、’25年、とずれ込んでいるから、もうしばらくはかかりそう。

 FOBに置けるような大きさのレクテナじゃものすごい絞り込んだビームじゃないと使い物にならないし、そうするとLEO衛星を使うんだろうけど、LEOのデューティー比じゃよほど大量の衛星を打上げないと使い物にならないだろうし、それにしたって昼間しか使えないわけだから、システムとしての実用性としては結構微妙な気がする。とはいえ、そんなのはわかったうえで、難易度の高そうな研究開発でもDODをATM代わりにしてゴリ押しするのは、アメリカという軍事大国の強さだよなぁ。軍が関わってる以上はSPSを単なる電力システムとしてだけ見ているわけじゃないとしても。


2024年10月9日水曜日

小ネタ





 野辺山ヘリオグラフ(NoRH)とか。



 CoD4MWをTPSにして和風にした感じ。風刺ありコメディありでシナリオも良いし。操作性がちょっと悪いのが難点。

 あとグラがちょっと重くて、アップデートでだいぶ改善したけど、現状でもRTX3060で4K表示はかなり厳しいマップがある。グラ設定がほとんどできないから、Windowsで画面解像度を変えるしかない。FHDならリミットの30fpsまでしっかり出る。

 細かいアップデートがいくつかあって、だいぶ遊びやすくなってきたけど、もう少し改善の余地あり、といった段階。



 Windowsがハングアップするような謎の挙動、再び(3度も)発生。基本的には前回と同じだけど、スマホからリモートで入ったあとにしばらく操作していたら、リモート画面が真っ白になって、再接続しようにも同じように真っ白な画面になる挙動(アプリを再起動しても同様)。ノートPCからは問題なくリモートで入れるので、ホスト側の問題ではなさそうな感じ? とりあえずノートPCからリモートで再起動させたら、今度はスマホからも問題なく入れた。じゃあホスト側の問題?

 しかし、ちょっと不具合頻発しすぎじゃないだろうか。リモートで再起動しかければ復帰するとはいえ。あと、スマホがあればリモートで入れるから安心、と思ってたのに、結局Windowsの実機が必要な状況が出てきてしまったな。冗長系、だいじ。SDRサーバーにNUCが動いてるけど、これはリモートで入る前提だからディスプレイとかマウスとかキーボードとかは全くついてないし。NUC側のWindowsが正常なのであれば、スマホからNUCに入って、NUCから問題のWindowsに接続して、みたいに段階を踏むことも不可能ではないだろうけど、さすがに面倒。

 スマホのリモートデスクトップの解像度は、任意の値を選べるわけではなく、いくつかの選択肢から選ぶしかないらしい。一番大きなサイズは3972x1888で、これは4Kモニタの約1.03x0.87倍の大きさ。つまり横が広く高さが狭い。この解像度でログインするとChromeが高さ方向に圧縮されて、Windows再起動後にもその解像度が維持されるから、大きさを直すのが面倒くさい。接続する解像度はもう少し自由に選べたら良かったのに。

 短期間で3回も発生したので、細々と手を入れてみた。といっても、マザボのユーティリティでいくつかのドライバを更新して、Razerのドッグを外して、程度だけど。Razerのドックは色々と前科があるからなぁ。どれが効いたのかわからないけど、今のところ件の不具合は発生していない。

 今回の件とは無関係だけど、CドライブにRAID1で組んでいるNVMeの片方が、CrystalDiskInfoで70%を切っているのがちょっと心配。おそらくプライマリ側で書き込みキャッシュがOFFだから頻繁に書き込んでいて寿命を縮めている感じだと思う。PCを組んでから3年目に入ったあたりだから、線形で進むなら次の1年2年でどうこうなるようなものではないだろうけど、NVMeの交換も考えておかなくちゃ。ノートPCもWindows10だからリプレイス考えなきゃだし。問題を先送りにしていると一気にまとめてやって来る。。。



 Webブラウザってアドレスバーに数字+/記号(例えば"3221225984/")が入ると、それをIPアドレスとして認識するんだな。例えばアドレスバーの"3221225984/"という文字列をコピーすると、クリップボードには"http://192.0.2.0/"という文字列が保存される。

 試しにC#でConsole.WriteLine(System.Net.IPAddress.Parse("3221225984"));とやってみると192.0.2.0と表示されるから、32bit幅の数字をIPアドレスに変換するのは一般的な実装なのかな。

 さすがに42540766411282592856903984951653826560とか20010DB8000000000000000000000000はブラウザやC#ではパースできなかった。もしかしたら別のフォーマットなのかもしれないけど。

 C#のIPAddress.ParseのドキュメントにIPv4をパースするときの挙動が書いてある。ドットで分割さた数字が入力された場合、4個に分かれている場合は4個のオクテットとしてそれぞれを認識し、3個に分かれている場合は先頭の2オクテットと後ろの16bit、2個に分かれている場合は先頭の1オクテットと後ろの24bit、1個の場合(ドットがない場合)は32bitとしてパースするらしい。例えば"192.512"は"192.0.2.0"を表す。数字の前に0xプリアンブルがある場合は、ドット区切り内のそのグループだけを16進として認識するらしい。例えば”192.0x200"は"192.0.2.0"を表す。Chromeで試しても同じように認識する。

 IPv4って結構いろいろな表現ができるんだな。知らなかった。Chromeに関して言えば、今回は"3221225984/"的な文字列が欲しかったわけで、それを勝手にフォーマットするのはどうなんだって話だけど、まあ、普通はURLパラメータとかの数字が欲しい場合は直接コピーすればいいから、大抵は問題にならないんだろう。

 ちなみに、Chromeでは"3221225984/abc"や"3221225984/abc.html"はそのままコピーされるが、"3221225984/abc/"は"http://192.0.2.0/abc/"としてコピーされる。ちょっと謎い。

 最近のWebブラウザ、アドレスバーと検索バーが同じUIなのが地味に不便なんだよなー。例えばlocalhostとかを検索したいときってどうやって検索してるんだろう? 普通は単体で検索するわけじゃないから問題ないのかな。とはいえ、英単語+"."記号+英単語みたいな命名(例えばpaint.netとか)って履いて捨てるほどあるだろうに、そういうのが全部ドメインを確保しているわけでもないし、セキュリティ的にもヤバそうだが(例えばpaint.netの公式サイトのURLはhttps://www.getpaint.net/で、アドレス"paint.net"にアクセスすると違うサイトが表示される)。


 Mode-3/A/Cのフレーミングパルスだけ(コード0000)の応答、前回から1度も見かけていない。前回あれだけ大量に受信できたからそれなりに出てるんだろうと思ってたけど、実は結構レアなのかも。


 GPSの位置推定、前回は正解値に対して400km弱の誤差があったけど、サブフレーム1のクロック補正を適用したら280m程度まで改善した。GPSが放送してる時刻って十分に高い精度で出しているものだと思ってたけど、結構誤差大きいんだな。受信できている6個のGPS衛星は、RMS0.45ms(135km)、最大0.6ms(180km)くらいズレてる。その点QZSはかなり優秀らしくて、受信できている2機はそれぞれ0.001ms(0.3km)と0.022ms(6.6km)くらい。無視できるほど小さいわけではないから、時刻補正は必須だけど。クロック補正ってなんでユーザーがやらなきゃいけないんだろうか。全ユーザーが全く同じ計算をするんだから、衛星側で対応して然るべきだろうに。GPSのクロック補正はせいぜいミリ秒オーダーしか調整できないから、時刻はそれ以上発散しないように時計側で補正しているはず。であればもっと細かく補正して放送したっていいはずなのにな。原子時計(に追従する水晶)は帯域幅が狭いから荒い補正しかできない、みたいなことなんだろうか。

 相対論の効果を含めると259m程度。影響はかなり小さい(20m程度の改善)。

 電離層遅延はほとんど効果なし。まっすぐ降ってきて10ns程度、斜めに入ってもその2倍、程度だから、擬似距離で10m未満くらいの影響。現在の精度だと効果無し。

 試しに擬似距離の解決を連立方程式で実装してみた。条件が良ければ座標原点が地球中心でも5回程度で移動量がmmオーダーまで収束する。当たり前だけどブルートフォースより早い。ただ、擬似距離のオフセット(時計の時間差)が大きいと計算が発散する気がする。短時間で収束させるなら誤差は小さければ小さいほど良い。時計が進むか遅れるかでも特性がだいぶ違う。片方には2万km(67ms)程度離れていても50回程度のイテレーションで正しい位置に収束するけど、反対側は1万kmで収束に500回程度必要だし、2万km離すと正しい位置へ収束しなくなる。衛星の数を減らすと(8→4)、±2万kmくらいでも3000回程度で引き込める(±1.8万kmなら150回程度で引き込めるから、このあたりで発散し始める)。衛星の距離は地表を想定すると2万kmから4万km(GPS/QZSの場合)という感じだから、3万±1万km程度の範囲に収まる。適当な衛星の擬似距離を3万kmになるようにクロックオフセットの初期値を与えてやれば引き込めるかな。

「GPSのための実用プログラミング」3.5(82p)の説明だと、推定値+sと実測値を計算に使っているけど、推定値と実測値-sを計算に使うほうが収束が早いし、擬似距離のエラーが後に残らない気がする(推定値+sだと、擬似距離のオフセットが大きいと収束したあとに位置にズレが残る)。


 自前で求めた擬似距離である程度位置推定が動くことが確認できたので、一旦C/Aコードの復調部を作り直し中。といっても、C/AコードからLNAVと擬似距離の取得までが全部密結合だから、結局全部作り直しになるんだけど。

 論文とかで見るGPSの受信機(C/Aの復調部)のブロック図でレプリカの生成器がついているの(一度生成したシーケンスを使い回さないの)、なんとなく納得できたような気がする。色々と回り道をしてだんだん正解に近づいていってる感。まあ、今歩いている道が正しい道なのかもわからないけど、それもまた道ということで。

 Early/Prompt/Lateの相関強度(2.4Mspsを2.4kptsで平均して1ksps)と、(E-L)/PをLPF(CICでデシメーションして1kHz→FIRで200HzLPF)に通したもの。E/P/Lの相関強度は、計算が間違っていなければ直読みしてGPSの信号強度になるはずだから、信号強度は3LSB程度かな。結構弱いけど、とはいえ1bit(符号のみ)よりはちょっと強い。まあ、信号強度が高い衛星を選んでいるからであって、他の衛星はもっと低いんだろうけど。

 (E-L)/PはLPFを通したあとにC/AコードのNCO位相へフィードバックしている。受信開始直後はEが強かったけど、フィードバックしてPの強度が上がっている。ただ、C/Aコードの周期のオフセット(受信機のクロックエラー由来?)があるので、誤差がゼロに落ちきらず、PとEが同じくらいの高さで推移している(擬似距離にオフセットが乗る)。

 位相でなく周波数へのフィードバックだと遅れが1段増えるので、発振(発散)する。PD制御なら発散も止まるだろうから、位相へ戻すPI制御か周波数へ戻すPD制御かの選択みたいな感じ。最終的には位相にしろ周波数にしろPIDパラメータのチューニングが鍵になりそうな感じもあるけど。

 とりあえず、C/Aコードのトラッキングは動いている感じだし、次はキャリアのトラッキングを作らなきゃ。その後はBPSKの復調を作って……etc...


 C/AコードのEarly/Prompt/Late、ノイズやマルチパスを含まない綺麗な信号の場合、±0chipの位置でビークになり、±1chipの位置でゼロになる三角形の形になる。

 マルチパスが乗った場合、例えば2chip分遅れた信号を考えると、1chipの位置で相関値がゼロになり、2chipの位置で相関値はピーク(0chipと同じ値)になり、3chipで再びゼロに戻る。2chip以降に単発のマルチパスが乗った場合も同様。2chip以前にマルチパスが乗った場合、ダイレクトパス(0chip)のピークと重なるから、1chipの位置でゼロに落ちきらず、-1chipの傾斜と+1chipの傾斜は異なる角度になる。複数のマルチパスが重なった場合、fallスロープは複雑な形状になる。

 前回書いた、5点で相関して内挿すればピーク位置が推定できるのでは?という話は、前後のスロープが同じ形であることを前提としているから、マルチパスを含む信号の場合は成立しない。(そもそも前回の時点では相関機の処理を誤って理解していたから、本来の処理であれば5点で相関させるとかの話は必要なくなった)

 また、E/L点を±0.5chipの位置に置いた相関機の場合、マルチパスを含む信号を受信すると、Early点はマルチパスの影響はないが、Late点はマルチパスの影響があるから、Late側が高く出る。そのため、Prompt点は本来の0chipの位置より後ろ側にズレることになる。これは擬似距離が伸びる方向に作用する。0.5chipの位置は150mに相当するから、仰角の低い衛星からの信号が地面やビルに反射するとそれくらいのマルチパスが発生するかもしれない。衛星の配置が垂直軸に回転対称であることはないだろうから、低仰角の衛星にマルチパスが乗ると水平方向にズレることになる。

 E/L点を±0.5chipでなく、もっと狭い場所に設定する受信機もあるらしい。狭くすると影響を受けるマルチパスの距離差が短くなる(例えば±0.1chipなら30m)から、市街地みたいに近距離の反射物が多い環境では厳しそうな気もするけど、影響を受けたところでその距離を短くできるならトータルの影響は少なくなる、みたいなことなのかな。E/P/Lを狭く設定した場合、帯域幅が狭いと相関値のピークが鈍るから、帯域幅を広げる(サンプリングレートも増やす)みたいなハード側の対応も必要らしい。まあ、普通のGPSの受信チップはフィルタ回路やC/Aコードのトラッキングはハードウェア実装だろうし、そのあたりをまとめてトータルでバランスを取って作っているんだろう。



 C#のローカル関数、ブロックの外からは見えないという当たり前の挙動には納得感しかないけど、とはいえコンストラクタの最初のブロックだけは透過して見えてほしいという気がする。例えばrecord Hoge(int A) { public Hoge(double B) : this(F(B)) { static int F(double x) => (int)x; } }みたいな感じで、あるコンストラクタから別のコンストラクタを呼ぶときに値変換の関数をローカルで持ちたいみたいな用途。

 C#のインターフェースで、System.Numerics.IAdditionOperatorsみたいな感じで、キャスト可能な組み合わせを列挙するインターフェースがあっても良さそうな気がする。数値計算(特に整数型を想定)のライブラリを作るときに欲しい機能。大抵はfloatとかdoubleとか使うから問題ないんだろうけど。