189 lines
5.8 KiB
Markdown
189 lines
5.8 KiB
Markdown
# 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
|
||
- 初始版本发布
|
||
- 实现基本的人体检测和生命体征监测
|
||
- 添加信号平滑和异常值处理功能 |