medical_SDK/log/MAIN_CPP_MODIFICATIONS.md

3.7 KiB
Raw Blame History

Main.cpp 修改说明

主要修改内容

1. 新增辅助函数

  • get_data_type_name(): 将DataType枚举转换为友好的中文名称
  • test_new_parser(): 测试新解析函数的专用函数

2. 重构 test_try() 函数

原来的错误逻辑(已修复):

// ❌ 错误:对单个数据包进行滤波
for(auto& processed_data : all_data) {
    processed_data = processor.preprocess_signals(processed_data);  // 对单个包滤波
}

新的正确逻辑:

// ✅ 正确:使用通道级滤波方法
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. 智能生理指标计算

// 根据数据类型选择合适的计算方法
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. 性能考虑: 对于超长数据,可能需要分批处理