Open-SDR/openwifi项目中的IQ采样捕获功能详解
概述
在无线通信系统中,IQ(In-phase/Quadrature)采样数据是理解信号特性的关键。Open-SDR/openwifi项目实现了一套功能强大的IQ采样捕获系统,不仅能够捕获基本的IQ数据,还集成了多种触发条件、RSSI(接收信号强度指示)、射频芯片AGC(自动增益控制)状态(锁定/解锁)和增益信息等高级功能。
功能特点
- 多触发条件:支持31种不同的触发条件,满足各种场景需求
- 全面监控:同时捕获IQ数据、AGC状态和RSSI信息
- 时间戳记录:精确记录每次捕获的时间点
- 灵活配置:可调整捕获长度、预触发长度和采样间隔
- 多模式支持:不仅支持监控模式,还可与AP-Client或ad-hoc模式同时运行
快速入门指南
准备工作
- 确保SDR开发板已上电
- 通过网线将计算机连接到开发板
- 设置计算机静态IP为192.168.10.1
操作步骤
-
SSH连接开发板:
ssh root@192.168.10.122
密码为"openwifi"
-
运行基础脚本:
cd openwifi ./wgd.sh
-
设置监控频道(以11频道为例):
./monitor_ch.sh sdr0 11
-
加载侧信道驱动:
insmod side_ch.ko iq_len_init=8187
注意:对于小型FPGA(如7Z020),iq_len_init应小于4096
-
配置预触发长度(仅限zed、adrv9364z7020、zc702开发板):
./side_ch_ctl wh11d4094
-
启动IQ捕获:
./side_ch_ctl g
-
在另一终端运行Python可视化工具:
cd openwifi/user_space/side_ch_ctl_src python3 iq_capture.py
技术细节解析
IQ信息架构
整个IQ捕获系统由多个模块协同工作:
- FPGA侧:负责实时信号处理和数据采集
- 驱动层:处理FPGA与操作系统间的数据传输
- 用户空间:提供配置接口和数据分析工具
数据格式
每个捕获的数据包包含以下64位元素:
- 时间戳:64位TSF计时器值
- IQ数据:
- 前16位:当前使用天线的I采样
- 次16位:当前使用天线的Q采样
- 第三16位:AD9361 AGC增益(bit7表示锁定状态,bit6-0表示增益值)
- 第四16位:RSSI(半dB单位,未校准)
高级配置
触发条件配置
系统支持31种触发条件,主要分为以下几类:
- 帧校验相关:FCS校验结果、SIGNAL字段校验结果
- 前导检测:长前导、短前导检测
- 信号强度:RSSI阈值触发
- AGC状态:锁定/解锁状态变化、增益阈值触发
- 发射相关:发射开始/结束、需要ACK的发射等
配置示例:
./side_ch_ctl wh8d10 # RSSI高于阈值时触发
预触发长度配置
预触发长度决定了捕获窗口中触发点之前的数据量:
./side_ch_ctl wh11dY # Y为预触发长度值
捕获间隔调整
默认捕获间隔为100ms,可通过以下命令调整:
side_ch_ctl gN # N为间隔毫秒数
实际应用技巧
- 与WiFi数据包关联:同时运行tcpdump捕获数据包,通过时间戳关联IQ数据与具体数据包
- 自发射信号捕获:默认情况下接收基带在自发射时静音,可通过命令解除:
./sdrctl dev sdr0 set reg xpu 1 1
- 离线分析:利用提供的Matlab脚本
test_iq_file_display.m
进行深入分析
常见问题解答
Q:为什么捕获的数据量有限? A:受FPGA内部缓冲区大小限制,小型FPGA最大捕获长度约为4095个样本
Q:如何实现连续捕获? A:使用以下组合命令:
./side_ch_ctl wh8d0
./side_ch_ctl wh5d1
Q:如何校准RSSI值? A:需要参考xpu.v和sdr.c中的校准算法,将原始RSSI值转换为实际信号强度
总结
Open-SDR/openwifi项目的IQ捕获功能为无线信号分析提供了强大工具,其灵活的配置选项和丰富的数据输出使其适用于各种无线通信研究和开发场景。通过合理配置触发条件和捕获参数,用户可以精确捕获感兴趣的信号特征,为无线系统性能分析和优化提供有力支持。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考