private Pool <ISenone> CreateTiedSenonePool(float distFloor, float varianceFloor) { var pool = new Pool <ISenone>("senones"); var numMeans = MeansPool.Size; var numVariances = VariancePool.Size; var numGaussiansPerState = MixtureWeightsPool.GauPerState; var numSenones = MixtureWeightsPool.StatesNum; var numStreams = MixtureWeightsPool.StreamsNum; this.LogInfo("Senones " + numSenones); this.LogInfo("Gaussians Per State " + numGaussiansPerState); this.LogInfo("Means " + numMeans); this.LogInfo("Variances " + numVariances); Debug.Assert(numGaussiansPerState > 0); Debug.Assert(numVariances == _numBase * numGaussiansPerState * numStreams); Debug.Assert(numMeans == _numBase * numGaussiansPerState * numStreams); var meansTransformationMatrix = MeansTransformationMatrixPool == null ? null : MeansTransformationMatrixPool.Get(0); var meansTransformationVector = MeansTransformationVectorPool == null ? null : MeansTransformationVectorPool.Get(0); var varianceTransformationMatrix = VarianceTransformationMatrixPool == null ? null : VarianceTransformationMatrixPool.Get(0); var varianceTransformationVector = VarianceTransformationVectorPool == null ? null : VarianceTransformationVectorPool.Get(0); _phoneticTiedMixtures = new MixtureComponentSet[_numBase]; for (var i = 0; i < _numBase; i++) { var mixtureComponents = new List <PrunableMixtureComponent[]>(); for (var j = 0; j < numStreams; j++) { var featMixtureComponents = new PrunableMixtureComponent[numGaussiansPerState]; for (var k = 0; k < numGaussiansPerState; k++) { var whichGaussian = i * numGaussiansPerState * numStreams + j * numGaussiansPerState + k; featMixtureComponents[k] = new PrunableMixtureComponent( MeansPool.Get(whichGaussian), meansTransformationMatrix, meansTransformationVector, VariancePool.Get(whichGaussian), varianceTransformationMatrix, varianceTransformationVector, distFloor, varianceFloor, k); } mixtureComponents.Add(featMixtureComponents); } _phoneticTiedMixtures[i] = new MixtureComponentSet(mixtureComponents, _topGauNum); } for (var i = 0; i < numSenones; i++) { ISenone senone = new SetBasedGaussianMixture(MixtureWeightsPool, _phoneticTiedMixtures[Senone2Ci[i]], i); pool.Put(i, senone); } return(pool); }
public virtual void clearGauScores() { if (this.phoneticTiedMixtures == null) { return; } MixtureComponentSet[] array = this.phoneticTiedMixtures; int num = array.Length; for (int i = 0; i < num; i++) { MixtureComponentSet mixtureComponentSet = array[i]; mixtureComponentSet.clearStoredScores(); } }
public virtual void setGauScoresQueueLength(int scoresQueueLen) { if (this.phoneticTiedMixtures == null) { return; } MixtureComponentSet[] array = this.phoneticTiedMixtures; int num = array.Length; for (int i = 0; i < num; i++) { MixtureComponentSet mixtureComponentSet = array[i]; mixtureComponentSet.setScoreQueueLength(scoresQueueLen); } }