annotate hmm/hmm.h @ 298:255e431ae3d4

* Key detector: when returning key strengths, use the peak value of the three underlying chromagram correlations (from 36-bin chromagram) corresponding to each key, instead of the mean. Rationale: This is the same method as used when returning the key value, and it's nice to have the same results in both returned value and plot. The peak performed better than the sum with a simple test set of triads, so it seems reasonable to change the plot to match the key output rather than the other way around. * FFT: kiss_fftr returns only the non-conjugate bins, synthesise the rest rather than leaving them (perhaps dangerously) undefined. Fixes an uninitialised data error in chromagram that could cause garbage results from key detector. * Constant Q: remove precalculated values again, I reckon they're not proving such a good tradeoff.
author Chris Cannam <c.cannam@qmul.ac.uk>
date Fri, 05 Jun 2009 15:12:39 +0000
parents cdfd0948a852
children 67899fda84f5
rev   line source
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