WiFi 7 ルーターを 320Msps ソフトウェア定義無線受信機に変える方法

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
  • ステップ分解能:
    • 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 ビット圧縮してリンク適合化します(ロスレスかつ自動処理)。

ホスト側処理構成

  • w1700k-stream
    : エクスポートされたデータを収容し、ホスト上のすべてのクライアントに IQ ストリームを配信します(共有メモリ方式、複素 int16 形式、ギャップタグ付き)。サンプル自体に対するロールオフ補正も適用可能です。
  • w1700k-spectrum
    : 各サンプルに対し 262,144 点 FFT を毎秒 100 フレームで実行し、ブラウザ UI とリアルタイムコントロールを提供します。
  • 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/
w1700k-stream
(共有メモリによる IQ ストリーム配信、ロールオフ補正)
host/spectrum/スペクトラム/ウォーターフォール Web サーバー
host/recv/
sdr-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(ファームウェアコンテナ暗号化用)
  • ベンダーファームウェアのダウンロードは不要です。

⚠️ 使用前必読事項

  1. 受信専用: 本ファームウェアは受信専用です。MediaTek の送信校正機能は一切実行せず、MAC の送信パスは無効化されています。ロード時は何も検出されないことに注意してください(公式ファームウェアとの相違点)。
  2. アンテナ接続注意: アンテナポートを感度の高い機器に直接接続するのは避け、必ずアテニュエータを使用してください。
  3. eFuse の書き込み: 当 ROM パッチは初回実行時に恒久的に 1 ビットの eFuse ゲートをプログラムします(2025 年以降の MediaTek 仕様準拠)。一度動作したユニットはそのビットがセットされた状態になります。
  4. OS インストール注意:
    init/install
    は標準 OS を置き換えます。NAND 全体をホストにコピーしてからバックアップを作成してください。復元にはローナル NANDライターが必要で、本リポジトリでは提供されていません。
  5. レジスタアクセス注意: 未文書化の 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
ファイルを参照してください。

同じ日のほかのニュース

一覧に戻る →

2026/10/13 6:40

AI は道具です。それを巧みに使うには技術が必要です。

## 日本語翻訳: 本稿の核心的な論点は、大規模言語モデルは自律的な「自動化」ではなく、人間の技量が必要なツールであるというものである。これは、AI が独立した意思あるいは悪意を持って行動するという考え方を否定するものであり、ソフトウェアが「反逆する(rogue)」ように振る舞うなど、業界特有の成り行きや陰謀論的なナラティブに煽られておりやすい。物理的な器具が悪用され得るように、LLM もエンジニアリング上の制限によって予期せぬ出力を生み出すに過ぎず、エージェント性の喪失によるものではない。人間による判断が依然として中核をなすのは、ユーザーが盲目的に制御権を委ねるのではなく、フィードバックループ内で結果を検証し、プロンプトを見直し、変更を検証するからです。本稿は AI を記述するために使用される擬人化された言語を批判しており、「陰謀」などの用語は技術的な問題が存在する場所に人間の動意を不当に暗示することを示唆しているとしています。 今後の議論では、AI を別個の存在として描く枠組みから転じ、解釈への問いかけや誤りへの認識においてユーザーの専門性を育むことに焦点を移すべきです。開発者および企業に対しては、恐怖を煽る比喩ではなく正確な工学用語を採用することで、より良いリスク管理と説明責任を実現できます。真の熟達とは、どのような質問が重要かを理解し、熟練した運用と盲目的な委任を見極めることであり、不完全なパフォーマンスがツールの有用性や作業者の責任を否定するものではありません。

2026/10/13 1:13

C で構築されたモダンな Web アプリ

## Japanese Translation: 本テキストは、2026 年に C と CGI を OpenBSD 上で構築された独自の商用 Web アプリケーション「marketyour.games」について説明しています。このプロジェクトは現代のフレームワークよりも極度な簡潔性とセキュリティを優先しており、「BCHS」スタック(OpenBSD、C、httpd、SQLite)を採用し、外部のフレームワークや独立したデータベースサーバーは一切使用しません。核心的な革新点は、アプリケーション全体が静的にリンクされた単一のバイナリとして動作し、ランタイム依存関係がゼロであるというアーキテクチャにあります。デプロイはファイルを 1 つだけフォルダに配置するだけであり、古いバージョンを置き換えるだけで済みます。再起動やダウンタイムも不要です。 セキュリティは OpenBSD のデフォルト設定を通じて強制されており、httpd に対して `chroot` を適用し、C プログラムに対して `pledge` および `unveil` などのツールを使用して制約を課します。アーキテクチャは、すべての HTTP リクエストごとに新しいプロセスをフォークし、コードから直接アセットを提供することでメモリ内に完全に収まり、すべてのトラフィックを httpd を介して CGI バイナリにルーティングするという方式に基づいています。このアプローチでは JavaScript テンプレート言語を使用しない(プログレッシブ改善に従う)とともに、安定した CGI 1.1 規格に準拠しますが、使いやすさを犠牲にして制御性を追求します。 主な利点としては、サプライチェーンリスクが著しく低減すること—依存するのは C コンパイラーと 3 つのライブラリ(`libcurl`、`libsodium`、組み込み済みの `libcjson`)のみ—、そして GDB のような標準ツールによるデバッグが容易であることです。アプリケーションは通常の実行ファイルだからです。しかしながら、この手法では開発者がデータを解析するためのロジック(クッキー、クエリ、フォーム)やカスタムヘッダーの管理を自ら実装する必要があり、複雑な依存関係グラフではなく、基本的な HTTP 概念と Vim のような古典的なツール(プラグインなし)を活用する姿勢を選択します。

2026/10/13 4:40

ZX Spectrum 向けのデモシーンイントロを作成する

## Japanese Translation: 著者は、標準的な 128KB の ZX Spectrum にて手書きのレトロなイントロを成功裏に作成し、高度に最適化されたアセンブリ言語プログラミングにより複雑なビジュアルとオーディオを実現した。2 ヵ月間(2025 年 12 月から開始)にわたり、約 19KB のコード(具体的には 10287 バイトのメインルーチン)を書き下し、内蔵 ROM を書き換えることでカスタムフォント「Cartoon」を用いたスムーズなスクロールテキストを作成し、また Amiga モジュール「Milkman」を変換して 3 チャネル AY サウンドトラックを生成した。限られたメモリ制限を管理するため、アセットは BASIC ロードに分割され、ルーチンはオーバーヘッドを避けるために特定のアドレスでハードコーディングされた。技術的な最適化としては、Z80 RL 命令を用いてスクロールテキストの回転を実現し、スキャンライン衝突を避けるために Ruby で生成した座標テーブルを事前計算してスターフィールド効果を再現し、さらにサウンドチップから直接振幅レジスタを読み取ってバウンス VU メーターを実装している。プロジェクトは 1980 年代後半の Amiga クrack イントロに触発され、本物の Spectrum +3上でローカル TNFS サポートのある Makefile 駆動のビルドシステムを用いて開発された。最終的な.tap ファイルは Web ブラウザまたは pouet.net を経由して入手でき、レトロなハードウェア上で高忠実度な体験を提供し、極限を効率的に達成したコーディングの実証として立っている。

WiFi 7 ルーターを 320Msps ソフトウェア定義無線受信機に変える方法 | そっか~ニュース