187 lines
6.1 KiB
Markdown
187 lines
6.1 KiB
Markdown
|
|
# 通道映射函数逻辑更新说明
|
|||
|
|
|
|||
|
|
## 📊 更新概述
|
|||
|
|
|
|||
|
|
根据您提供的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. 代码实现细节
|
|||
|
|
|
|||
|
|
```cpp
|
|||
|
|
// 通道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个通道
|
|||
|
|
- 所有通道必须具有相同的采样点数
|
|||
|
|
- 确保输入通道数据不为空
|
|||
|
|
|
|||
|
|
## 🚀 使用方法
|
|||
|
|
|
|||
|
|
更新后的通道映射函数会自动:
|
|||
|
|
|
|||
|
|
1. 验证输入数据的完整性(至少9个通道)
|
|||
|
|
2. 执行正确的导联计算
|
|||
|
|
3. 生成完整的12导联ECG数据
|
|||
|
|
4. 提供详细的错误信息
|
|||
|
|
|
|||
|
|
## 📝 注意事项
|
|||
|
|
|
|||
|
|
1. **数据要求**: 输入数据至少需要9个通道
|
|||
|
|
2. **采样率**: 所有通道必须具有相同的采样点数
|
|||
|
|
3. **数据质量**: 确保输入通道数据不为空
|
|||
|
|
4. **计算精度**: 使用浮点数进行导联计算,保持精度
|
|||
|
|
5. **参考点**: RA作为参考点设为0,简化计算
|
|||
|
|
|
|||
|
|
## 🔄 后续优化建议
|
|||
|
|
|
|||
|
|
1. **添加导联质量评估**
|
|||
|
|
2. **支持不同的电极配置方案**
|
|||
|
|
3. **添加实时导联计算优化**
|
|||
|
|
4. **实现动态Wilson中心端子计算**
|
|||
|
|
|
|||
|
|
## 📞 技术支持
|
|||
|
|
|
|||
|
|
如果您需要进一步调整通道映射逻辑或有其他问题,请提供:
|
|||
|
|
1. 完整的硬件连接图
|
|||
|
|
2. 特定的导联计算需求
|
|||
|
|
3. 性能优化要求
|