一、理论基础
近似系数
可以帮助突出心率的基本模式和趋势,而忽略短期波动如QRS复合波等
反映信号的低频部分
在分析心率变异性、长期节律变化或进行信号去噪和压缩时特别有用
细节系数
QRS复合波、T波和P波等,都在高频部分。细节系数允许我们精确地定位这些特征的位置,分析它们的形状和持续时间,这对于自动诊断心律不齐、心肌梗死等心脏病状非常有帮助
反映信号的高频部分
每一级的细节系数都可以提供不同尺度上的信息,有助于揭示信号中的复杂模式和变化
选择的小波基函数db4(Daubechies小波家族中的第四个成员)
Daubechies小波是一种常用的小波基,非常适合于处理具有尖锐特征的信号,如心电图(ECG)信号,因为它们可以很好地捕捉这些信号中的突变点和边缘信息。
随着序号的增加,小波函数变得更加平滑和复杂。
db4提供了一种平衡,既能够有效地捕捉信号中的细节,又保持了较好的平滑性,被广泛用于各种信号处理应用中,包括心电图分析。
二、程序
% 步骤 1: 读取心电信号
filename = 'E:\《医学数字信号处理实验教程-基于MATLAB》-资料包-20200621(1)\ecg_signal.txt';
ecg_signal = load(filename);
% 步骤 2: 执行小波变换
% 选择小波基和分解的级数
waveletFunction = 'db4'; % 使用Daubechies小波
level = 5; % 分解级数
[C, L] = wavedec(ecg_signal, level, waveletFunction);
% 从小波分解的结果中提取近似系数和细节系数
approx = appcoef(C, L, waveletFunction);
for i = 1:level
detail{i} = detcoef(C, L, i);
end
% 步骤 3: 可视化结果
% 可视化近似系数
figure;
subplot(level+1, 1, 1);
plot(approx);
title('Approximation Coefficients');
% 可视化每级的细节系数
for i = 1:level
subplot(level+1, 1, i+1);
plot(detail{i});
title(['Detail Coefficients Level ', num2str(i)]);
end
去除基线漂移
% 步骤 1: 读取心电信号
filename ='E:\《医学数字信号处理实验教程-基于MATLAB》-资料包-20200621(1)\ecg_signal.txt';
ecg_signal = load(filename);
% 确保ecg_signal是一个列向量
if size(ecg_signal, 2) > size(ecg_signal, 1)
ecg_signal = ecg_signal';
end
% 步骤 2: 执行小波变换并去除基线漂移
% 选择小波基和分解的级数
waveletFunction = 'db4'; % 使用Daubechies小波
level = 5; % 分解级数
[C, L] = wavedec(ecg_signal, level, waveletFunction);
% 去除基线漂移:将最低频率的近似系数设置为0
C(1:L(1)) = zeros(1, L(1)); % 假设基线漂移主要在最低频率的近似系数中
% 使用修改后的系数重构信号
ecg_denoised = waverec(C, L, waveletFunction);
% 步骤 3: 可视化原始信号和处理后的信号
figure;
subplot(2, 1, 1);
plot(ecg_signal);
title('原始ECG信号');
xlabel('Sample');
ylabel('Amplitude');
subplot(2, 1, 2);
plot(ecg_denoised);
title('去除基线漂移后的ECG信号');
xlabel('Sample');
ylabel('Amplitude');
% 步骤 1: 读取心电信号 filename = 'E:\《医学数字信号处理实验教程-基于MATLAB》-资料包-20200621(1)\ecg_signal.txt'; ecg_signal = load(filename); % 步骤 2: 执行小波变换并去除基线漂移 waveletFunction = 'db4'; % 使用Daubechies小波 level = 5; % 分解级数 [C, L] = wavedec(ecg_signal, level, waveletFunction); % 步骤 3: 显示小波分解结果 % 获取并显示近似系数 approx = appcoef(C, L, waveletFunction, level); figure; subplot(level+2, 1, 1); % 加1为原信号,加1为近似系数 plot(approx); title('近似系数 Level 5'); % 获取并显示每级的细节系数 for i = 1:level details = detcoef(C, L, i); subplot(level+2, 1, i+1); plot(details); title(['细节系数 Level ', num2str(i)]); end % 显示原始信号和处理后的信号 % 由于基线漂移的去除,我们需要重建信号但排除最低级别的近似系数 C(1:L(1)) = zeros(1, L(1)); % 移除基线漂移 ecg_denoised = waverec(C, L, waveletFunction); subplot(level+2, 1, level+2); plot(ecg_signal); hold on; plot(ecg_denoised, 'r'); legend('原始', '去基线漂移'); title('原始和去除基线漂移后的ECG信号'); xlabel('Sample'); ylabel('Amplitude');
三、心电信号的特征值:
- P波
描述:代表心房的去极化(激活)。
临床意义:P波的形状、持续时间和幅度可以揭示心房相关的问题,如心房颤动、心房扑动或心房肥大。
2. QRS复合波
描述:代表心室的快速去极化。
临床意义:QRS复合波的宽度、形状和幅度对于识别心室肥大、束支传导阻滞或心肌梗死等情况非常重要。
3. T波
描述:代表心室的复极化。
临床意义:T波的倒置、增高或降低可以是缺血、电解质失衡或其他心脏病状的指标。
4. U波
描述:在某些情况下,在T波之后可以观察到一个小波,被称为U波,其起源仍然有些不确定。
临床意义:U波的显著性可能与电解质失衡、药物影响或心脏病变相关。
5. PR间期
描述:从P波起始到QRS复合波起始的时间间隔。
临床意义:PR间期的延长可能表明房室传导延迟,这是一种名为一度房室传导阻滞的病状。
6. QT间期
描述:从QRS复合波起始到T波结束的时间间隔。
临床意义:QT间期的延长或缩短可以是一些药物的副作用,也可能表明心脏病变,如长QT综合症。
7. ST段
描述:从QRS复合波结束到T波开始的部分。
临床意义:ST段的抬高或下降是心肌缺血或心肌梗死的重要指标。
8. 心率
描述:每分钟的心跳次数。
临床意义:心率过快(心动过速)或过慢(心动过缓)都可能指示心脏功能异常。
9. R-R间期
描述:连续两个R波的峰值之间的时间间隔。
临床意义:R-R间期的变异性(HRV,心率变异性)是心脏健康状况和自主神经系统功能的一个重要指标。
四、疾病对应:
1. P波异常
心房颤动:P波消失,被快速且不规则的波动替代。
心房扑动:出现规则的“锯齿形”P波。
心房肥大:P波幅度增高(右心房肥大)或P波宽度增加(左心房肥大)。
2. QRS复合波异常
心室肥大:QRS复合波幅度增加。
束支传导阻滞:QRS复合波宽度增宽(>0.12秒)。
心肌梗死:出现病理性Q波(宽度>0.04秒,深度>1/4R波)。
3. T波异常
心肌缺血:T波倒置或变平。
急性心肌梗死:T波高耸。
电解质失衡(如高钾血症):T波高耸。
4. QT间期异常
长QT综合症:QT间期延长,增加心脏停搏的风险。
短QT综合症:QT间期缩短,也可能导致心律失常。
5. ST段异常
心肌缺血:ST段下降。
急性心肌梗死:ST段抬高。
心包膜炎:ST段在所有导联中均匀抬高。
6. PR间期异常
一度房室传导阻滞:PR间期延长(>0.20秒)。
二度房室传导阻滞:PR间期逐渐延长直到一个QRS复合波掉落。
7. 心率异常
心动过速:心率异常增快(>100次/分钟),可能因焦虑、发热、心脏疾病等。
心动过缓:心率异常减慢(<60次/分钟),可能见于训练有素的运动员或者某些心脏病状如窦性心动过缓。
8. 心率变异性(HRV)异常
自主神经系统功能异常:HRV降低可能反映自主神经系统平衡失调,与多种疾病如糖尿病、抑郁症、心血管疾病等相关。