Files
plutosdr-fm/docs/STATUS.md
T
2026-10-07 22:54:13 +09:00

6.4 KiB
Raw Blame History

作業状況 (2026-10-07)

実装済み

  • Python CLI: pluto-fm。76–108 MHz指定、URI、ゲイン、音量、偏移、プリエンファシス、ループ、乾式IQ出力。
  • WAVEを含む入力をFFmpegでストリーミングPCM化。
  • モノラルFM: 48 kHz音声、15 kHz LPF、状態保持20倍補間、960 kS/s IQ、位相連続。
  • pyadi-iio/libiioの非循環TX。LO/sample rate読み戻し、終了時バッファ破棄と減衰。
  • ファームウェア・ブート環境への変更なし。

検証結果

  • PYTHONPATH=src python3 -m unittest discover -s tests -v: 2件成功。ブロック分割による位相連続性、偏移上限、定振幅、復調トーン周波数、末尾ゼロ埋めを確認。
  • FFmpeg合成1秒WAVEとMP3から各960,000 complex64 IQ生成成功。有限値を確認。各約0.30秒で処理(このホスト)。
  • 不正音声で終了コード1。
  • RF実機は未接続。pyadi-iioによるNanoの送信は未検証。

次の実機確認

  1. iio_info -u <URI> でボード、IIOデバイス、LO範囲を確認。IPと接続方法を確定。
  2. ダミーロード/減衰器で80 MHz、低ゲイン、既知のWAVEを送信。受信音質と停止時RFを確認。
  3. 76 MHzと108 MHzのLO設定、実周波数、長時間連続送信・ループ境界を確認。
  4. 指定LOが拒否された場合はメーカー資料と既存設定を確認。標準Pluto用U-Boot設定を無条件に適用しない。
  5. 必要なら実機を使ったTXアンダーラン観測・音質改善・ステレオ対応を検討。

資料はREADME内のADI公式リンクを参照。Nano固有の公式仕様は確認できていない。

実機接続確認 (2026-10-07)

  • USB VID:PID 0456:b673、USBネットワーク 192.168.2.10/24、IIO URI ip:192.168.2.1 で接続成功。
  • ボード申告: Analog Devices PlutoSDR Rev.B (Z7010-AD9363A)、model ad9363a、FW v0.39-dirty、kernel 6.1.0-271883-gf3da30df6004-dirty。これはIIO申告値であり、Nanoの実際の搭載チップを確定したものではない。
  • TX LO available [325000000 1 3800000000]。TX LO powerdown中に76/80/108 MHzの書き込みを試し、すべてEINVAL。LOは2450 MHzのまま。元のpowerdown=0に復元。IQ送信は行っていない。
  • pyadi-iio 0.0.21、pylibiio 0.25、native libiio 0.26。.venvに依存関係を導入済み。OSのensurepip欠落によりget-pipを使用。
  • TX LO powerdown中にpyadi-iio経由で960000 S/sの設定・読み戻し成功。サンプルレートを30720000に戻し、FIR有効フラグも元の0に復元。低レート設定時にpyadi-iioがRAM内FIR係数をロードしたがファームウェア・永続設定の変更なし。
  • CLIにLO範囲の事前確認を追加。80 MHz実行で終了コード1、LO 2450 MHz、gain -10 dB、sample rate 30720000が維持されることを確認。
  • 修正後のDSPテスト2件成功。
  • 未実施: FM帯での実際の送信、音質、RF周波数精度、停止時RF、連続送信。
  • ユーザーへメーカーの周波数拡張手順またはSSH認証方法を照会中。範囲制限のため送信テストは保留。既存の周波数設定を確認してから最小限の変更方法を決める。

AD9364互換設定への変更

ユーザーのAD9364互換設定の提案に従い、ADI公式手順を確認。SSH rootで接続成功。 変更前: attr_name、attr_val、compatible はすべて未定義。 変更コマンド: fw_setenv attr_name compatible、fw_setenv attr_val ad9364、fw_setenv compatible ad9364、再起動。 ファームウェアイメージの書き換えなし。U-Boot環境の3項目のみ変更。 復元はSSHで fw_setenv attr_name、fw_setenv attr_val、fw_setenv compatible を実行して再起動(元が未定義のため削除)。

AD9364設定後の実機結果

  • 再起動後model ad9364。TX frequency_available [46875001 1 6000000000]。
  • LO停止中に76/80/108 MHz設定成功。108 MHz読み戻し107999998 Hz(2 Hz丸め)。LO判定を許容差10 Hzへ修正。
  • 1 kHz、3秒のテスト音をgain -80 dBで送信: 76 MHz/WAVE、80 MHz/MP3、108 MHz/WAVE。全てCLI終了コード0。libiioへの非循環TXバッファ転送が成功。
  • 各通常終了後のgain -89.75 dBを確認。処理時間は3.90/3.30/3.32秒(接続/設定時間を含む)。RF受信による音質・連続性は確認していない。
  • DSPテスト2件成功。実RF周波数、RF停止、スプリアス、アンダーランは未検証。
  • 80 MHz/gain -80 dBで1秒WAVEを10秒間ループ送信後SIGINT。終了コード0、停止後gain -89.75 dB。長時間耐久と受信したループ境界の音質は未確認。
  • 次の確認: ユーザーの受信機で80 MHzの音声を確認し、必要なgain/volumeを調整。現在プロセスは停止済み。

ステレオFM対応 (2026-10-07)

  • --stereo追加。FFmpeg出力を2チャネルとして左右を保持。省略時は既存のモノラル。
  • MPXは0.9×((L+R)/2+(L−R)/2×sin(38 kHz))+0.1×sin(19 kHz)。パイロット・副搬送波は位相同期したサンプル時計で生成。左右それぞれプリエンファシス、15 kHz帯域制限と補間。ステレオRF帯域300 kHz。
  • FIR補間をポリフェーズ+overlap-addに変更し、ブロック間の状態を保持。ステレオでは急峻な補間フィルタで19 kHz付近を保護。
  • ソフトウェアテスト5件成功: 従来モノラル、ステレオの位相連続、末尾パディング、FM復調したMPXのパイロット振幅0.1、38 kHz抑圧、左1 kHz/右2.3 kHzの分離を確認。不要側チャネルのトーン振幅<0.001、目的側>0.17。
  • 高レベル音声で周波数偏移<=75001 Hzを確認。モノラルWAVEをステレオIQに変換し、0.15秒の入力が最終ブロック埋めで0.2秒になることを確認。
  • 実機80 MHz/gain -80 dB: 左1 kHz・右2.3 kHzの3秒WAVEおよびMP3のバッファ転送成功。終了コード0。RF帯域読み戻し300000 Hz、停止後gain -89.75 dB。
  • ステレオループを7秒実行後SIGINTで終了コード0、gain -89.75 dB。
  • 現在送信停止済み。追加のファームウェア・U-Boot変更なし。
  • 未確認: 受信機のステレオ表示、実RFでの左右分離/音質、スペクトル・長時間アンダーラン。次回は--stereo付きで音声を送信して受信機で確認。