medical_SDK/MAIN_CPP_MODIFICATIONS.md

126 lines
3.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Main.cpp 修改说明
## 主要修改内容
### 1. **新增辅助函数**
- `get_data_type_name()`: 将DataType枚举转换为友好的中文名称
- `test_new_parser()`: 测试新解析函数的专用函数
### 2. **重构 test_try() 函数**
#### **原来的错误逻辑(已修复):**
```cpp
// ❌ 错误:对单个数据包进行滤波
for(auto& processed_data : all_data) {
processed_data = processor.preprocess_signals(processed_data); // 对单个包滤波
}
```
#### **新的正确逻辑:**
```cpp
// ✅ 正确:使用通道级滤波方法
std::vector<SensorData> processed_data = processor.process_channel_based_filtering(all_data);
```
## 新的数据处理流程
### **完整流程:**
```
1. 读取原始二进制文件
2. 解析设备数据包 (parse_device_data)
3. 通道映射 (DataMapper)
4. 通道级滤波 (process_channel_based_filtering) ← 关键改进
5. 计算生理指标 (根据设备类型)
6. 保存处理后的数据
7. 显示处理前后对比
```
### **关键改进点:**
#### **4. 通道级滤波处理**
- **原来**: 对每个数据包内的短时间序列进行滤波
- **现在**: 对每个通道的完整数据进行滤波
- **优势**:
- 滤波器获得完整的时间序列信息
- 避免数据包边界处的滤波伪影
- 保持通道数据的连续性
#### **5. 智能生理指标计算**
```cpp
// 根据数据类型选择合适的计算方法
if (calculated_data.data_type == DataType::ECG_12LEAD) {
heart_rate.push_back(calculator.calculate_heart_rate_ecg(calculated_data, 250));
} else if (calculated_data.data_type == DataType::ECG_2LEAD) {
heart_rate.push_back(calculator.calculate_heart_rate_ecg(calculated_data, 250));
} else if (calculated_data.data_type == DataType::PPG) {
// 可以添加PPG相关的心率计算
heart_rate.push_back(0); // 暂时设为0需要实现PPG心率计算
}
```
#### **8. 处理前后对比显示**
- 显示每个数据对象的原始信息
- 显示处理后的信息
- 对比通道数量和采样点数
- 验证数据处理的有效性
## 使用方法
### **选择测试模式:**
```
请选择测试模式:
1. 测试新解析函数 (查看解析结果)
2. 运行原有测试流程
请输入选择 (1 或 2):
```
### **模式1 - 测试新解析函数:**
- 读取文件并解析
- 显示详细的解析结果
- 保存到 `new_parser_output.csv`
### **模式2 - 运行完整流程:**
- 执行完整的数据处理流水线
- 包含通道级滤波
- 生成多个CSV文件
- `channel_data_mapped_.csv`: 通道映射后的数据
- `channel_data_processed_.csv`: 滤波处理后的数据
## 输出文件说明
### **new_parser_output.csv**
- 新解析函数的原始输出
- 包含所有解析出的数据对象
- 用于验证解析功能
### **channel_data_mapped_.csv**
- 通道映射后的数据
- 数据已经过通道重新分配
- 为滤波处理做准备
### **channel_data_processed_.csv**
- 通道级滤波处理后的数据
- 每个通道的数据已经过完整的滤波处理
- 数据质量显著提升
## 技术优势
1. **滤波质量提升**: 滤波器获得完整的时间序列信息
2. **数据连续性**: 避免数据包边界处的伪影
3. **计算效率**: 批量处理,减少重复计算
4. **逻辑清晰**: 数据流更加直观和易于理解
5. **错误处理**: 完善的异常处理和用户提示
## 注意事项
1. **确保信号处理器已更新**: 需要包含新的 `process_channel_based_filtering` 方法
2. **数据类型支持**: 确保所有设备类型都有对应的滤波策略
3. **内存使用**: 通道级滤波会占用更多内存(存储完整通道数据)
4. **性能考虑**: 对于超长数据,可能需要分批处理