用ecgpuwave算法对CSE数据进行ecg波形测量时发现P波不能有效定位,一开始以为是ecg没有转换成uV为单位(转换成uV后确实会提检测出一部分p波),后面仔细看了p波边界计算pbound.m源码,发现源码中有bug,P波检测中首先利用算法检测出了P波未知Pp,和P波边界P1和P2,但是最后还做了噪声判定,如果P波的幅度低于噪声的1.5倍,则认为P波无效,但是算法在做噪声计算用的是滤波前的X,而计算P波幅度是用的滤波且归一化后的Xpb,所以这里是错误的,改成如下即可:
Xaux=Xpb(ibw:iew);%Xaux=X(ibw:iew);
ruido=noiselevel(Xaux);
if abs(Xpb(Pp)-Xpb(P2))<=(1.5*ruido)
Pex=0; P1=[]; Pp=[]; P2=[]; type=2;
end
而对于fortran语言则把punts.f中改成如下即可:
call busca_soroll(ibw,iew,ecgpb,soroll)
其实这个算法大致还是成熟的,但有一些小bug