/*
 *  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 WEBRTC_MODULES_AUDIO_PROCESSING_VAD_GMM_H_
#define WEBRTC_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  // WEBRTC_MODULES_AUDIO_PROCESSING_VAD_GMM_H_
