2024年6月12日水曜日

小ネタ



 アサクリ シャドウズすごく楽しみ。ちょうどよく冬季に発売だし。夏に排熱の激しいゲームは厳しいからな。。。


 【biohazard HD REMASTER #8】#最終回 !!!全員救ったる!!(多分)【石神のぞみ/にじさんじ所属】 - YouTube

 ガミさん、ゲームスキルがどんどん鍛えられてきて、初見プレイは謎解きでデバフかかってるだけで、2周目やったらサクサク進みそうだよなー、と思ってみていたら、まさかの(終盤だけとはいえ)再走やってくれたし、実際早い。


https://www.jstage.jst.go.jp/article/itej/62/11/62_11_1669/_pdf

 マイクロ波の中継回線や衛星放送に関する話題。

  米国は戦時中のレーダー技術の発達により、マイクロ波に関する経験を持っていた。1953年には50km間隔で大陸横断マイクロ波中継回線を設置した。

 日本はマイクロ波に関する経験が少なかったが、それでも1953年2月1日のNHK本放送開始に合わせて東名阪のマイクロ波中継回線(最大100km)を通した。マイクロ波回線を計画していた当時は日本はアメリカの占領下であって、アメリカのメーカーが日本市場を狙っていたから、国産できることを実証する必要があった。NHKの中継回線はNTTの回線が通るまでの一時しのぎではなく、技術実証として意味があった。

 衛星放送は当初はマイクロ波中継回線と同じようなものだろうと想定していた。マイクロ波中継回線は区間毎に仕様を満足すればいいが、衛星放送の場合はシステムとして成立させる必要がある。衛星放送は難視対策を目的として計画していたから、例えば雨が降って災害が予想されるときに降雨減衰で天気予報が見れない、なんてことは許されず、降雨のデータを集めたりして、100Wで放送すれば60cmで十分に受信できることがわかった。当時国内メーカーでは12GHz100WのTWTを製造できなかったので、BSEではアメリカメーカーの、BS2ではフランスメーカーのTWTを搭載したが、BS2ではTWTが故障して2系統の予定から1系統での放送を余儀なくされた(BS2にはTWTが3本(主2本+冗長1本)搭載されていたが、数ヶ月で2本が壊れ、試験放送の開始時には1chの中継しかできなくなった)。当時は他に選択肢はなかった。BS3ではNECのTWTを使用し、無故障で運用を終了した。

 東名阪回線で使われた4mのパラボラアンテナは「当時('53年)としては画期的な大型アンテナ」だそうで、中継回線の運用が終了して以降は南極からの衛星中継にも使われたそうだ。'62年頃にはISASの18mとか高萩の20mとかを作ってるから、この頃にはパラボラアンテナも急速に発達してるんだな。


 OLIGHT i3Tが最近チャタリング気味。2度押しで輝度変更コマンドなので、低輝度で点けようとして眩しいとか、高輝度で点けようとして暗いとか。2018年9月に買ったやつなので、もうすぐ6年になる。1日に10回以上は使っているような気がするので、スイッチの操作回数は数万回のオーダー。まあ、寿命に近い頃合いではあるか。

 スイッチAssyはロックタイトみたいなので固定してあって、ヒートガンで温めれば分解できる。ゴムキャップとかパッキンは取り外せるけど、スイッチ本体はカシメてあるっぽくて、簡単に外せるような感じではなさそう。さすがにスイッチ本体がだめになったら買い替えかな。次買うならi3T2か。i3Tのカーボンも気になるけど、さすがに見た目だけのために2倍の値段はなー。

 なんか最近身の回りのありとあらゆるスイッチが調子悪いなー。近くで温泉でも湧いてるんか? 昔から調子悪いやつを放置してたとかもあるけど。


 .NETのSIMD系命令、.NET 8でVector512<T>型とAvx512系組み込み関数が追加されていたらしい。残念ながら開発マシンはAvx512が無効化されてしまっているので使えないが(Avx512系のIsSupportedがFalse)。

 うちにあるノートPCも普段使いしないとはいえいい加減古くなりすぎ(10年以上前のモデル)だし、来年にはOSサポート終わるし、Win11非対応だし、Frameworkあたり欲しいんだよなー。13インチのAMD(Avx512対応CPU)で色々オプション追加していくと2200USD(35万円)くらいになる。さすがにサブPCにそこまではかけられない。。。まあ、性能の良いPCを買えばそっちがメインになるからメインとかサブの使い分けは意味ないんだけど。

 Avx2以前の命令、複素数の積が計算できないのが謎いんだよなー。うまく命令を組み合わせれば計算できるんだろうけど、効率の良い計算方法が思いつかない。Avx512だとFP16の複素数積が追加されたらしい。32bit複素数も欲しいけど、需要あんまり無いんだろうなー。ゲームでも複素数はあまり使わないだろうし。16bitはAI向けとかで需要あるんだろうな。

 ぐぐってみるとSSEとかAVXで複素数の積を計算するのは、実部の配列と虚部の配列を分けて持つのが効率がいいらしい。SDR的な用途だとR, I, R, I, ...で並んでる方が楽なんだけどな。でもR, R, ... , I, I, ...みたいに並べたほうが処理は楽か。IQファイルを読み込むときに型変換(byte→float)が必要になるわけだし、そのときに2個の配列に分けて書き込めば良さそう。


 Vector128<T>とかVector256<T>とかVector512<T>とか、特殊な形だと思ってたけど、実態は配列が入ったただの構造体みたいな形なんだな。なのでMemoryMarshal.Cast<Complex32, Vector256<float>>とかで型変換ができるし、計算できできる。

 Vector256.LoadUnsafe/StoreUnsafe等で読み書きしようとするとrefを経由する必要があって、ReadOnlySpanで受け取った配列を使うことができない。MemMarshal.CastならReadOnlySpan<Complex32>はReadOnlySpan<Vector256<float>>になるだけだから、書き込みが必要ない配列をSpan<T>で受け取る必要がない。

 ただ、Vector128<T>とかの中身が単にT配列なのであれば、Avxのロード命令とかストア命令があるのが謎なんだよな。中身がただの配列ならC++とかでAvxを使う場合ポインタキャストしてやればいいわけだから、わざわざロード命令とかは必要ないはず。わざわざそういう命令を用意してあるってことは必要があるってことなんだろうけど。


 C#でIDisposable Func(out int[] hoge)みたいなのがあったときに、using Func(out var hoge);みたいな文法が使えないのが地味に不便。using (Func(out var hoge)) { ... }みたいに1段インデントすれば使えるけど、スコープが狭くなるから中で宣言した変数を外で使えなくなるのが欠点。ブロックを抜けたらすぐ開放されるのが便利ではあるけど。

 using _ = Func(out var hoge);みたいなコードはだめで、using var _ = Func(out var hoge);だと_が残る。どうしてもインデントしたくないならusing var disposer = Func(out var hoge);みたいに変数を定義してやる必要があるのが面倒。


 ベクトルの計算で悩み中。具体的には衛星の運動速度の計算。SGP4で計算した位置と速度はECIで得られるので、恒星時で回転させてECEFに変換する。こうやって求めたECIとECEFの位置と速度をPreviSatと比較すると、位置はECI/ECEF共に誤差の範囲で一致する一方で、速度はECIは一致するが、ECEFが全く異なる結果になる。

 速度は単位時間あたりの位置の差だから、ECEFでの位置(これはPreviSatと一致する)を1秒間隔で求めて、その差を取ればECEF空間での速度が得られる。が、そうやって求めた結果はECI空間の速度をECEFに変換したものと同じ値で、PreviSatで表示される速度とは全く異なる。

 PreviSatで表示されるECI/ECEFの位置のXYを複素平面と考えて、(ECI * ECEF.Conjugate()).Phaseを計算すると恒星時と一致する。一方で、同様に速度のECI/ECEFのXY平面での回転を求めると、同じ時間を計算しても、衛星ごとに結果がばらばらになる。

 PreviSatで表示されるECEFの速度ってどういうモノなんだろう? Z軸はECI/ECEFで変化しないからXY平面で回転させているものなんだけど。

更新1:速度のECI→ECEF変換は単純な座標回転だけでなく、地球自転成分も含んだものらしい(地球の自転というか、座標系が回転している見かけ上の効果というべきか)。その場(XY原点からの距離)に応じた接線速度を加味するとPreviSatで得たECEF速度と同じ結果が得られた。

 PreviSatの接触軌道要素のタブ、設定でUTCに固定しても時刻のオフセットに「UTC + 12:00」と表示されているのが謎い。この表示何なんだろう?


***

初稿:2024年6月12日

更新1:2024年8月15日

0 件のコメント:

コメントを投稿