webrtc / src / af1038d97c566c0f7ad12f9dd31b2f699833143d / . / modules / audio_processing / vad / gmm.h

/* | |

* Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. | |

* | |

* Use of this source code is governed by a BSD-style license | |

* that can be found in the LICENSE file in the root of the source | |

* tree. An additional intellectual property rights grant can be found | |

* in the file PATENTS. All contributing project authors may | |

* be found in the AUTHORS file in the root of the source tree. | |

*/ | |

#ifndef MODULES_AUDIO_PROCESSING_VAD_GMM_H_ | |

#define MODULES_AUDIO_PROCESSING_VAD_GMM_H_ | |

namespace webrtc { | |

// A structure that specifies a GMM. | |

// A GMM is formulated as | |

// f(x) = w[0] * mixture[0] + w[1] * mixture[1] + ... + | |

// w[num_mixtures - 1] * mixture[num_mixtures - 1]; | |

// Where a 'mixture' is a Gaussian density. | |

struct GmmParameters { | |

// weight[n] = log(w[n]) - `dimension`/2 * log(2*pi) - 1/2 * log(det(cov[n])); | |

// where cov[n] is the covariance matrix of mixture n; | |

const double* weight; | |

// pointer to the first element of a `num_mixtures`x`dimension` matrix | |

// where kth row is the mean of the kth mixture. | |

const double* mean; | |

// pointer to the first element of a `num_mixtures`x`dimension`x`dimension` | |

// 3D-matrix, where the kth 2D-matrix is the inverse of the covariance | |

// matrix of the kth mixture. | |

const double* covar_inverse; | |

// Dimensionality of the mixtures. | |

int dimension; | |

// number of the mixtures. | |

int num_mixtures; | |

}; | |

// Evaluate the given GMM, according to `gmm_parameters`, at the given point | |

// `x`. If the dimensionality of the given GMM is larger that the maximum | |

// acceptable dimension by the following function -1 is returned. | |

double EvaluateGmm(const double* x, const GmmParameters& gmm_parameters); | |

} // namespace webrtc | |

#endif // MODULES_AUDIO_PROCESSING_VAD_GMM_H_ |