# Rader_IQ 基于ESP32-S3的雷达信号处理项目,用于人体存在检测、心率和呼吸率监测。 ## 项目简介 本项目使用ESP32-S3微控制器和24GHz雷达传感器(R60ABD1)实现非接触式人体生命体征监测。通过处理原始IQ信号,系统能够实时检测人体存在状态,并准确测量心率和呼吸率。 ## 主要功能 - **人体存在检测**:基于相位方差分析判断是否有人体存在 - **活动状态识别**:区分人体静止和运动状态 - **心率监测**:通过频域分析提取心率信号(40-180 BPM) - **呼吸率监测**:通过频域分析提取呼吸率信号(4-40 BPM) - **信号平滑处理**:使用移动平均滤波减少测量波动 - **异常值检测**:自动过滤超出生理范围的测量值 ## 硬件平台 - **主控芯片**:ESP32-S3 WROOM - **开发板**:FreeNove ESP32-S3 WROOM - **雷达传感器**:R60ABD1 24GHz毫米波雷达 - **ADC配置**:12位分辨率,12dB衰减 ## 技术栈 - **开发框架**:Arduino Framework - **构建工具**:PlatformIO - **主要库**: - ArduinoJson(JSON数据处理) - Modbus-ESP8266(Modbus通信) ## 项目结构 ``` Rader_IQ/ ├── src/ │ ├── main.cpp # 主程序入口 │ ├── radar_vitals.h # 雷达信号处理头文件 │ ├── radar_vitals.cpp # 雷达信号处理实现 │ ├── io_flash.h # IO和Flash管理头文件 │ └── io_flash.cpp # IO和Flash管理实现 ├── data_formats_explanation.md # 数据格式说明文档 ├── platformio.ini # PlatformIO配置文件 └── README.md # 项目说明文档 ``` ## 核心算法 ### 信号处理流程 1. **数据采集**:通过ADC采集I/Q两路原始信号 2. **去直流处理**:消除信号的直流分量 3. **相位计算**:使用atan2函数计算相位 4. **相位展开**:处理相位跳变,确保连续性 5. **人体检测**:基于相位方差判断人体存在 6. **活动识别**:基于相位差分能量判断运动状态 7. **频率估计**:使用简化DFT在特定频段搜索最大能量 8. **结果平滑**:移动平均滤波和异常值过滤 ### 参数配置 - **采样率**:4000 Hz - **数据长度**:256个样本 - **有效采样率**:200 Hz(经过20倍降采样) - **心率频段**:0.8-2.5 Hz(48-150 BPM) - **呼吸频段**:0.1-0.5 Hz(6-30 BPM) - **平滑窗口**:10个样本 ## 引脚定义 | 功能 | 引脚 | 说明 | |------|------|------| | I信号输入 | GPIO9 | ADC1_CHANNEL_0 | | Q信号输入 | GPIO10 | ADC1_CHANNEL_1 | | 网络LED | GPIO35 | 网络状态指示 | | 配置清除 | GPIO4 | 配置清除指示灯 | | 雷达启动 | GPIO36 | 雷达使能信号 | | Boot按钮 | GPIO0 | 系统启动按钮 | ## 安装和配置 ### 环境要求 - PlatformIO IDE(推荐使用VSCode + PlatformIO扩展) - ESP32-S3开发板 - R60ABD1雷达传感器模块 ### 安装步骤 1. 克隆或下载本项目 2. 使用PlatformIO打开项目 3. 连接ESP32-S3开发板 4. 上传程序到开发板 5. 通过串口监视器查看输出(115200波特率) ### 编译和上传 ```bash # 编译项目 pio run # 上传到开发板 pio run --target upload # 监视串口输出 pio device monitor ``` ## 数据输出格式 系统通过串口输出实时监测数据,格式如下: ``` 👤 Human moving - IQ电压: I=1.570V, Q=1.572V - 💓 心率: 72.0 BPM, 呼吸: 16.0 BPM ``` ### 状态说明 - **No person**:未检测到人体 - **Human moving**:检测到人体运动 - **Human static**:检测到人体静止 ### 数据字段 - **IQ电压**:I和Q通道的平均电压值 - **心率**:实时心率(BPM) - **呼吸率**:实时呼吸率(BPM) ## 性能特点 - **实时性**:每256个样本更新一次结果 - **准确性**:通过频域分析提高测量精度 - **稳定性**:多层滤波处理减少波动 - **鲁棒性**:异常值检测确保数据可靠性 ## 开发说明 ### 代码规范 - 使用C++编程语言 - 遵循Arduino编码规范 - 使用FreeRTOS多任务处理 - 模块化设计,便于维护和扩展 ### 调试建议 - 使用串口监视器查看实时输出 - 调整滤波参数以适应不同环境 - 根据实际需求修改频段范围 - 注意ADC采样率和处理能力的平衡 ### 扩展功能 - 添加BLE或WiFi通信功能 - 集成数据存储和上传功能 - 开发移动端或Web端监控界面 - 添加多目标检测功能 ## 常见问题 ### 心率和呼吸率波动大 - 确保雷达传感器位置正确 - 避免环境中有强干扰源 - 调整平滑窗口大小 - 检查传感器连接是否稳定 ### 检测不到人体 - 检查雷达传感器供电 - 确认传感器工作正常 - 调整检测阈值参数 - 检查ADC通道配置 ## 许可证 本项目仅供学习和研究使用。 ## 联系方式 如有问题或建议,请通过项目仓库联系。 ## 更新日志 ### v1.0 - 初始版本发布 - 实现基本的人体检测和生命体征监测 - 添加信号平滑和异常值处理功能