function[x_quat,y_quat,z_quat]=winkelausquat(quat1,quat2,J)
% Das Programm beechnet aus den Quaternionen den WInkel nach Kuipers S. 109


%Bilden der complex conjugierten aus Quat1, Siehe Xsens moven S. 76
for j=1:J 
      quat1_conj{j}(1,:)=quat1{j}(1,:);
      quat1_conj{j}(2,:)=-quat1{j}(2,:);
      quat1_conj{j}(3,:)=-quat1{j}(3,:);
      quat1_conj{j}(4,:)=-quat1{j}(4,:);
end

% Bilden einer Matrix aus quat 1 nach Kuipers S. 109
for j=1:J
    M{j}(1,1)=quat1_conj{j}(1,:);
    M{j}(1,2)=-quat1_conj{j}(2,:);
    M{j}(1,3)=-quat1_conj{j}(3,:);
    M{j}(1,4)=-quat1_conj{j}(4,:);
    M{j}(2,1)=quat1_conj{j}(2,:);
    M{j}(2,2)=quat1_conj{j}(1,:);
    M{j}(2,3)=-quat1_conj{j}(4,:);
    M{j}(2,4)=quat1_conj{j}(3,:);
    M{j}(3,1)=quat1_conj{j}(3,:);
    M{j}(3,2)=quat1_conj{j}(4,:);
    M{j}(3,3)=quat1_conj{j}(1,:);
    M{j}(3,4)=-quat1_conj{j}(2,:);
    M{j}(4,1)=quat1_conj{j}(4,:);
    M{j}(4,2)=-quat1_conj{j}(3,:);
    M{j}(4,3)=quat1_conj{j}(2,:);
    M{j}(4,4)=quat1_conj{j}(1,:);
end

% Berechnen des resultierenden Quaternions
for j=1:J
    Q{j}=M{j}*quat2{j};
end

% Berechnen des Winkels, Kuipers S. 168
for j=1:J
    bank{j}=(atan((2*Q{j}(3,:)*Q{j}(4,:)+2*Q{j}(1,:)*Q{j}(2,:))/(2*Q{j}(1,:)^2+2*Q{j}(4,:)^2-1)))*180/pi;
    elevation{j}=(asin(-(2*Q{j}(2,:)*Q{j}(4,:)-2*Q{j}(1,:)*Q{j}(3,:))))*180/pi;
    heading{j}=(atan((2*Q{j}(2,:)*Q{j}(3,:)+2*Q{j}(1,:)*Q{j}(4,:))/(2*Q{j}(1,:)^2+2*Q{j}(2,:)^2-1)))*180/pi;
end

% Umfomatieren der Winkeländerungsmatrizen (cell array > double array)
for j=1:J
    x_quat(j)=bank{j};
    y_quat(j)=elevation{j};
    z_quat(j)=heading{j};
end


x_quat=x_quat';
y_quat=y_quat';
z_quat=z_quat';