Example #1
0
/// Compute Factor Analysis model to perform likelihood computation in the classical way
void FactorAnalysisStat::getFactorAnalysisModel(MixtureGD& FA,String& file) {
	if (verbose) cout << "(FactorAnalysisStat) Compute Variance adapted Speaker Model"<<endl;		
	this->getTrueSpeakerModel(FA,file);
	unsigned long loc=_ndxTable.locNb(file);	

	/// Compute sigma_s
	RealVector <double> sigma_s;
	sigma_s.setSize(_supervsize);
	for (unsigned long i=0;i<_mixsize;i++) 	
		for (unsigned long j=0;j<_vsize;j++) 
			sigma_s[i*_vsize+j]=FA.getDistrib(i).getCov(j)/(_tau+_matN(loc,i));
		
	/// Compute sigma_s+*sigma_w
	RealVector <double> sum,prod;
	sum.setSize(_supervsize);prod.setSize(_supervsize);
	for (unsigned long i=0;i<_mixsize;i++) {
		for (unsigned long j=0;j<_vsize;j++) {
			sum[i*_vsize+j]=sigma_s[i*_vsize+j]+FA.getDistrib(i).getCov(j);
			//cout << "i,j"<<i<<","<<j<<" sigma_s "<<sigma_s[i*_vsize+j]<<" cov:"<<FA.getDistrib(i).getCov(j)<<" N"<<_N(loc,i)<<" "<<_tau<<endl;
		}
	}

	for (unsigned long i=0;i<_mixsize;i++)
		for (unsigned long j=0;j<_vsize;j++)
			FA.getDistrib(i).setCov(sum[i*_vsize+j],j);
	FA.computeAll();
}