Algorithm 高斯混合模型参数的Matlab训练
我正在运行一个基于高斯混合模型的语音增强算法。问题是估计算法在训练过程中下溢。 我试图计算对数频谱帧的PDFAlgorithm 高斯混合模型参数的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或类似)
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))