R波定位算法的matlab代码
时间: 2023-09-24 11:13:03 浏览: 110
R波检测,r波检测算法,matlab
5星 · 资源好评率100%
以下是一个基于Pan-Tompkins算法的R波定位的Matlab代码示例:
```matlab
function [r_peaks, qrs_amp] = ecg_pan_tompkins(signal, fs)
% 参数设置
N = length(signal);
M = 4;
Wn = [5 15]/(fs/2);
[b,a] = butter(M,Wn);
% 滤波
signal = filtfilt(b,a,signal);
% 寻找QRS波群
diff_signal = diff(signal);
squared_signal = diff_signal.^2;
ma_signal = movmean(squared_signal, round(0.150*fs)); % 移动平均
ma_signal = ma_signal / max(ma_signal); % 归一化
thres1 = 0.3;
thres2 = 0.5;
[~,locs] = findpeaks(ma_signal,'MinPeakHeight',thres1,'MinPeakDistance',round(0.200*fs));
R_locs = zeros(length(locs),1);
qrs_amp = zeros(length(locs),1);
% 寻找R波峰值
for i = 1:length(locs)
[~,R_locs(i)] = max(signal(locs(i):min(locs(i)+round(0.200*fs),N)));
R_locs(i) = R_locs(i) + locs(i) - 1;
qrs_amp(i) = signal(R_locs(i));
end
% 去除误检QRS波群
RR = diff(R_locs)/fs;
mean_RR = mean(RR);
std_RR = std(RR);
if std_RR > 0.1*mean_RR
k = 1;
while k < length(R_locs)
if (abs(R_locs(k+1)-R_locs(k)-mean_RR) > 0.2*mean_RR) || (abs(R_locs(k+1)-R_locs(k)-mean_RR) < 0.05*mean_RR)
R_locs(k+1) = [];
qrs_amp(k+1) = [];
else
k = k + 1;
end
end
end
r_peaks = R_locs;
end
```
该算法主要流程如下:
1. 采用带通滤波器滤波,去除低频和高频干扰。
2. 对信号进行差分并平方,然后对平方信号进行移动平均,以寻找QRS波群。
3. 寻找每个QRS波群中的R波峰值,并计算QRS波群的振幅。
4. 去除误检QRS波群,即排除RR间期与平均RR间期相差过大或过小的QRS波群。
这个算法比较简单,但是在一些情况下可能会出现误检或漏检。需要根据具体情况进行调整或结合其他算法使用。
阅读全文