| c@244 | 1 #ifndef _HMM_H | 
| c@244 | 2 #define _HMM_H | 
| c@244 | 3 | 
| c@245 | 4 #ifdef __cplusplus | 
| c@245 | 5 extern "C" { | 
| c@245 | 6 #endif | 
| c@245 | 7 | 
| c@244 | 8 /* | 
| c@244 | 9  *  hmm.h | 
| c@244 | 10  *  soundbite | 
| c@244 | 11  * | 
| c@244 | 12  *  Created by Mark Levy on 12/02/2006. | 
| c@244 | 13  *  Copyright 2006 Centre for Digital Music, Queen Mary, University of London. All rights reserved. | 
| c@244 | 14  * | 
| c@244 | 15  */ | 
| c@244 | 16 | 
| c@244 | 17 #ifndef PI | 
| c@244 | 18 #define PI 3.14159265358979323846264338327950288 | 
| c@244 | 19 #endif | 
| c@244 | 20 | 
| c@244 | 21 typedef struct _model_t { | 
| c@244 | 22 	int N;			/* number of states */ | 
| c@244 | 23 	double* p0;		/* initial probs */ | 
| c@244 | 24 	double** a;		/* transition probs */ | 
| c@244 | 25 	int L;			/* dimensionality of data */ | 
| c@244 | 26 	double** mu;	/* state means */ | 
| c@244 | 27 	double** cov;	/* covariance, tied between all states */ | 
| c@244 | 28 } model_t; | 
| c@244 | 29 | 
| c@244 | 30 void hmm_train(double** x, int T, model_t* model);							/* with scaling */ | 
| c@244 | 31 void forward_backwards(double*** xi, double** gamma, double* loglik, double* loglik1, double* loglik2, int iter, | 
| c@244 | 32 					   int N, int T, double* p0, double** a, double** b); | 
| c@244 | 33 void baum_welch(double* p0, double** a, double** mu, double** cov, int N, int T, int L, double** x, double*** xi, double** gamma); | 
| c@244 | 34 void viterbi_decode(double** x, int T, model_t* model, int* q);				/* using logs */ | 
| c@244 | 35 model_t* hmm_init(double** x, int T, int L, int N); | 
| c@244 | 36 void hmm_close(model_t* model); | 
| c@244 | 37 void invert(double** cov, int L, double** icov, double* detcov);			/* uses LAPACK (included with Mac OSX) */ | 
| c@244 | 38 double gauss(double* x, int L, double* mu, double** icov, double detcov, double* y, double* z); | 
| c@244 | 39 double loggauss(double* x, int L, double* mu, double** icov, double detcov, double* y, double* z); | 
| c@244 | 40 void hmm_print(model_t* model); | 
| c@244 | 41 | 
| c@245 | 42 #ifdef __cplusplus | 
| c@245 | 43 } | 
| c@244 | 44 #endif | 
| c@244 | 45 | 
| c@245 | 46 #endif | 
| c@245 | 47 |