coning_minor_v000

%data   :3*length increment type equally spaced sensor output.
%alg    :Type of the coning algorithm to be used   
function [inc corr]=coning_minor(data, alg)
inlen=size(data,2);
switch (alg)
    case(0)
        %ignagni(1990):Algorithm A (no correction - constant approximation)     
        inc=data;
        corr=zeros(size(data));
    case(1)
        %ignagni(1990):Algorithm D (quadratic approximation to 3 points)    
        outlen=floor((inlen-3)/3)+1;
        inc=zeros(3,outlen);
        corr=zeros(3,outlen);
        
        ind=1;
        for i=3:3:inlen
            inc(:,ind)=sum(data(:,i-2:i),2);
            corr(:,ind)=(33/80)*cross(data(:,i-2), data(:,i))+(57/80)*cross(data(:,i-1),data(:,i)-data(:,i-2));
            ind=ind+1;
        end
    case(2)
        %ignagni(1990):Algorithm E
        outlen=floor((inlen-3)/3)+1;
        inc=zeros(3,outlen);
        corr=zeros(3,outlen);
        
        ind=1;
        for i=3:3:inlen
            inc(:,ind)=sum(data(:,i-2:i),2);
            corr(:,ind)=(9/20)*cross(data(:,i-2), data(:,i))+(27/40)*cross(data(:,i-1),data(:,i)-data(:,i-2));
            ind=ind+1;
        end
    case(3)
        %ignagni(1996):Algorithm 1
        outlen=floor((inlen-4)/2)+1;
        inc=zeros(3,outlen);
        corr=zeros(3,outlen);
        
        ind=1;
        for i=4:2:inlen
            vr_a=sum(data(:,i-1:i),2);
            vr_b=sum(data(:,i-3:i-2),2);
            inc(:,ind)=var_a;
            corr(:,ind)=(32/45)*cross(data(:,i-1), data(:,i))+(-1/180)*cross(vr_b,vr_a);
            ind=ind+1;
        end
    case(4)
        %ignagni(1996):Algorithm 2
        outlen=floor((inlen-3)/2)+1;
        inc=zeros(3,outlen);
        corr=zeros(3,outlen);

        ind=1;
        for i=3:2:inlen
            inc(:,ind)=sum(data(:,i-1:i),2);
            corr(:,ind)=cross(((-1/30)*data(:,i-2)+(11/15)*data(:,i-1)), data(:,i));
            ind=ind+1;
        end
    case (5)
        %ignagni(1996):Algorithm 3 - Ignagni (1990):Algorithm F
        outlen=floor((inlen-3)/3)+1;
        inc=zeros(3,outlen);
        corr=zeros(3,outlen);

        ind=1;
        for i=3:3:inlen
            inc(:,ind)=sum(data(:,i-2:i),2);
            corr(:,ind)=cross(((9/20)*data(:,i-2)+(27/20)*data(:,i-1)), data(:,i));
            ind=ind+1;
        end
    case (6)
        %ignagni(1996):Algorithm 4
        outlen=floor((inlen-6)/3)+1;
        inc=zeros(3,outlen);
        corr=zeros(3,outlen);

        ind=1;
        for i=6:3:inlen
            vr_a=sum(data(:,i-2:i),2);
            vr_b=sum(data(:,i-5:i-3),2);
            inc(:,ind)=vr_a;
            corr(:,ind)=cross(((243/560)*data(:,i-2)+(1539/1120)*data(:,i-1)), data(:,i))+(1/3360)*cross(vr_b,vr_a);
            ind=ind+1;
        end
    case (7)
        %ignagni(1996):Algorithm 5
        outlen=floor((inlen-4)/3)+1;
        inc=zeros(3,outlen);
        corr=zeros(3,outlen);

        ind=1;
        for i=4:3:inlen
            inc(:,ind)=sum(data(:,i-2:i),2);
            corr(:,ind)=cross(((3/280)*data(:,i-3)+(57/140)*data(:,i-2)+(393/280)*data(:,i-1)), data(:,i));
            ind=ind+1;
        end
    case (8)
        %ignagni(1996):Algorithm 6
        outlen=floor((inlen-5)/3)+1;
        inc=zeros(3,outlen);
        corr=zeros(3,outlen);

        ind=1;
        for i=5:3:inlen
            inc(:,ind)=sum(data(:,i-2:i),2);
            corr(:,ind)=cross(((-1/420)*data(:,i-4)+(1/40)*data(:,i-3)+(157/420)*data(:,i-2)+(1207/840)*data(:,i-1)), data(:,i));
            ind=ind+1;
        end   
    case (9)
        %ignagni(1996):Algorithm 7
        outlen=floor((inlen-4)/4)+1;
        inc=zeros(3,outlen);
        corr=zeros(3,outlen);

        ind=1;
        for i=4:4:inlen
            inc(:,ind)=sum(data(:,i-3:i),2);
            corr(:,ind)=cross(((54/105)*data(:,i-3)+(92/105)*data(:,i-2)+(214/105)*data(:,i-1)), data(:,i));
            ind=ind+1;
        end
    otherwise
        disp('Undefined Algorithm (Perhaps, someone else adds it later)');
end