2025-07-28 11:56:50 +08:00
|
|
|
#include "headfile.h"
|
2025-08-14 11:16:24 +08:00
|
|
|
std::vector<float> heart_rate;
|
2025-07-28 11:56:50 +08:00
|
|
|
// 辅助函数:打印多通道数据
|
|
|
|
|
void print_multi_channel(const std::vector<std::vector<float>>& channels) {
|
|
|
|
|
for (size_t ch = 0; ch < channels.size(); ++ch) {
|
|
|
|
|
std::cout << " Channel " << ch << ": ";
|
|
|
|
|
for (size_t i = 0; i < channels[ch].size(); ++i) {
|
|
|
|
|
std::cout << std::fixed << std::setprecision(2) << channels[ch][i] << " ";
|
|
|
|
|
}
|
|
|
|
|
std::cout << std::endl;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 辅助函数:打印通道数据
|
|
|
|
|
void print_channel_data(const std::variant<std::vector<float>, std::vector<std::vector<float>>>& channel_data) {
|
|
|
|
|
if (std::holds_alternative<std::vector<float>>(channel_data)) {
|
|
|
|
|
const auto& single_channel = std::get<std::vector<float>>(channel_data);
|
|
|
|
|
} else if (std::holds_alternative<std::vector<std::vector<float>>>(channel_data)) {
|
|
|
|
|
const auto& multi_channel = std::get<std::vector<std::vector<float>>>(channel_data);
|
|
|
|
|
print_multi_channel(multi_channel);
|
|
|
|
|
}
|
|
|
|
|
}
|
2025-08-14 11:16:24 +08:00
|
|
|
|
|
|
|
|
void test_mit_bih() {
|
|
|
|
|
try {
|
|
|
|
|
// 读取MIT-BIH数据文件
|
|
|
|
|
std::vector<uint8_t> file_content = FileManager::readBinaryFile("C:/Users/29096/Desktop/work/mit-bih-arrhythmia-database-1.0.0/222.dat");
|
|
|
|
|
|
|
|
|
|
// 解析数据
|
|
|
|
|
std::vector<SensorData> all_data = parse_device_data(file_content);
|
|
|
|
|
|
|
|
|
|
// 保存结果
|
|
|
|
|
save_to_csv(all_data, "mit_bih_output.csv");
|
|
|
|
|
|
|
|
|
|
std::cout << "MIT-BIH数据处理完成" << std::endl;
|
|
|
|
|
std::cout << "Press Enter to exit..." << std::endl;
|
|
|
|
|
std::cin.get();
|
|
|
|
|
} catch (const std::exception& e) {
|
|
|
|
|
std::cerr << "处理错误: " << e.what() << std::endl;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2025-07-28 11:56:50 +08:00
|
|
|
void test_try() {
|
|
|
|
|
try {
|
2025-08-14 11:16:24 +08:00
|
|
|
// 1. 读取原始二进制文件
|
2025-07-29 15:21:28 +08:00
|
|
|
std::vector<uint8_t> file_content = FileManager::readBinaryFile("C:/Users/29096/Documents/WeChat Files/wxid_sh93l5lycr8b22/FileStorage/File/2025-07/ecg_data_raw.dat");
|
2025-07-28 11:56:50 +08:00
|
|
|
Mapper mapper;
|
2025-08-14 11:16:24 +08:00
|
|
|
SignalProcessor processor;
|
|
|
|
|
MetricsCalculator calculator;
|
2025-07-28 11:56:50 +08:00
|
|
|
// 2. 解析设备数据包 - 需要实现此函数
|
|
|
|
|
std::vector<SensorData> all_data = parse_device_data(file_content);
|
2025-08-14 11:16:24 +08:00
|
|
|
std::cout<<"1"<<std::endl;
|
|
|
|
|
for(auto& mapped_data:all_data)
|
|
|
|
|
{
|
|
|
|
|
mapped_data = mapper.DataMapper(mapped_data);//通道映射
|
|
|
|
|
}
|
|
|
|
|
save_to_csv(all_data, "channel_data_mapped_.csv");
|
|
|
|
|
for(auto& processed_data:all_data)
|
|
|
|
|
{
|
|
|
|
|
processed_data = processor.preprocess_signals(processed_data); //十二导联心电
|
|
|
|
|
}
|
|
|
|
|
for(auto& calculated_data:all_data)
|
|
|
|
|
{
|
|
|
|
|
heart_rate.push_back(calculator.calculate_heart_rate_ecg(calculated_data,250)); //十二导联心电
|
|
|
|
|
}
|
|
|
|
|
for(uint16_t i;i<heart_rate.size();i++) std::cout<<heart_rate[i]<<std::endl;
|
|
|
|
|
save_to_csv(all_data, "channel_data_processed_.csv");
|
2025-07-28 11:56:50 +08:00
|
|
|
|
|
|
|
|
}catch (const std::exception& e) {
|
|
|
|
|
std::cerr << "解析错误: " << e.what() << std::endl;
|
|
|
|
|
std::cout << "Press Enter to exit..." << std::endl;
|
|
|
|
|
std::cin.get();
|
|
|
|
|
return ;
|
|
|
|
|
}
|
|
|
|
|
std::cout << "Press Enter to exit..." << std::endl;
|
|
|
|
|
std::cin.get();
|
|
|
|
|
}
|
|
|
|
|
int main() {
|
|
|
|
|
SetConsoleOutputCP(CP_UTF8);
|
2025-08-14 11:16:24 +08:00
|
|
|
test_try(); // 测试MIT-BIH数据处理
|
2025-07-28 11:56:50 +08:00
|
|
|
return 0;
|
2025-08-14 11:16:24 +08:00
|
|
|
}
|