MATLAB实现心电信号R波峰值检测算法
时间: 2023-08-06 07:09:03 浏览: 142
心电信号R波峰值检测算法
3星 · 编辑精心推荐
以下是MATLAB实现心电信号R波峰值检测算法的示例代码:
```matlab
% 读取心电信号
load('ecgsignal.mat');
ecgsignal = ecgsignal - mean(ecgsignal); % 去除直流偏移
% 滤波
fs = 1000; % 采样率
fc = 40; % 截止频率
[b, a] = butter(2, fc / (fs / 2), 'high');
ecgsignal = filter(b, a, ecgsignal);
% 求导
ecgsignal_diff = diff(ecgsignal);
% 平方运算
ecgsignal_square = ecgsignal_diff .^ 2;
% 移动平均滤波
window_size = 150; % 窗口大小
ecgsignal_smooth = conv(ecgsignal_square, ones(window_size, 1) / window_size, 'same');
% 峰值检测
threshold = 0.6 * max(ecgsignal_smooth); % 峰值检测阈值
[pks, locs] = findpeaks(ecgsignal_smooth, 'MinPeakHeight', threshold);
% 绘制结果
figure;
plot(ecgsignal);
hold on;
plot(locs, ecgsignal(locs), 'ro');
xlabel('Sample');
ylabel('Amplitude');
title('R Wave Detection');
```
以上代码中,我们首先读取心电信号,并对其进行高通滤波。然后,对滤波后的信号进行求导、平方运算和移动平均滤波处理,得到平滑后的信号。最后,通过设置峰值检测阈值,找到满足条件的峰值点,即为R波峰值点。我们将检测结果可视化,以便观察检测效果。
阅读全文