完整的 802.11a Wi-Fi 接收物理层 FPGA 实现:从基带 I/Q 采样到恢复出的数据比特。 包检测、载波频偏校正、OFDM 解调、信道均衡、软解调与维特比译码,全部以逐比特一致的 RTL 自动生成,并通过逐比特恢复一段 MATLAB 生成的标准波形(0 误码)得到验证。它部署在 ADALM-Pluto 软件无线电这台边缘端设备上,切分到 FPGA 逻辑、嵌入式 ARM 与主机三层, 在每一档数据率上空口恢复出所传输的图像。
接收机的输入是 MATLAB WLAN 工具箱生成的波形,经过 12 比特 ADC 模型, 再交给定点硬件译码。下面每一个数字都是实测的工具结果:Vivado 布局布线时序报告、 资源占用报告,或逐比特的 cocotb 交叉验证。
完整的接收机作为一个整体,在 Zynq-7010 上做了一次 完整布局布线,也另外在 Zynq UltraScale+ RFSoC 上做了表征以展示时钟余量。但在 ADALM-Pluto 本身上,完整接收机和无线电自己的接口逻辑放不下,所以上板部署被拆到三层:同步前端放进 FPGA, 其余交给主机,并做了空口实测。下面每个数字都是真实实测结果。
| 结果 | 数值 | 来源 |
|---|---|---|
| 接收时钟,完整接收机 (Zynq-7010 布局布线) | 162.7 MHz | Vivado 布局布线,双时钟 实测 |
| 接收时钟,Zynq UltraScale+ RFSoC (表征) | 309.6 MHz | Vivado 时序汇总 实测 |
| 逻辑资源,完整接收机 (Zynq-7010 布局布线) | 8,514 LUT / 8,233 FF | Vivado 资源占用 实测 |
| 空口交付图像,全部八档 | 逐比特 100% | 原始单包 832 里 831,一次信道抖动 实测 |
| 连续译码,90 秒连跑 | 1390 / 1390 | 每个包,无需复位 实测 |
| 端到端恢复,MATLAB 波形到定点接收机 | 0 误码 / 38,400 比特 | 逐比特交叉验证 实测 |
完整接收机(约 8,500 个逻辑单元)加上无线电的接口逻辑(又约 8,500 个), 超过了 Pluto 上总共的 17,600 个,所以上板部署把最吃速率的同步前端留在 FPGA,其余更重的后端 交给主机,两级接口分别走 DMA 和 USB。它连续运行:消费一条不间断的基带采样流,自己找出每一个 包,一个接一个地译码、包与包之间无需复位,在全部八个数据率档位上都把发送的比特精确收回。
输入是射频前端(ADALM-Pluto 上的 AD9363)下变频之后送出的一串基带 I/Q 采样,而非天线信号本身。接收机分四段把这串采样变成干净的数据比特,每一段都对应 802.11a 标准里的一个步骤。
Schmidl-Cox 包检测加上对训练序列的匹配滤波,在采样流中找到每一个包,锁定精确的 符号定时,并在解调前估计并校正载波频偏。
64 点 FFT 把每个 OFDM 符号变换到频域。长训练符号给出信道估计,每一个数据子载波 都用各自的修正系数单独均衡。
每个均衡后的子载波结合信道状态加权,软解调成对数似然比,再经解交织与解凿孔, 重建出译码器所需的编码比特流。
针对码率 1/2、K=7 卷积码的维特比译码器运行在自己的时钟域,由一个小的异步 FIFO 跨接,随后解扰,交付原始净荷比特。
需要不同的标准或一条发射链路(802.11n、 自定义 OFDM 链路)?同一套流程会生成并重新验证新的配置。 参见 IP 定制。
接收机在两根天线上进行了空口实测。下面的链路分析器回放的就是这段真实的 片上采集数据,无需任何硬件。随着数据速率提升,星座图从 BPSK 逐步收敛到 64-QAM,信道响应 与频谱同步更新,发送的图像也随着每个数据包被译码而逐步重建。
在两根天线的空口链路上,每一种数据速率都能逐比特 无误地恢复图像;在连续运行中,每一个数据包都被无误译码。上方的分析器直接在你的浏览器里回放 真实采集的采样数据,不连接服务器、也不连接任何射频设备。