MATLAB生成一段心电信号并检测R波示例代码
时间: 2023-08-21 18:04:23 浏览: 54
好的,以下是MATLAB生成一段心电信号并检测R波的示例代码:
```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);
% 检测R波
[~,locs_R] = findpeaks(ecg_filt, 'MinPeakHeight', 0.5, 'MinPeakDistance', 0.2*fs);
% 绘图
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_R), ecg_filt(locs_R), 'ro');
xlabel('Time (s)');
ylabel('Amplitude');
title('Filtered ECG Signal with R Peaks');
legend('Filtered ECG','R Peaks');
```
这段代码首先生成一个时间向量`t`和一个包含三个正弦波的心电信号`ecg`,然后使用二阶巴特沃斯带通滤波器滤波`ecg`信号,以去除高频和低频噪声。最后,使用MATLAB内置的`findpeaks`函数检测`ecg_filt`信号中的R波。在绘制图形时,原始信号和过滤后的信号分别在上下两个子图中显示,并在过滤后的信号中用红色圆圈标记检测到的R波位置。
希望这可以帮助您生成一段心电信号并检测R波。