6.1 KiB
6.1 KiB
通道映射函数逻辑更新说明
📊 更新概述
根据您提供的12导联ECG电极放置图片和详细描述,我已经更新了 ECG_12LEAD_Data_Mapper 函数的通道映射逻辑,实现了完整的12导联ECG通道映射。
🔧 修改前的错误逻辑
原有代码的问题:
- 错误地假设原始数据通道0、1、2分别对应RA、LA、LL电极
- 直接在输出通道0、1、2上计算Lead I、II、III
- 没有正确理解硬件连接和导联计算的关系
- 加压肢体导联计算方式不正确
✅ 修改后的正确逻辑
1. 通道映射关系
根据您的详细描述:
| 原始数据通道 | 映射后通道 | 导联类型 | 计算公式 | 说明 |
|---|---|---|---|---|
| 通道0 | 通道0 | V1 | 直接复制 | V1电极信号 |
| 通道2 | 通道1 | Lead I | 直接复制 | LA-RA (左臂-右臂) |
| 通道3 | 通道2 | Lead II | 直接复制 | LL-RA (左腿-右臂) |
| - | 通道3 | Lead III | 通道2-通道1 | LL-LA (左腿-左臂) |
| 通道4 | 通道4 | V2 | 直接复制 | V2胸导联 |
| 通道5 | 通道5 | V3 | 直接复制 | V3胸导联 |
| 通道6 | 通道6 | V4 | 直接复制 | V4胸导联 |
| 通道7 | 通道7 | V5 | 直接复制 | V5胸导联 |
| 通道8 | 通道8 | V6 | 直接复制 | V6胸导联 |
2. 导联计算原理
标准肢体导联:
- Lead I = LA - RA (左臂电位 - 右臂电位)
- Lead II = LL - RA (左腿电位 - 右臂电位)
- Lead III = LL - LA (左腿电位 - 左臂电位)
数学关系验证:
Lead III = LL - LA
= (LL - RA) - (LA - RA)
= Lead II - Lead I
加压肢体导联:
- aVR = 3/2 × (RA - Vw) = -1/2 × (Lead I + Lead II) [简化计算]
- aVL = 3/2 × (LA - Vw)
- aVF = 3/2 × (LL - Vw)
Wilson中心端子:
- Vw = 1/3 × (RA + LA + LL)
3. 代码实现细节
// 通道0: V1电极信号 (直接复制)
output_channels[0] = input_channels[0];
// 通道1: Lead I = LA - RA (直接复制)
output_channels[1] = input_channels[2];
// 通道2: Lead II = LL - RA (直接复制)
output_channels[2] = input_channels[3];
// 通道3: Lead III = LL - LA = Lead II - Lead I
for (size_t sample = 0; sample < num_samples; ++sample) {
output_channels[3][sample] = output_channels[2][sample] - output_channels[1][sample];
}
// 胸导联 V2-V6 (直接复制)
output_channels[4] = input_channels[4]; // V2
output_channels[5] = input_channels[5]; // V3
output_channels[6] = input_channels[6]; // V4
output_channels[7] = input_channels[7]; // V5
output_channels[8] = input_channels[8]; // V6
// 加压肢体导联计算
for (size_t sample = 0; sample < num_samples; ++sample) {
float lead_I = output_channels[1][sample]; // Lead I = LA - RA
float lead_II = output_channels[2][sample]; // Lead II = LL - RA
// 简化计算aVR
output_channels[9][sample] = -0.5f * (lead_I + lead_II); // aVR
// 设RA为参考点(0),计算LA和LL相对于RA的电位
float LA = lead_I; // LA = Lead I (因为RA=0)
float LL = lead_II; // LL = Lead II (因为RA=0)
float RA = 0.0f; // RA作为参考点设为0
// 计算Wilson中心端子
float Vw = (RA + LA + LL) / 3.0f;
// 计算aVL和aVF
output_channels[10][sample] = 1.5f * (LA - Vw); // aVL
output_channels[11][sample] = 1.5f * (LL - Vw); // aVF
}
🎯 硬件连接分析
根据您提供的电路图,ADS1298IPAGR的输入通道连接:
- ADC Channel 1: V1 - LA (测量V1相对于LA的电位)
- ADC Channel 2: RA - LL (测量RA相对于LL的电位)
- ADC Channel 3: V2 - V3 (测量V2相对于V3的电位)
- ADC Channel 4: V4 - V5 (测量V4相对于V5的电位)
- ADC Channel 5: V6 - V6 (单端测量V6)
- ADC Channel 6: V5 - V4 (测量V5相对于V4的电位)
- ADC Channel 7: V3 - V2 (测量V3相对于V2的电位)
- ADC Channel 8: LL - RA (测量LL相对于RA的电位)
📋 输出通道结构
修改后的12导联输出结构:
| 输出通道 | 导联类型 | 数据来源 | 状态 |
|---|---|---|---|
| 通道0 | V1 | 原始通道0 | ✅ 已实现 |
| 通道1 | Lead I | 原始通道2 | ✅ 已实现 |
| 通道2 | Lead II | 原始通道3 | ✅ 已实现 |
| 通道3 | Lead III | 计算得出 | ✅ 已实现 |
| 通道4 | V2 | 原始通道4 | ✅ 已实现 |
| 通道5 | V3 | 原始通道5 | ✅ 已实现 |
| 通道6 | V4 | 原始通道6 | ✅ 已实现 |
| 通道7 | V5 | 原始通道7 | ✅ 已实现 |
| 通道8 | V6 | 原始通道8 | ✅ 已实现 |
| 通道9 | aVR | 计算得出 | ✅ 已实现 |
| 通道10 | aVL | 计算得出 | ✅ 已实现 |
| 通道11 | aVF | 计算得出 | ✅ 已实现 |
🔍 关键优化点
1. aVR的简化计算
根据数学推导,aVR可以简化为:
aVR = 3/2 × (RA - Vw)
= 3/2 × (RA - (RA + LA + LL)/3)
= 3/2 × (2RA - LA - LL)/3
= (2RA - LA - LL)/2
= -1/2 × (LA - RA + LL - RA)
= -1/2 × (Lead I + Lead II)
2. 参考点设置
为了简化计算,将RA设置为参考点(0):
- LA = Lead I (因为RA=0)
- LL = Lead II (因为RA=0)
- RA = 0
3. 数据要求
- 输入数据至少需要9个通道
- 所有通道必须具有相同的采样点数
- 确保输入通道数据不为空
🚀 使用方法
更新后的通道映射函数会自动:
- 验证输入数据的完整性(至少9个通道)
- 执行正确的导联计算
- 生成完整的12导联ECG数据
- 提供详细的错误信息
📝 注意事项
- 数据要求: 输入数据至少需要9个通道
- 采样率: 所有通道必须具有相同的采样点数
- 数据质量: 确保输入通道数据不为空
- 计算精度: 使用浮点数进行导联计算,保持精度
- 参考点: RA作为参考点设为0,简化计算
🔄 后续优化建议
- 添加导联质量评估
- 支持不同的电极配置方案
- 添加实时导联计算优化
- 实现动态Wilson中心端子计算
📞 技术支持
如果您需要进一步调整通道映射逻辑或有其他问题,请提供:
- 完整的硬件连接图
- 特定的导联计算需求
- 性能优化要求