Noninvasive Fetal ECG: The PhysioNet/Computing in Cardiology Challenge 2013 1.0.0

File: <base>/sources/mhaghpanahi_at_gmail.com/MECGPeakDetect.m (1,017 bytes)
function [Y,accY,peaks,goodint] = MECGPeakDetect(Y,blocksize,msample,fs)

[nrow,ncol]=size(Y);

if nrow>ncol % make sure Y is a row matrix
    Y=Y';
    temp=nrow;
    nrow=ncol;
    ncol=temp;
end

nblocks=ncol/blocksize;

[factor,strength,intmax]=CheckSign(Y,blocksize);

%check for anomalies:
intmed=median(intmax')';
goodint=sum(intmax>4*intmed*ones(1,nblocks))==0;

anomCheck=intmax>4*intmed*ones(1,nblocks);

for i=1:nrow
    anomind=find(anomCheck(i,:));
    if ~isempty(anomind)
        anomnum=length(anomind);
        for k=1:anomnum
            ff=find(abs(Y(i,(anomind(k)-1)*blocksize+1:anomind(k)*blocksize))>2*intmed(i));
            Y(i,(anomind(k)-1)*blocksize+ff)=0;
        end
    end
end

if(sum(abs(strength)>25)<2)
    [factor,strength]=CheckSign(Y,blocksize);
end

[sm,si]=sort(abs(strength));
acc_set=si(end-1:end);

accY=(factor(acc_set).*intmed(acc_set)'/sum(intmed(acc_set)))*Y(acc_set,:);
peaks = PeakDetection3(accY,fs,msample,.2,3,goodint);

end