Hacker News 中文摘要

RSS订阅

把 WiFi 7 路由器改造成 320Msps SDR 接收机 -- Turn a WiFi 7 Router into a 320Msps Software Defined Radio Receiver

正文科技(Gemtek)W1700K Wi-Fi 7 路由器被改造成宽带软件定义无线电接收机:联发科(MediaTek)MT7996 射频芯片以最高 320 Msps 采集原始 14 位 IQ 数据,络达科技(Airoha)AN7581 SoC 通过 10 GbE 将其流式传输,Linux 主机在浏览器中显示实时频谱和瀑布图,接收机控件并列在旁。整个 2.4 GHz 频段以 320 Msps 实时呈现,流中校正了抽取的滚降(flatten),对每个样本做 262,144 点 FFT,每秒 100 个频谱(此录制为每秒 50 帧)。

正文

W1700K SDR

把 Gemtek W1700K Wi-Fi 7 路由器变成宽带软件定义接收机。路由器的 MediaTek MT7996 射频芯片以最高 320 Msps 采集原始 14 位 IQ 数据,Airoha AN7581 SoC 通过 10 GbE 将其流式传输出去,Linux 主机则在浏览器里把它显示为实时频谱和瀑布图,旁边就是接收机的控制项。

在 320 Msps 下实时覆盖整个 2.4 GHz 频段,并对数据流中的抽取滚降做了校正(“flatten”):对每个样本做 262,144 点 FFT,每秒 100 帧频谱(本次录制的运行速度为每秒 50 帧)。

MT7996 只运行我们自己的固件:一个 ROM 补丁,以及从本仓库构建的 WM 和 WA,不含任何 MediaTek 代码。它从冷上电开始自行启动射频部分——MediaTek 的初始化和校准流程是逐寄存器对照 MediaTek 自家固件跟踪解码出来的——并接受来自主机的命令(本振 LO、采样率、采集、流传输、增益、滤波)。详见 docs/architecture.md 和 docs/roadmap.md。

它能做什么

各频段均支持 40、80、160 或 320 Msps 的 14 位复数 IQ 采样率,且与本振和滤波器无关;在频段 2 上还支持 640/2(即 640 Msps 每隔一个样本取一个:在 ±155 MHz 内平坦,但 160–320 MHz 外的信号会折叠进来)。支持的频段有 2.4 GHz(MT7976)、5 GHz 和 6 GHz(两颗 MT7977);切换频段只是在运行中的数据流里写一个寄存器。调谐没有信道概念:本振可以是该频段频率合成器能锁定的任意赫兹值(单元 A:2.081–2.748、4.647–7.509 和 4.707–7.576 GHz),步进网格为 2.98 Hz(2.4 GHz)或 11.9–14.3 Hz;可在流传输中途重新调谐(约 1 ms)。前端支持 AGC 或手动 LNA/基带增益;模拟滤波器为 20–320 MHz。传输方面,射频芯片通过 DMA 将数据送入 SoC DRAM 中的 1 GiB 环形缓冲区;内核把每个 8 KiB 分片作为一个 UDP 数据报零拷贝发送到 10 GbE 端口;在 320 Msps 时,有一半分片会在射频芯片自身的核心上打包成每样本对 28 位,以适应链路带宽(无损、自动)。主机侧,w1700k-stream 接收导出的数据,并以共享内存把 IQ 流提供给主机上的每个消费者(复数 int16,带间隙标记),还可选择对样本本身应用抽取滚降校正(“flatten”);w1700k-spectrum 对每个样本做 262,144 点 FFT,每秒 100 帧,带浏览器界面和实时控制;sdr-recv 则负责录制数据流。

屏幕截图

2.4 GHz 频段、320 Msps、已做 flatten:Wi-Fi 帧和较短的跳频突发信号,底部噪声一直平齐到频段边缘。Stream 面板显示链路承载 9.75 Gbit/s,一半分片被打包,每个样本都做了变换。

在 flattened 的 320 MHz 视图中,5170–5330 MHz 处有两个繁忙的 80 MHz Wi-Fi 信道。

放大到 5250 MHz 附近的 24 MHz:两个信道的边缘以及它们之间的保护间隔,频率分辨率为 1.22 kHz。

仓库结构

仓库结构如下:platform/ 包含在 SoC 上运行的东西——我们自己的 U-Boot、带板级补丁的 Linux 6.18,以及只读的 BusyBox 根文件系统;kernel/w1700k_sdr/ 是 MT7996 驱动(固件下载、DMA 环、10 GbE 导出、固件命令邮箱)及其设备侧客户端;firmware/ 是我们的 MT7996 固件:ROM 补丁、WM(射频启动和频段设置、数据流、射频控制)和 WA(打包器);host/w1700k/ 是主机控制:固件加载、流传输、以固件命令形式实现的射频控制,以及用于 Web 界面的 w1700k serve;host/stream/ 里的 w1700k-stream 是主机上导出数据的唯一接收者,为所有消费者提供共享内存中的 IQ 流,并做滚降校正;host/spectrum/ 是频谱/瀑布图 Web 服务器;host/recv/ 是数据流录制工具 sdr-recv;init/ 提供从原厂系统安装、更新和恢复的方法;include/hw/ 是寄存器参考,以 C 头文件形式给出所有已知的 MT7996、A-die 和 AN7581 寄存器;docs/ 包含架构和路线图。

快速开始

你需要一台 W1700K,一根接在其控制台排针上的 3.3 V USB 串口适配器,一根用于安装、连到其 lan3 端口的以太网线,以及主机上一块连到其 wan 端口的 10 GbE 网卡(10GBASE-T;用带铜缆 SFP+ 模块的 X710 也可以)来传输 IQ 流。

  1. make # 从公开源码构建全部内容(约 10 分钟,外加下载时间)
  2. make check # 运行测试套件
  3. sudo init/host/link up IFACE # 在连到 lan3 的网卡上配置 192.168.1.10/24
  4. sudo init/host/tftp-forward enable IFACE
  5. init/install # 备份 NAND、安装、保存射频校准数据
  6. sudo init/host/link up IFACE10G 10.77.0.10/24 9216 # 配置 10 GbE 流传输链路
  7. host/stream/build/w1700k-stream & # 启动数据流,供本主机上的所有消费者使用
  8. host/spectrum/build/w1700k-spectrum --controller " host/bin/w1700k serve " --listen 0.0.0.0:8073

然后在浏览器打开 http://HOST:8073/ 并按 ▶。首次启动会加载射频固件并把射频部分启动起来(约 2 秒)。不使用浏览器时,同样的操作对应 host/bin/w1700k load|start|band|tune|gain|filter|stop|status。

构建依赖:C/C++ 编译器、make、git、Python 3.10+、常规的 Buildroot 前置依赖,以及 clang、ld.lld、llvm-objcopy 和 llvm-readobj(用于 RISC-V 固件)、openssl(固件容器加密),还有流服务和频谱服务器所需的 libfftw3-dev 与 zlib。不需要下载任何厂商固件。

使用前须知

我们的固件只接收。它不运行 MediaTek 的任何发射校准,并保持 MAC 的发射路径禁用;在 5250 MHz 做不间断监听时,即使有负载也没有看到任何东西,而 MediaTek 固件此时会发射全功率突发信号。不过,不要在没有衰减器的情况下把天线端口直连到敏感仪器。

我们的 ROM 补丁不写 eFuse。MediaTek 自 2025 年以来的 ROM 补丁在首次运行时会永久编程一个 eFuse 门控位(即使用 MediaTek 自己的驱动也是如此);只要设备曾经运行过一次,该位就会被设置。

安装会替换掉原厂操作系统。init/install 会先把整个 NAND 拷贝到主机;请保留这个副本。恢复原厂系统需要原始 NAND 编程器,本仓库不提供。

访问未公开的 MT7996 或 AN7581 地址可能会挂死 SoC,或让射频部分在断电重启前一直卡死。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。

评论

讨论气氛以兴奋和惊叹为主,多数人称赞这颗约 80 美元的网络 / Wi-Fi 芯片方案把 5 GHz、320 兆采样每秒、14 位同相正交数据的接收能力带到极低成本;分歧主轴在于,这究竟是软件无线电真正普及化的飞跃,还是只是把现代芯片里本就存在的软件无线电能力换了个用法,且真实信噪比、日常用途仍待验证。

认为这是廉价高性能软件无线电的重大进步

  • 支持者强调性价比:不到百美元就能得到 320 兆采样每秒、14 位同相正交数据的 5 GHz 接收机,比此前用树莓派 MIPI 接口做的 QuadRF(80 兆采样每秒、8 位)提升显著,社区称其为软件无线电的一次大跨越(较多人) > 从 80 兆采样每秒、8 位跃升到 320 兆采样每秒、14 位,是软件无线电领域一次巨大的飞跃(@jauntywundrkind)
  • 也有人直接感叹“想不出更便宜的办法”,并认为约 80 美元的售价相当划算(高赞)

希望常见 Wi-Fi 网卡或设备都能变成通用软件无线电

  • 有人指出同一套思路可能适用于 Banana Pi R4 等采用相同芯片组的设备;同开发者此前还用 ESP32 Wi-Fi 单片机做过软件无线电,因此希望未来普通笔记本的 Wi-Fi 卡也能直接当廉价软件无线电用(较多人) > 希望将来常见 Wi-Fi 网卡也能这样用,让每台普通笔记本都变成廉价的软件无线电(@yonatan8070)
  • 也有人询问在欧洲如何买到该设备,说明供货与可及性同样被关心(少数人)

追问实际性能、意义与普通用途

  • 有人要求给出接收质量指标,尤其是信噪比表现如何(少数人)
  • 初学者请社区解释意义与术语,例如“兆采样每秒”是什么量级,以及这是否让芯片做了原本设计之外的事;也有人问普通人用软件无线电做什么,还是仅仅因为很酷(较多人) > 普通人到底拿软件无线电做什么?还是说只是因为很酷?(@sigbottle)
  • 对于想用它远距离接收 2.4 GHz Wi-Fi 的设想,有人泼冷水:若只为了收更远的 Wi-Fi,直接用八木天线更合理(少数人)

认为它并不新鲜,只是把已有的软件无线电换了用途

  • 有评论用一句俏皮话降温:准确描述其实是“把一个软件无线电变成另一个软件无线电”,因为 Wi-Fi / 网络芯片原本就是软件无线电,项目只是把这种能力开放给通用信号接收(少数人) > 说白了,这就是把一个软件无线电变成另一个软件无线电(@jeffbee)

联想到手机厂商限制第三方调用软件无线电能力

  • 有人由此联想到手机射频模块:现在很多手机无线电也是软件定义的,这或许解释了三星为何要求签合同才允许第三方使用调频广播等功能(少数人) > 很多手机射频现在都是软件定义的,这或许解释了三星要求签合同才让第三方使用调频广播的原因(@alightsoul)

提出可做成维修监测仪、相控阵等延伸玩法

  • 具有维修和软件无线电经验的人认为,如果再加 100 瓦衰减器、0–110 分贝步进衰减器、5 GHz 低通滤波器和 7–12 GHz 上下变频模块,它就能变成覆盖到 5 GHz 的小型高性能维修监测仪(较多人) > 加上衰减器、低通滤波器和上下变频器,它就能变成一台覆盖到 5 GHz 的高性能小型维修监测仪(@mikewarot)
  • 如果将来能发射采样,多台设备还能组成 DIY 相控阵,并可能利用多入多出做测向或波束成形(少数人)

有价值的补充

  • 同芯片组看起来也能用在 Banana Pi R4 上,因为该板自带 PCIe 并可接 NVMe(@thebeardisred)
  • 该设备采用的 Airoha AN7581 芯片除四核 Cortex-A53 外,还有 8 个 RISC-V 网络协处理器,硬件规格本身也很有看点(@jauntywundrkind)
  • 社区提到,此前有人让 ESP32 以约 200–250 kHz 的较低带宽发射,相关实验在网上有汇总(@radio879)