46 lines
1.7 KiB
C++
46 lines
1.7 KiB
C++
/*
|
|
* 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_
|