Airspyの新ドライバ2022/11/23 10:05

Libre Spaceのコミュニティで新ドライバにてgainmodeが追加されたことを知った。 従来のドライバ:SoapyAirspyだと,ゲイン設定が難解なマニュアルのみで linearity,sensitivityなモードを利用した簡易設定ができなかった。

$ SoapySDRUtil --probe
...
----------------------------------------------------
-- Peripheral summary
----------------------------------------------------
  Channels: 1 Rx, 0 Tx
  Timestamps: NO
  Other Settings:
     * Bias tee - Enable the 4.5v DC Bias tee to power SpyVerter / LNA / etc. via antenna connection.
       [key=biastee, default=false, type=bool]
     * Bit pack - Enable packing 4 12-bit samples into 3 16-bit words for 25% less USB trafic.
       [key=bitpack, default=false, type=bool]
     * Gain Mode - 0 = linearity, 1 = sensitivity, 2 = manual
       [key=gainmode, default=0, type=int]

トライしてみたら,Pi4が[INFO] SoapyAirspy::rx_callback: ringbuffer write timeout なるエラーっぽいメッセージを吐いたので,GitHubにissueを作成して,作者とPE0SAT局からのアドバイス(主にラズパイのパフォーマンス設定)を試したら,USBケーブルの交換が効いて発生回数が激減した。問題は自分のハードにあったというオチだった。

ついでに書くと,放置していたOverrun,Underflowな問題は,Airspy MiniをUSB3端子に接続することで解消できた。

nn-morse2022/11/26 18:46

ディープラーニングを使ったモールス信号の解読,次は学習を体感すべく,PD0WM局のLSTMによる実装nn-morseを試した。

機械学習は教師データが命だが,モールス信号だと実データを用意しなくても, プログラムで トーン周波数,送信速度,信号/ノイズ強度を変えたサンプルデータを合成すれば良い.見本になっている。

torchな環境を構築して,作者が提供するモデルを使って,実データ/録音したwavファイルを食わせた/再生したら,デコードできない 😟

コードを眺めると教師データのトーン周波数が 100-950Hz だったので,実データに合わせて 200-2800Hz として再学習したらLOSSが0.3あたり(2000 step)でサチった。このアタリはTensorBoardを使ってプロット更新をモニタリングできたので,簡単だった。

ちなみに,学習に要する時間は,WillemさんのGPU(Pascal世代)では半日と書いてあったが,自分のCPU(core i5)では5日かかった。 学習で数時間回したらCPU温度計が真っ赤になったので,長期・連続運転を見越して,Turbo Boostを無効化してCPU温度を下げておいた。計算にはメモリも必要みたいで,主記憶16GBのうち7.4GBを使用していた。

新モデルを以下の3衛星でベンチマークしたら,解読の正答率がsatnogs-clientより高くなって良かった。

HUS-SAT1 耳コピーだと後半部は難しいよね

・・・ 0JS1YHSHSUSAT104.19V0.10A8.46DEEEEETETTTE ・・・

KOSEN-1 符号:ハイフンを教えるのを忘れてた

・・・ R5YGJ KOSENV1 S13E1E 93 AE S21E 00 00 00 ・・・

KITSUNE データ部はデタラメですね

・・・ 3G6YNH KITSUNE D390A534 ・・・

本日の衛星: JO-97で交信,FALCONSAT 3をデコード!PSLV-C54で打ち上げられた衛星(Thybolt)は予約して寝ます。

Thyboltを受信2022/11/27 12:18

新衛星,深夜パスは不発だったが,午前パスではThybolt-1のCWビーコンが強力に入感していたので,受信レポートをDhruva Space webから送っておく。

Mission infoのページには,Store-and-Forward messagingなミッションが言及されており,今後が楽しみな衛星です。

その他の衛星: HO-113, CAS-4A, RS-44で交信。

GPU機械学習環境の構築2022/11/29 18:50

機械学習を手軽に試すため「kepler世代,Compute Capability 3.5」な中古GPUカード(ハーフサイズで外部電源不要)を3千円で購入した。

使っているPyTorchのバージョン(1.10.0)に合わせて,nvidia-driver(470.141)⇛CUDA(10.2)⇛cuDNN(7.6)の順番にインストールして,morseangelを試したら, PyTorch no longer supports this GPU because it is too old. と表示されてCUDAが使えない!

>>> print(torch.cuda.get_arch_list())
['sm_37', 'sm_50', 'sm_60', 'sm_70']
>>> print(torch.cuda.get_device_capability())
(3, 5) 💦

この条件にあう・入手可能なGPUはPascal世代になるが,予算オーバーなので, Kepler世代のグラボ向けにPyTorchをビルドする記事を参考にして 野良ビルドして切り抜ける。

$ pip3 install torch-1.10.0a0+git71f889c-cp36-cp36m-linux_x86_64.whl 
...
>>> print(torch.cuda.get_arch_list())
['sm_35'] 💖

が,morseangelの動作はCUDAを使ってもモッサリしてた。

nn-morseはRuntimeError: CUDA out of memory.が出て学習に至らず。GPUメモリは2GBなのでシカタガナイか。 データサイズが96MiBと少ないのに,2GのGPUメモリに載らないのがツライ...

Tried to allocate 96.00 MiB (GPU 0; 1.95 GiB total capacity;
1.17 GiB already allocated; 79.25 MiB free; 1.37 GiB reserved in total by PyTorch)