删除了.trae文件夹及其所有内容,这些文件是IDE自动生成的文档和计划文件, 不属于工程代码的一部分。.trae文件夹已在.gitignore中被忽略。
# 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 # 项目说明文档
核心算法
信号处理流程
- 数据采集:通过ADC采集I/Q两路原始信号
- 去直流处理:消除信号的直流分量
- 相位计算:使用atan2函数计算相位
- 相位展开:处理相位跳变,确保连续性
- 人体检测:基于相位方差判断人体存在
- 活动识别:基于相位差分能量判断运动状态
- 频率估计:使用简化DFT在特定频段搜索最大能量
- 结果平滑:移动平均滤波和异常值过滤
参数配置
- 采样率: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雷达传感器模块
安装步骤
- 克隆或下载本项目
- 使用PlatformIO打开项目
- 连接ESP32-S3开发板
- 上传程序到开发板
- 通过串口监视器查看输出(115200波特率)
编译和上传
# 编译项目
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
- 初始版本发布
- 实现基本的人体检测和生命体征监测
- 添加信号平滑和异常值处理功能
Description
Languages
C++
79.4%
C
12.7%
Python
7.9%