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

File: <base>/sources/mhaghpanahi_at_gmail.com/CheckSign.m (1,033 bytes)
function [y1,y2,y3]=CheckSign(F,blocksize)

% randomly selects intevals of F and check the sign of the peak value.
% final decision on the sign is made based on the majority of the sign of
% the peaks.

% F is assumed to be a row vecor. If F is a matrix, the process is done
% independently on each row. 
margin=0; % if sum(factor)<=margin, then the signal is too noisy to be trustworthy.
[nleads,nsamples]=size(F);
nblocks=nsamples/blocksize;
s=zeros(1,nleads);
strength=zeros(1,nleads);
intmax=zeros(nleads,nblocks);
% interval=1:nblocks;
for j=1:nleads
%     interval=randi(nblocks,1,floor(nblocks/3));
    factor=zeros(1,nblocks);
    for i=1:nblocks
        [absmax ind]=max(abs(F(j,(i-1)*blocksize+1:i*blocksize)));
        factor(i)=sign(F(j,ind+(i-1)*blocksize));
        intmax(j,i)=absmax;
    end
    strength(j)=sum(factor);
    if abs(strength(j))> margin
        s(j)=sign(strength(j));
    end
end

y1=s;
if nargout>1
    y2=strength;
end
if nargout==3
    y3=intmax;
end