
2026/10/12 21:41
WiFi 7 ルーターを 320Msps ソフトウェア定義無線受信機に変える方法
RSS: https://news.ycombinator.com/rss
要約▶
日本語翻訳:
本プロジェクトでは、Gemtek W1700K Wi-Fi 7 ルーターを MediaTek MT7996 ラジオと Airoha AN7581 SoC を使用した広帯域ソフトウェア定義受信機に変換します。ベンダー製ファームウェアを必要としないカスタムファームウェア(Linux カーネル 6.18、U-Boot、ROM パッチ、WM ブリングアップ、WA パッカー)により、システムは 2.4 GHz(MT7976)および 5/6 GHz 帯域(2 つの MT7977)で最大 320 Msps の生 14 ビット IQ データをキャプチャします。ストリーミングはゼロコピー UDP データグラムを用いた 10 GbE ポート経由で行われ、自動的なロスレスパッキングによりキャプチャ中の最小のレイテンシとデータロスのなしを実現しています。
チューニングはチャネルレスであり、ユーザーは指定されたグリッド内(例:2.4 GHz では 2.98 Hz ステップ)で任意の LO 周波数を設定でき、記録を停止せずにストリーミング中に約 1 ms で再チューニングが可能です。バンド切り替えは実行中のストリーム内のレジスター書き込みにより行われ、40、80、160、または 320 Msps のサンプリングレートは LO およびフィルタ設定に依存せずサポートされています(バンド 2 では 640/2 モードもサポート)。
Linux ホストでは w1700k-spectrum を使用してブラウザ上にてライブスペクトラムとウォーターフォールを表示し、受信機制御とともに動作します。追加ツールの他に、共有メモリアーキテクチャによる IQ エクスポート用の w1700k-stream と記録用の sdr-recv が用意されています。インストール時には標準 OS 置換、NAND バックアップ、および特定のハードウェア(ホスト側のコンソールアクセス用 USB シリアルアダプターと Intel X710 のような銅 SFP+ を備えた 10 GbE NIC)の必要性があります。ビルド要件としては C/C++ コンパイラ、make、git、Python 3.10 以上、RISC-V ツールチェーン、libfftw3-dev などのライブラリが必要です。ベンダー製ファームウェアは不要です。
このソリューションは受信専用モード(MAC 送信無効)で動作し、感度の高い機器に接続する際にはアッテネーター経由でアンテナを接続することをユーザーに警告します。ライセンスは主に MIT で、Linux ドライバー/カーネルおよび U-Boot については GPL-2.0/GPL-2.0+ パッチ、MediaTek 由来のファイルについては BSD-3-Clause-Clear が適用されます。このワンストッププラットフォームにより、研究員や愛好家は消費級ハードウェアを用いて、サンプリングレートの独立制御、バンド切り替え、プロフェッショナルグレードのスペクトラム解析を可能にしています。
本文
Gemtek W1700K をソフトウェア定義受信機へ変換:Wi-Fi 7 ルータとメディアテック MT7996 の活用
Gemtek W1700K Wi-Fi 7 ルーターを搭載した MediaTek MT7996無線ユニットを、独自ファームウェアにより高機能なソフトウェア定義受信機(SDR)に変換します。このシステムは Airoha AN7581 SoC を活用し、最大 10ギガイーサネット の帯域幅で生データストリーミングを実現します。
概要と特徴
独自ファームウェアにより MediaTek 公式のコードは一切使用せず、ROM パッチ、起動処理(WM)、およびパッカー処理(WA)を全て独自に実装しています。Linux ホストからは Web ブラウザ上でリアルタイムなスペクトラム表示やウォーターフォール表示が可能で、各種コントローラー機能も提供されます。
- サンプリング特性: 全体帯域の 2.4 GHz バンドにおいて、320 Msps のサンプリングレートで生データの 14 ビット IQ 信号を取得します。
- データ補正: デシメーションに伴うローパスフィルタ特性(ロールオフ)はストリーム上で補正済み("flatten" モード)。
- 高速処理: 各サンプルに対し262,144 点の FFTを計算し、毎秒 100 フレームでスペクトラムを表示します(録画例は毎秒 50 フレーム動作)。
- 制御方法: Radio を冷間起動状態から自力で立ち上げ、MediaTek の初期化・校正レジスタ値を公式ファームウェアのトレースに基づき逐次デコードしています。ホストからは周波数、レート、キャプチャ制御、ゲイン、フィルタ設定などをコマンド経由で制御可能です(詳細:
/docs/architecture.md
)。docs/roadmap.md
機能概要
サンプリングレートと帯域
- 高解像度取得: LO 周波数やアナログフィルタの設定に依存せず、全バンドで 40、80、160、320 Msps の 14 ビット複素 IQ 信号を取得可能です。
- 第 2 バンド対応: 第 2 バンドでは 640/2(640 Msps の偶数次元サンプリング)も対応し、平坦性は**±155 MHz**まで確保されています。
- 注: 160~320 MHz 離れにある信号はアリアシングにより重複表示される可能性があります。
動作バンドとチューニング
- 対応バンド:
- 2.4 GHz バンド(MT7976)
- 5 GHz および 6 GHz バンド(MT7977 × 2)
- 即時切り替え: バンド切替は稼働中のストリーム中にレジスタ書き込みのみで即時行えます。
- 柔軟なチューニング: チャンネル概念がありません。LO 周波数は、各バンドのシンセサイザーがロックする任意の Hz で設定可能です。
- ユニット A 対応周波数範囲:
- 2.081–2.748 GHz
- 4.647–7.509 GHz
- 4.707–7.576 GHz
- ユニット A 対応周波数範囲:
- ステップ分解能:
- 2.4 GHz バンド: 2.98 Hz
- その他: 11.9~14.3 Hz ステップ
- 再チューニング: ストリーム中での再チューニングが可能で、約 1 ms で完了します。
フロントエンドとデータ転送
- ゲイン制御: AGC(自動ゲイン制御)または手動の LNA/ベースバンドゲインを選択可能です。アナログフィルタ帯域は 20–320 MHz です。
- 効率的な DMA 転送: 無線ユニットが SoC DRAM 内の1 GiB リングバッファへ DMA 転送を行います。カーネルは毎 8 KiB スライスをゼロコピーで単一の UDP パケットとして 10Gbps ポートから送出します。
- 自動圧縮: 320 Msps の場合、半分のスライスのみを無線ユニット内部コア上でサンプルペアあたり28 ビット圧縮してリンク適合化します(ロスレスかつ自動処理)。
ホスト側処理構成
: エクスポートされたデータを収容し、ホスト上のすべてのクライアントに IQ ストリームを配信します(共有メモリ方式、複素 int16 形式、ギャップタグ付き)。サンプル自体に対するロールオフ補正も適用可能です。w1700k-stream
: 各サンプルに対し 262,144 点 FFT を毎秒 100 フレームで実行し、ブラウザ UI とリアルタイムコントロールを提供します。w1700k-spectrum
: ストリームを録画する専用ツールです。sdr-recv
スクリーンショット例
- 320 Msps での 2.4 GHz バンド表示(flatten 適用済み): Wi-Fi フレームおよび短いホッピングパルスが、バンド端縁に平行な平らな基盤上で表示されます。Stream パネルでは9.75 Gbit/sのリンク容量(スライス半分を圧縮時)、およびすべてのサンプルの変換状況を表示します。
- flatten 適用された 320 MHz ビュー: 5170–5330 MHz 帯域にわたる二つの混雑した 80 MHz Wi-Fi チャネルが見えます。
- 24 MHz 拡大表示(中心 5250 MHz): 両チャネルの端縁およびその間のガードバンドを、1.22 kHzのビン分解能で可視化しています。
リポジトリ構成
| ディレクトリ | 説明 |
|---|---|
| platform/ | SoC 上で動作するコンポーネント(U-Boot、Linux 6.18 ボード修正版、ReadOnly BusyBox) |
| kernel/w1700k_sdr/ | MT7996 ドライバ(ファームウェア DL、DMA リング、10Gbps エクスポート、コマンド MB)、ユニットサイドクライアント |
| firmware/ | 独自 MT7996 ファームウェア(ROM パッチ、起動/帯域制御用 WM、パッカー用 WA) |
| host/w1700k/ | ホスト側制御機能(ファームウェアロード、RF 制御コマンド)、Web UI サーバー |
| host/stream/ | (共有メモリによる IQ ストリーム配信、ロールオフ補正) |
| host/spectrum/ | スペクトラム/ウォーターフォール Web サーバー |
| host/recv/ | (ストリーム録画ツール) |
| init/ | 標準 OS のインストール・アップデート・リカバリ手順 |
| include/hw/ | レジスタ参照資料(C ヘッダー提供)、既知の危険箇所注釈付き |
| docs/ | アーキテクチャ概要、ロードマップ |
開始方法
必要な機器
- Gemtek W1700K 本体
- コンソールヘッドへの3.3V USB シリアルアダプター
- イーサネットケーブル(LAN3 ポート接続用)
- ホスト側の10ギガイーサネット NIC(wan ポート接続;10GBASE-T 対応。X710 コピー SFP+ モジュールでも動作)
ビルドとインストール手順
# 全ソースのビルド(パブリックソースから約 10 分+ダウンロード時間) make # テストスイートの実行 make check # IP アドレス設定(LAN3 に接続した NIC、例:IFACE) sudo init/host/link up IFACE # TFTP 転送エミュレーションを有効化 sudo init/host/tftp-forward enable IFACE # NAND バックアップ、OS インストール、校正データ保存 init/install
サービス起動と Web UI へのアクセス
# 10Gbps ストリームリンクの設定(IFACE10G は WAN ポート) sudo init/host/link up IFACE10G 10.77.0.10/24 9216 # ホスト上のすべてのクライアント向けにストリーム起動 host/stream/build/w1700k-stream & # スペクトラム Web サーバー起動(ポート 8073) host/spectrum/build/w1700k-spectrum --controller "host/bin/w1700k serve" --listen 0.0.0.0:8073
その後、ブラウザで
http://HOST:8073/ にアクセスし、▶ボタンを押してください。初回起動では無線機ファームウェアのロードと Radio の立ち上げ(約 2 秒)が行われます。
ブラウザを使用せずコマンドラインで制御する場合は、以下のコマンドを使用可能です:
host/bin/w1700k load|start|band|tune|gain|filter|stop|status
ビルド要件
- コンパイラ環境:C/C++、make、git、clang、ld.lld、llvm-objcopy、llvm-readobj(RISC-V ファームウェア用)
- スクリプト言語:Python 3.10 以上
- ビルド系ライブラリ:Buildroot プリリquisite、libfftw3-dev、zlib
- セキュリティ:openssl(ファームウェアコンテナ暗号化用)
- ベンダーファームウェアのダウンロードは不要です。
⚠️ 使用前必読事項
- 受信専用: 本ファームウェアは受信専用です。MediaTek の送信校正機能は一切実行せず、MAC の送信パスは無効化されています。ロード時は何も検出されないことに注意してください(公式ファームウェアとの相違点)。
- アンテナ接続注意: アンテナポートを感度の高い機器に直接接続するのは避け、必ずアテニュエータを使用してください。
- eFuse の書き込み: 当 ROM パッチは初回実行時に恒久的に 1 ビットの eFuse ゲートをプログラムします(2025 年以降の MediaTek 仕様準拠)。一度動作したユニットはそのビットがセットされた状態になります。
- OS インストール注意:
は標準 OS を置き換えます。NAND 全体をホストにコピーしてからバックアップを作成してください。復元にはローナル NANDライターが必要で、本リポジトリでは提供されていません。init/install - レジスタアクセス注意: 未文書化の MT7996 または AN7581 アドレスへのアクセスは SoC フリーズや Radio の不応答(パワーサイクルが必要)を引き起こす可能性があります。**
**には既知の危険箇所が注釈付きで記載されています。include/hw/
ライセンス情報
全体的に MIT ライセンスを適用していますが、以下の例外があります:
- Linux ドライバおよびカーネルパッチ: GPL-2.0-only
- U-Boot パッチ: GPL-2.0+
- ドライバユーザースペースヘッダー: GPL-2.0 WITH Linux-syscall-note
- MediaTek mt76 ドライバー由来のファイル: BSD-3-Clause-Clear
詳細は
LICENSE ファイルを参照してください。