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

File: <base>/sources/mhaghpanahi_at_gmail.com/dualSample.m (707 bytes)
function [xd,dind] = dualSample(x,peaks,phase)

lind = find(peaks,2,'last'); % the indeces of the last two peaks

xx = x(1:lind(1));
I = indFinder(xx,peaks);
k = I(:,1) + floor((phase(1:lind(1))+2*pi*(phase(1:lind(1))<=0))'.*(I(:,2)-I(:,1))./(2*pi));

dind = [1:lind(1)]' + k;
xd = x(dind);
end

function I = indFinder(x,peaks)

% This function finds the indeces of the next two R-peak values
% stored in the "peaks" vector.
% x: input vector 
% peaks: the vector indicating the location of R peaks.
% I: output matrix. i'th row of I contains the indeces of the next two peaks
% from x(i)

n = length(x);
I = zeros(n,2);

for i=1:n
    I(i,:) = find(peaks(i:end),2) - 1;
end

end