-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathhmm.h
42 lines (34 loc) · 1002 Bytes
/
hmm.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#ifndef HMM_H
#define HMM_H
#include <stack>
#include <vector>
#include "tensor.h"
#include "ring_buffer.h"
#include "scfg_gnf.h"
#define NO_OBSERVATION 0xFFFFFFFF
#define HMM_HALT 0xFFFFFFFE
#define EMPTY_STATE 0
unsigned sample_from_categorical(unsigned n, double* pr);
template<int E>
class HMM: public StochasticGrammar {
protected:
unsigned M, L;
unsigned cur_observation;
unsigned takts;
RingBuffer<unsigned, E> cur_state_buf;
public:
Tensor<double> transitionPr;
Tensor<double> observationPr;
Tensor<double> startPr;
HMM(unsigned M, unsigned L);
HMM(Tensor<double> t, Tensor<double> o, Tensor<double> start);
~HMM();
virtual unsigned start();
virtual unsigned step();
virtual unsigned restart();
virtual unsigned run(unsigned n, unsigned* arr);
virtual std::vector<unsigned> run(unsigned n);
virtual std::vector<unsigned> run();
virtual std::vector<unsigned> infer(unsigned nonterminal=START_SYMBOL);
};
#endif