Algorithm 高斯混合模型参数的Matlab训练

Algorithm 高斯混合模型参数的Matlab训练,algorithm,matlab,signal-processing,Algorithm,Matlab,Signal Processing,我正在运行一个基于高斯混合模型的语音增强算法。问题是估计算法在训练过程中下溢。 我试图计算对数频谱帧的PDFX给定一个高斯簇,它是每个频率分量的PDF的乘积X_k(对k=1..256进行fft) 我得到的是256 exp(-v(k))的乘积,使得v(k)>=0 以下是MATLAB计算的一个片段: N-帧数M-混合物的数量c_i每种混合物的重量 gamma(n,i)=c_i*f(X_n|i=i) 由于K=256,乘积很快变为零,因为数字小于1。是否有一种方法可以通过引起下溢(如logsum或类似)

我正在运行一个基于高斯混合模型的语音增强算法。问题是估计算法在训练过程中下溢。 我试图计算对数频谱帧的PDF
X
给定一个高斯簇,它是每个频率分量的PDF的乘积
X_k
(对k=1..256进行fft) 我得到的是
256 exp(-v(k))
的乘积,使得
v(k)>=0

以下是MATLAB计算的一个片段:
N
-帧数
M
-混合物的数量<代码>c_i每种混合物的重量

gamma(n,i)=c_i*f(X_n|i=i)


由于K=256,乘积很快变为零,因为数字小于1。是否有一种方法可以通过引起下溢(如logsum或类似)来计算此值?

您可以在log域中执行计算

将乘积转换为和是很简单的。 另一方面,总和可以通过以下方式进行转换:。 这项工作使用以下公式:

log(a + b) = log(exp(log(a)) + exp(log(b)))
           = log(exp(loga) + exp(logb))
其中
loga
logb
a
b
在日志域中的各自表示。 然后,基本思想是用最大参数分解指数(例如,
loga
,以便于说明):

请注意,如果要添加两个以上的术语,同样的想法也适用

log(a + b) = log(exp(log(a)) + exp(log(b)))
           = log(exp(loga) + exp(logb))
 log(exp(loga)+exp(logb)) = log(exp(loga)*(1+exp(logb-loga)))
                          = loga + log(1+exp(logb-loga))