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

69 lines
6.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 作業状況 (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`付きで音声を送信して受信機で確認。