6.4 KiB
6.4 KiB
作業状況 (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の送信は未検証。
次の実機確認
iio_info -u <URI>でボード、IIOデバイス、LO範囲を確認。IPと接続方法を確定。- ダミーロード/減衰器で80 MHz、低ゲイン、既知のWAVEを送信。受信音質と停止時RFを確認。
- 76 MHzと108 MHzのLO設定、実周波数、長時間連続送信・ループ境界を確認。
- 指定LOが拒否された場合はメーカー資料と既存設定を確認。標準Pluto用U-Boot設定を無条件に適用しない。
- 必要なら実機を使ったTXアンダーラン観測・音質改善・ステレオ対応を検討。
資料はREADME内のADI公式リンクを参照。Nano固有の公式仕様は確認できていない。
実機接続確認 (2026-10-07)
- USB VID:PID
0456:b673、USBネットワーク192.168.2.10/24、IIO URIip:192.168.2.1で接続成功。 - ボード申告:
Analog Devices PlutoSDR Rev.B (Z7010-AD9363A)、modelad9363a、FWv0.39-dirty、kernel6.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付きで音声を送信して受信機で確認。