/// 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(); }