First commit
This commit is contained in:
commit
9bc5ed5462
8 files changed
+462
No files matched your search
@@ -0,0 +1,68 @@
|
||||
# 作業状況 (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`付きで音声を送信して受信機で確認。
|
||||
Reference in new issue
Block a user