www.pudn.com > gmm_utilities.zip > approximate_gauss_by_kernels.m


function g = approximate_gauss_by_kernels(x,P,N,type) 
%function g = approximate_gauss_by_kernels(x,P,N,type) 
% 
% INPUTS:  
%   x,P - mean and covariance matrix of a Gaussian 
%   N - number of components in output  
%   type - method used 
% 
% OUTPUT: 
%   g - Gaussian kernels approximation of Gaussian 
% 
% This function is in alpha stage of development. 
% 
% Tim Bailey 2005. 
 
if N == 1, type = 1; elseif nargin == 3, type = 2; end 
 
switch type 
case 1 
    % Trivial solution 
    g.w = ones(1,N)/N; 
    g.x = repcol(x,N); 
    g.P = P; 
case 2 
    % Musso 
    g.w = ones(1,N)/N; 
    g.x = gauss_samples(x,P,N); 
 
    D = size(x,1); 
    h = (4 / (N*(D+2))) ^ (2/(D+4)); 
    g.P = h*P; 
case 3 
    % Salmond 
    g.w = ones(1,N)/N; 
    g.x = gauss_samples(x,P,N); 
 
    K = 0.5; % salmond's recommended constant term 
    D = size(x,1); 
    h = K*N^(-2/D);  
    g.P = h*P; 
otherwise 
    error('Invalid type') 
end 
 
% Other ideas: 
%   - sample from broader (flatter) distribution and apply importance weights 
%