Example #1
0
String& Thread::NewString(const Common::String& string) {
  auto& chars = AllocVector(*Ty_CharVector, int(string.length()));
  auto& strobj = *new(Alloc(sizeof(String))) String(chars);
  ::CopyMemory(
      const_cast<char16*>(strobj.elements()),
      string.value(),
      string.length() * sizeof(char16));
  return strobj;
}
Example #2
0
//信道自适应,特征域
bool GMMMapScore::LFACompensateFeat(float * &p_pfSrcDesFeatBuf,int p_nFrmNum,
									  GMMStatistic &p_Statistic,
									  float *p_pfProbBuf,float **p_ppfProbBufBuf,float *p_pfIPPBuf_VecSize4)
{
	if(p_nFrmNum<=0||p_pfSrcDesFeatBuf==NULL)
	{
		return false;
	}

	// 分配空间
	FMatrix			AMatrix;							// m_nRankNum*m_nRankNum
	FVector			BVector,xVector;					// m_nRankNum*1
	FVector			UxVector;

	if (!AllocMatrix(AMatrix,m_nRankNum,m_nRankNum))	
		return false;
	if (!AllocVector(xVector,m_nRankNum))
	{
		FreeMatrix(AMatrix);	
		return false;
	}
	if (!AllocVector(BVector,m_nRankNum))
	{
		FreeMatrix(AMatrix);			
		FreeVector(xVector);
		return false;
	}
	if (!AllocVector(UxVector,m_nVecSize))
	{
		FreeMatrix(AMatrix);			
		FreeVector(xVector);
		FreeVector(BVector);
		return false;
	}

	ZeroMatrix(AMatrix);
	ZeroVector(BVector);
	for (int nn=0;nn<m_nRankNum;nn++)	// 初始化为I矩阵
		AMatrix.pBuf[nn*m_nRankNum+nn] = m_D.pBuf[nn];
	ResetStatisticBuf(p_Statistic);
	printf("Prob before LFA : ");
	// 计算统计量
	if (!ComputeStatistic_LFA(p_pfSrcDesFeatBuf,p_nFrmNum,p_Statistic,p_pfProbBuf,p_ppfProbBufBuf,p_pfIPPBuf_VecSize4,AMatrix,BVector))
	{
		FreeMatrix(AMatrix);
		FreeVector(BVector);
		FreeVector(xVector);
		FreeVector(UxVector);
		return false;
	}
	
	// 计算信道因子
	if (!Compute_X(AMatrix,BVector,xVector))
	{
		FreeMatrix(AMatrix);
		FreeVector(BVector);
		FreeVector(xVector);
		FreeVector(UxVector);
		return false;
	}

	// 特征转换
	for(int m=0;m<m_nMixNum;m++)
	{
		ZeroVector(UxVector);
		for(int d=0;d<m_nVecSize;d++)
		{
			for(int r=0;r<m_nRankNum;r++)
				UxVector.pBuf[d] += m_V.pBlockBuf[m][d*m_nRankNum+r]*xVector.pBuf[r];
		}
		for(int t=0;t<p_nFrmNum;t++)
		{
			if (p_ppfProbBufBuf[m][t]<1.0e-5)	continue;
			
			for(int d=0;d<m_nVecSize;d++)
			{
				p_pfSrcDesFeatBuf[t*m_nVecSizeStore+d] -= p_ppfProbBufBuf[m][t]*UxVector.pBuf[d];
			}
		}
	}
	printf("Prob after LFA : ");
	//xxiao add for debug
//	ComputeStatistic_LFA(p_pfSrcDesFeatBuf,p_nFrmNum,p_Statistic,p_pfProbBuf,p_ppfProbBufBuf,p_pfIPPBuf_VecSize4,AMatrix,BVector);
	// 释放空间
	FreeMatrix(AMatrix);
	FreeVector(BVector);
	FreeVector(xVector);
	FreeVector(UxVector);

	return true;
}