medical_SDK/log/MAIN_CPP_MODIFICATIONS.md

126 lines
3.7 KiB
Markdown
Raw Permalink Normal View History

2025-08-25 10:53:22 +08:00
# 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. **性能考虑**: 对于超长数据,可能需要分批处理