3.7 KiB
3.7 KiB
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
- 通道级滤波处理后的数据
- 每个通道的数据已经过完整的滤波处理
- 数据质量显著提升
技术优势
- 滤波质量提升: 滤波器获得完整的时间序列信息
- 数据连续性: 避免数据包边界处的伪影
- 计算效率: 批量处理,减少重复计算
- 逻辑清晰: 数据流更加直观和易于理解
- 错误处理: 完善的异常处理和用户提示
注意事项
- 确保信号处理器已更新: 需要包含新的
process_channel_based_filtering方法 - 数据类型支持: 确保所有设备类型都有对应的滤波策略
- 内存使用: 通道级滤波会占用更多内存(存储完整通道数据)
- 性能考虑: 对于超长数据,可能需要分批处理