2021年2月6日土曜日

小ネタ

 衛星軌道の表示画面で日食が北寄りに出てるのを見て冬を実感する、そんな深夜。

***

 なんか便利なランチャー無いかなーと思いつつ、結局自分で作る、いつもの流れ。スタートとキルができるランチャー、探すより作るほうが簡単。最低限は動くようになったので、使いながらもう少し使いやすいようにしていこう。

 rtl_sdr、キル送ると直ちに終了してる感じ。fflushとかfcloseとかやってなさそう。notepadもkillで終了させると未保存のダイアログとか出ずに終了する。Process.Kill()を使うのはあんまりよくなさそう。C#でSIGINT出すのいまいちよくわからん。とりあえず後ろ長めに観測してAPIのご機嫌次第で運用。

 寝てる間の自動観測、終了時間ミスって7時間弱くらい受信してたらしい。ファイルサイズが100GB超えてた。本来目的としたデータは取れなかったけど、連続稼働数時間の実績は得られた。衛星相手だとあんまり使いみちはなさそうだけど、深宇宙小型探査機のトラッキングでSDR使う例もあるし、全く無駄だったということもあるまい。そうでも思わにゃやってられん。。。

 帯域幅2MHzを連続で何時間も受信できるから、違法局探しとかに使うのも良さそう。430だと幅10MHzあるけど、144なら2MHzで足りる。まぁ、違法無線局がバンドプランに従ってるわけないんだが、とりあえず適法な局への妨害を調べるなら、アマチュアバンドを見ておけば良い。一日中ログって会話部分切り出して音声データにまとめてどっかに提出したらお役所から一言言ってくれるのかな? 翌日には「役所に文句言われてよぉ~」とか違法電波に乗せてくっちゃべってるんだろうけど。違法無線局滅びろ。


 とりあえず、無指向での自動受信は目処がついた感じ。やってできることはわかったので、あとは運用性を改善していけばいい。トラッキングはブツがないのでどうにもならぬ。

 暖かくなっても気力が残ってれば、3エレくらいの弱い指向性のアンテナを4本ほど並べて、それぞれにドングルを接続して、みたいな感じで角度ダイバーシティを構成すれば、可動部無しで利得稼げるし、同じタイミングで複数の衛星が飛んできても方向が違えば受信できるので、良さそうな気がする。タイミングをずらしてドングルを選んで記録するのは自動受信の得意とするところ。天頂付近は距離が近いので利得低めでも受信できるから、仰角低めのリング状にアンテナ向けておけば良いはず。まぁ、運用してみると天頂付近でもガッツリ受信したい、とか思うんだろうけど。そうなったらアンテナ1本増やすだけだ。

 アマチュア無線の430MHz用10エレあたりだと、35本くらい使えば全天見えそう。八木アンテナが何十本も生えてるのは壮観だろうて。コヒーレントに受信しておけばビームフォーミングとか妨害波の除去もできるし。アンテナ+ドングルで1組1.5万円としても、RF周りだけで50万くらいになるけど。解析用のPCとか構造物も含めたら100万くらい行きそう。逆に言えば、同時に複数機(5-15機程度)が飛んできても受信できる、可動部レスの信頼性の高い地上局設備が100万で作れると考えれば、お得といえばお得か? もっとも、そんな数の衛星を同時運用するなんて状況は思いつかないわけだが。

 同時に大量に受信できるシステムは、南極とかに置いておくと便利な気がするな。極軌道の衛星(SSO相乗り)を1パスごとに受信できるし、真上は通過しないので使うアンテナ本数減らせるし。商業利用できないのでどこかの大学が設置して共同利用するみたいな形になるんだろうけど。

 そーいえば、大学の地上局で相互運用みたいな話しが有ったよなーと思って調べてみたら、UNISECのGround Station Network Working Groupのページが出てきた。が、参加局の更新が2014年、トップページのタイムスタンプは2016年だ。「流動的に変化しています」と書いてある技術情報のページに至っては「2007年現在の仕様」と書いてある。小型衛星過疎ってんなー。「小型衛星を作って打上げるだけの時代は終わった(キリッ」

***

 試しに、ドングルの横にマイコンを置いて5.33MHzを出してみた。が、影も何も見えぬ。やはりノイズ入らないようにしっかりしてるねぇ。ドングルの横に適当なFM変調置いてGPSの信号を割り込ませる、みたいな使い方は無理そう。少なくともダウンコンバータとADCの間の回路をいじらない限りは。もしかしたら周波数の目測大外ししてる可能性はあるけど。

 RTL-SDRブログに紹介されている方法だと、クロックを共有しておいて、予め適当な周波数帯(TV放送等)で相関処理をしておけば、複数のデバイスを同期できるらしい。観測を止めちゃうと同期が崩れるはずなので、サンプリングは停止せずに周波数を変える必要があるから、rtl_sdr.exeとかではできなくて、DLL経由なりで制御する必要があるけど。

 複数の周波数帯で通信を行うシステム(GSMとかセカンダリATCとか)の場合は一旦周波数を切り替える必要があるけど、ビームフォーミングみたいな使い方の場合は同じ周波数を受信するので、周波数を変えずに処理できるかも。そこまで来ると非同期でも処理できそうな気もするけど。

 他の方法を使う場合、例えばGPS信号を受信してタイミング信号にするとか。基本的にGNSSは1GHz以上なのでSDRで受信するのは大変。一番低いL5でも1.2GHz弱だし、帯域幅も広い。かといって低い方でタイミング放送を探すと、40kHzとか60kHzになってしまう。ワンセグ放送とか、浅いところで時刻信号みたいの入ってたりしないものかな?

 自前で用意するとなると、例えば920MHzとかの特小モジュールを使う方法も考えられる。GPIOを直結できるタイプなら1PPSを出せるし、UARTを直結できるタイプならNMEAを出せる。後者は自分の位置情報とかをブロードキャストすることになるけど。あるいは、自前で変調して27.12MHzとか40.68MHzあたりで出すという手もある。これなら好きなフォーマットで出せるし、微弱無線局として言い訳できる程度の出力だから位置情報のブロードキャストとかも特に気にしなくていいはず。

 あるいは、RTL2832でIF信号とダイレクトサンプリングを同時にで受信きればいいのだが。ダイレクトサンプリングで40k/60kHzを受信してもいいし、GPSのPPSやUARTを適当に変調して受信してもいいし。RTL2832のブロック図だとADCが2ch乗っていて、R820Tは非ゼロIFなので、同時受信できそうな気がする。実際、「RT820TベースならLF/MFとVHF/UHFを同時に受信できる」という記述がある。ただ、「もちろん、ドライバソフトの変更が必要」とも書いてある。rtl_sdrのDLLを叩く範囲で使えるのか、もっと根本的に低いレイヤを触る必要があるのか。もうちょっと調べてみよう。

 How RTL-SDR dongles work

***

 STM32G031J6MのPLL、かなり細かく設定できる。

 入力は4MHzから48MHz、出力は8MHzから64MHz、かなり柔軟に分周/逓倍できて、MCOで外部に出すことも可能。外部クロックをPLL通してMCOに出しつつ、コアは内部の16MHzで動かす、みたいなこともできるので、動作状況をUARTで吐き出したりもできるし。さすがにPLL専用ICというわけじゃないので好きな倍率というわけには行かないけど、矩形波-矩形波の連続波の周波数変換に使うと便利そう。小さいし、安いし。3.3V電源があればパスコン1個で動くし。入力の最低が4MHzなので、1PPS(1Hz)から数十MHzを作る、みたいなことをやりたい場合は、別の方法を考えなきゃいけないけど。

***

 C#のDateTimeOffset.TryParse、ISO 8601の基本形式を読み込めないらしい。人間が見やすいのは拡張形式だけど、コロンを使っている関係でファイル名に使うことができない。コロンは他の文字にしておいて読み込むときに置換する、みたいな感じで避けるしかなさそう。なんのための標準化だよ。。。

 8601の少数表現はカンマが推奨でピリオドも可、らしいけど、C#ではカンマは読めない。わりと謎の実装。

 Base64でURLに使うと不都合のある文字が使われてるとか、コンピュータの標準化はポンコツが多い気がする。継ぎ足された秘伝のソースに由来する仕様とか色々あって全員が納得できる方法は実現できないんだろうけど。


 ドップラーシフトの補正とかやろうとすると、観測時刻・中心周波数・サンプリングレート・対象の周波数・観測位置、あたりの情報は保持しておく必要がある。ファイル名で管理すると目視で見たりもできるけど、文字列がどんどん長くなる。

 ファイル名はdate, fc, spsくらいしか持たせず、観測値とかの細かい情報は同じ名前でJSONとかXMLで持たせるほうがいいのかな、とか思ったり。それはそれで面倒なんだよなぁ。

***

追記

 衛星軌道表示ソフト、作成中。

 NuGetからSGP4のライブラリ入れようと思ったんだが、なんか怪しいので結局自前のライブラリでゴリゴリ。/* ECEFのyにsin(lat)*(radius+alt)いれるの? ふーん…… */

 スクショ眺めてて気がついたんだけど、なんで未来のTLEが出てる!? 違う! これ去年のやつだ!! 最近受信した衛星が軒並みタイミングずれてるのこれが原因かー!!! しかし、1年も前のTLEでも500kmの衛星が10分程度のズレで収まるんだな。感心してる場合じゃない。。。なんで1年も前のTLEが紛れ込んだんだ??? TLEはナマモノ、数日が限度、と思い込んでた身としては、1年で10分(位相40度分)ってのは凄まじい精度なわけだが、観測技術の向上とかで長期精度上がってたりするんだろうか? 古いTLEと新しいTLEの距離を測ったりしてみたら面白そう。今度やる。

 C#のChartを3枚貼っていて、フルスクリーン(4K)で表示するとHitTestがかなり重い。データポイント数は大したことないはずなのだけど、いったいどんな処理が走ってるのやら。

 今のところは軌道の表示しかできないので、パスをクリックしたらそれを観測するためのタイマー設定用の文字列をクリップボードに入れる、くらいの機能は最低限欲しい。とりあえずそれができれば運用がかなり楽になる。本来は片っ端から可視の衛星全部観測してもいいんだけどね。さすがにそこまでは手が回らない。とりあえず、準備の手間を減らして、いくつか観測して、解析手段を使いやすくしなくては。解析の手間が減れば、観測数も増やせる。


0 件のコメント:

コメントを投稿