Mercurial > hg > c4dm-chord-transcriptions
view evaluationtools/getrecall.m @ 1:8973548174c1 tip
adding tools to repo
author | christopherh |
---|---|
date | Mon, 06 May 2013 14:43:47 +0100 |
parents | |
children |
line wrap: on
line source
%GETRECALL get frame-based chord symbol recall % %[recall, nondictionary] = getrecall(estimates, annotations,cardinality) % % params.comparison = 'ov'; % params.cardinality = 3; % params.inversion = 0; % params.dictionary = {'X:maj', 'X:min'}; function [recall, nondictionary] = getrecall3(estimates_labfile, annotations_labfile,params) [at1, at2, as] = merge_repeats(annotations_labfile); [et1, et2, es] = merge_repeats(estimates_labfile); %indeces for E and A i = 1; j = 1; ilength = length(et1); jlength = length(at1); % find length in Nt of annotated sequence %alength = length(annotations); % find length in Nt of estimated sequence %elength = length(estimates); % use lesser value for evaluation %ilength = min(alength,elength); Nc = 0; % number of successfully matched Nt Nt = 0; % total number of evaluated Nt Ne = 0; seg_start= 0; seg_end = 0; Tc = 0; Ti = 0; Tt = 0; while i <= ilength & j <= jlength segstart = max(at1(j), et1(i)); segend = min(at2(j), et2(i)); [match, success, errormessage] = comparechords2(char(es{i}),char(as{j}), params.comparison, params.cardinality, params.inversion); includeE = indictionary(char(es{i}), params.dictionary, params.comparison, params.cardinality); includeA = indictionary(char(as{j}), params.dictionary, params.comparison, params.cardinality); seglength = segend-segstart; Tc = Tc + (match * includeE * seglength); Ti = Ti + (includeA * seglength); Tt = Tt + seglength; if at2(j) > segend i = i+1; elseif et2(i) > segend j= j+1; else i = i+1; j = j+1; end end % recall is number of correct matches out of total evaluated Nt recall = Tc/Ti; % percentage of annotations that were non-dictionary chords so ignored nondictionary = 1-(Ti/Tt);