%% morceaux courants (cad non finis) A, B1, B2 et C
%% modèle courant
dynamics_models
dynamics_model
first_frame_of_models
proba_model% probabilité courante pour le modèle
%% paramètres de la méthode
%% paramètres de la méthode
initial_alphas
initial_alpha
sigma_estimation
sigma_estimation
sigma_test
sigma_test
...
@@ -27,95 +25,45 @@ classdef Interface < handle
...
@@ -27,95 +25,45 @@ classdef Interface < handle
display_screen
display_screen
%% Viterbi
transition
proba_morceaux% probabilité courante pour chaque morceau, avec son meilleur path Viterbi
morceaux_finis% pour chaque morceau courant : liste des morceaux finis du path. Cette liste contient une copie du morceau dans l'état où il était quand il a été terminé
proba_morceaux_finis% pour chaque morceau courant : liste des probabilités associées aux morceaux finis. Elle combine la proba de chaque observation du morceau et la proba de transition du morceau au suivant
model_indexes% pour chaque morceau courant : liste des indices des morceaux du path Viterbi pour chaque frame
scores_finis% pour chaque morceau courant : liste des proba d'observation pour chaque frame (uniquement les frames des morceaux finis, car le morceau courant n'est pas encore stable et les x peuvent encore changer)
%% tableaux temporaires dans lesquels on prépare la prochaine version des tableaux de la classe sans les modifier avant d'avoir terminé de traiter la frame pour tous les morceaux
new_proba_morceaux=[NaNNaNNaNNaN];
new_morceaux_finis={[],[],[],[]};
new_proba_morceaux_finis={[],[],[],[]};
new_models={NaN,NaN,NaN,NaN};
new_first_frame_of_models=[NaNNaNNaNNaN];
new_scores_finis={[],[],[],[]};
new_model_indexes={[],[],[],[]};
%% boucle sur les 4 modèles possibles
formorceau=1:4
% on va regarder toutes les branches qui arrivent sur le modèle
%% tableaux temporaires pour le morceau courant et toutes les branches possibles
modele_branche={NaN,NaN,NaN,NaN};% copie des modèles pour leur montrer la nouvelle frame, sans modifier ceux de obj.dynamics_models
first_frame_of_model_branche=[NaNNaNNaNNaN];% pour les copies des modèles
proba_obs_branche=[NaNNaNNaNNaN];% proba d'observation donnée par les copies des modèles ayant vu la frame courante
nouveau_morceau_fini_branche={NaN,NaN,NaN,NaN};% si une branche implique un nouveau morceau fini, on le sauvegarde ici en attendant Viterbi et le choix de la branche (cad si on le garde ou pas)
proba_branche=[NaNNaNNaNNaN];% proba totale de chaque branche
proba_morceau_prec=[NaNNaNNaNNaN];% proba totale des frames vues par le morceau qui était courant à la frame précédente (donc d'indice=branche). Ces proba sont combinées avec les probas de transition au sein du morceau
new_scores_branche={[][][][]};% score des frames vues par le morceau qui était courant à la frame précédente
%% on garde en mémoire les morceaux qui sont finis, pour l'affichage final des X
%%%% %%%%%%%%%%%%%%%% a faire : mettre à jour les x pour bien les étaler
ifbranche==morceau
nouveau_morceau_fini_branche{branche}=0;
else
nouveau_morceau_fini_branche{branche}=copy(obj.dynamics_models{branche});% ce modèle n'a pas encore vu la frame courante, on peut donc le sauvegader dans son état à la frame précédente
%%%% %%%%%% mettre à jour la copie ici
nouveau_morceau_fini_branche{branche}.spread_X();
end
%% on récupère les scores des frames vues par le modèle
ifbranche==morceau
%% on récupère les scores pour les frames précédentes, qui ont pu bouger avec le argmax