# 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 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. **性能考虑**: 对于超长数据,可能需要分批处理