diff SparseHMM.h @ 130:080fe18f5ebf fixedlag

refactored Viterbi * perhaps I even discovered a bug (probablity sum was not reset for every frame)
author Matthias Mauch <mail@matthiasmauch.net>
date Fri, 03 Jul 2015 12:22:44 +0100
parents 5945b8905d1f
children b877df85ad9e
line wrap: on
line diff
--- a/SparseHMM.h	Wed Jul 01 19:13:05 2015 +0100
+++ b/SparseHMM.h	Fri Jul 03 12:22:44 2015 +0100
@@ -15,21 +15,37 @@
 #define _SPARSEHMM_H_
 
 #include <vector>
+#include <queue>
 #include <cstdio>
 
 using std::vector;
+using std::deque;
 using std::pair;
 
 class SparseHMM
 {
 public:
-    virtual const std::vector<double> calculateObsProb(const vector<pair<double, double> >);
-    const std::vector<int> decodeViterbi(std::vector<vector<double> > obs, 
-                                   vector<double> *scale);
-    vector<double> init;
-    vector<size_t> from;
-    vector<size_t> to;
-    vector<double> transProb;
+    SparseHMM();
+    virtual const std::vector<double>
+                           calculateObsProb(const vector<pair<double, double> >);
+    virtual void           build();
+    const std::vector<int> decodeViterbi(std::vector<vector<double> > obs);
+    void                   initialise(vector<double> firstObs);
+    int                    process(vector<double> newObs);
+    vector<int>            finalise();
+    // "sparse" HMM definition
+    int m_nState;
+    int m_nTrans;
+    vector<double> m_init;
+    vector<size_t> m_from;
+    vector<size_t> m_to;
+    vector<double> m_transProb;
+
+    // variables for decoding
+    deque<double> m_scale;
+    deque<vector<int> > m_psi;
+    vector<double> m_delta;
+    vector<double> m_oldDelta;
 };
 
 #endif