Path: blob/master/Tools/simulink/arducopter/functions/demodYawAngle.m
9903 views
function [sigOut] = demodYawAngle(sigIn)1% Inverse the modulo of 360° operation used on the yaw angle signals2%3% Fabian Bredemeier - IAV GmbH4% License: GPL v356% Output signal7sigOut = zeros(length(sigIn),1);89% Calcualte the differences between samples10sigDiff = diff(sigIn);1112% If difference is larger than 2*pi, safe last sample as offset for13% following signals14offset = 0;15skip = 0; % Var to skip the signal sample directly after abrupt angle change16for i = 1:length(sigIn)17sigOut(i) = offset + sigIn(i+skip);18if i < length(sigDiff) && i > 119% Reset prevent Adding20if abs(sigDiff(i)) < 9021skip = 0;22% Add to offset, if switch happened from 2pi to 023elseif sigDiff(i) <= -90 && ~skip24offset = offset + 360;%(sigIn(i-2)+sigIn(i-1))/2; % Smooth signal values since they are oscillating at jumps25skip = 1;26% Subtract from offset, if switch happened from 0 tp 2 pi27elseif sigDiff(i) > 90 && ~skip28offset = offset - 360;%(sigIn(i+2)+sigIn(i+1))/2; % Smooth signal values since they are oscillating at jumps29skip = 1;30end31end32end3334% Apply moving average filter to smooth out sample value jumps35steps = 10;36coeffFilt = ones(1, steps)/steps;37% sigOut = filter(coeffFilt, 1, sigOut);38sigOut = movmean(sigOut, 9);39end40414243