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; }
//信道自适应,特征域 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; }