Skip to content
Snippets Groups Projects
SingleSource.m 2.17 KiB
Newer Older
  • Learn to ignore specific revisions
  • function [positions, clockError] = SingleSource(pData, pSoundsourcePositions, pCombinationDetails)
    %SINGLESOURCE Implements the single source tracking algorithm
    %
    %   Parameters:
    %       pData (struct):
    %           Data structured by soundsource. The toa is already corrected
    %           (e.g. doppler correction etc.)
    %       pSoundsourcePositions (struct):
    %           The soundsource positions [deg].
    %       pCombinationDetails (table):
    %           Contains all information of the current soundsource
    %           combination.
    %
    %
    %   Returns:
    %       positions (double):
    %           The calculated list of segment positions as a X x 2 column vector.
    %       clockError (double):
    %           The estimated clock error.
    
    %% Get reference position and all soundsource names that are involved
    referencePosition = cellfun(@str2double, strsplit(pCombinationDetails.referencePosition{1}));
    soundsourceNames = strsplit(pCombinationDetails.soundsources{1});
    
    %% Check if only one sound source is selected
    if length(soundsourceNames) ~= 1 || isempty(soundsourceNames)
        error('Only one or at least one soundsource requires to be specified for SingleSource tracking!');
    end
    
    %% Get required data for single source tracking
    pData.(soundsourceNames{1}).horizontalVelocity = ...
        [ ...
            NaN; ...
            calculateHorizontalVelocity( ...
                [pData.(soundsourceNames{1}).date{:}]', ...
                [pData.(soundsourceNames{1}).distance{:}]' ...
            ) ...
        ];
    
    averageHorizontalVelocity = mean( ...
        pData.(soundsourceNames{1}).horizontalVelocity( ...
            ~isnan(pData.(soundsourceNames{1}).horizontalVelocity) ...
            ) ...
        );
    
    %% Return NaN because this is a sample
    positions = NaN(size(pData.(soundsourceNames{1}).date, 1), 2);
    clockError = [];
    
    error('Tracking method implementation not finished yet!');
    
    %% Helper functions
    
        function [hvel] = calculateHorizontalVelocity(dates, distances)
            % calculate the average speed in m/s
            % distances are stored in km
            % dates as rafos dates
    
            diffDistances = diff(distances) * 1000; % now in [m]
    
            diffDates = diff(dates) * 24 * 3600; % now in [s]
            hvel = abs(diffDistances ./ diffDates);
        end
    
    end