MATLAB生成一段心电信号并检测P波示例代码
时间: 2023-08-21 15:04:23 浏览: 108
用Matlab实现的心电信号的处理源程序
好的,以下是MATLAB生成一段心电信号并检测P波的示例代码:
```matlab
% 生成时间轴
fs = 1000;
t = 0:1/fs:1;
% 生成心电信号
ecg = 0.7*sin(2*pi*60*t) + sin(2*pi*120*t) + 0.3*sin(2*pi*240*t);
% 滤波
[b,a] = butter(2, [5 15]/(fs/2), 'bandpass');
ecg_filt = filtfilt(b, a, ecg);
% 检测P波
[pks_P,locs_P] = findpeaks(ecg_filt, 'MinPeakHeight', 0.15, 'MinPeakDistance', 0.3*fs, 'MinPeakProminence', 0.1);
% 绘图
figure;
subplot(2,1,1);
plot(t,ecg);
xlabel('Time (s)');
ylabel('Amplitude');
title('Original ECG Signal');
subplot(2,1,2);
plot(t,ecg_filt,'b', t(locs_P), ecg_filt(locs_P), 'ro');
xlabel('Time (s)');
ylabel('Amplitude');
title('Filtered ECG Signal with P Waves');
legend('Filtered ECG','P Waves');
```
这段代码与检测R波的示例代码非常相似,但有一些不同之处。首先,我们将`MinPeakHeight`参数降低到0.15,以便检测到更小的P波。其次,我们将`MinPeakDistance`参数增加到0.3秒,以避免在P波和T波之间误检测Q波或S波。最后,我们引入了一个新的参数`MinPeakProminence`,以进一步排除噪声或其他不相关的峰。这个参数的值越高,要求检测到的峰值必须越明显。在这个示例中,我们将其设置为0.1。
在绘制图形时,原始信号和过滤后的信号分别在上下两个子图中显示,并在过滤后的信号中用红色圆圈标记检测到的P波位置。
希望这可以帮助您生成一段心电信号并检测P波。
阅读全文