Exemplo n.º 1
0
void PLPCoefs::ProcessFrame(float *pInpFrame, float *pOutFrame)
{

   MelBanks::ProcessFrame(pInpFrame, mpEnergies);

//float a[] = {6.728697e+005, 9.397764e+005, 1.477376e+006, 2.738733e+005, 4.895320e+004, 8.109916e+004, 9.704898e+004, 2.696904e+004, 4.563343e+004, 2.192602e+005, 4.360400e+005, 6.248051e+005, 2.641279e+005, 5.159555e+004, 4.087839e+004, 5.961117e+004, 1.200557e+005, 4.983299e+004, 2.235987e+004, 2.777589e+004, 4.005698e+004, 2.035172e+004, 3.305208e+004, 6.939732e+004};
//sCopy(24, mpEnergies, a);

   int nbanks = GetNBanks();

   // limit energies
   sLowerFloor(nbanks, mpEnergies, 1.0f);

   // apply equal laudness curve
   sMultVect(nbanks, mpEnergies, mpEqualLaudnessCurve);

   // compression of energies
   sPower(nbanks, mpEnergies, mCompressFactor);

   // duplicate the first and the last value 
   sShiftRight(nbanks + 1, mpEnergies, 1);
   mpEnergies[0] = mpEnergies[1];
   mpEnergies[nbanks + 1] = mpEnergies[nbanks];

   // IDCT
   ApplyLinTransform(mppIDFTBases, mLPCOrder + 1, GetNBanks() + 2, mpEnergies, mpAutocorrCoefs);
   
   // autocerrelation -> LPC
   float gain = sDurbin(mpAutocorrCoefs, mpLPC, mpTmp, mLPCOrder);
   assert(gain > 0.0f);

   // LPC -> cepstrum
   sLPC2Cepstrum(mLPCOrder, mpLPC, mpCepst);

   // calculate C0
   mpCepst[mLPCOrder] = -logf(1.0f/gain); 

   // appply liftering window
   if(mCepstralLifter != 0.0f)
   {
      sMultVect(mLPCOrder, mpCepst, mpLifteringWindow);
   }

   // cepstral scaling
   if(mCepstralScale != 1.0f)
   {
      sMultiplication(mLPCOrder + 1, mpCepst, mCepstralScale);
   }

   sCopy((mAddC0 ? mLPCOrder + 1 : mLPCOrder), pOutFrame, mpCepst);
}
void CDuergarDwarfReference::SetPower()
{
	m_sPower[0] = sPower(-30,0); //0-9
	m_sPower[1] = sPower(-20,0); //10-19
	m_sPower[2] = sPower(-10,0); //20-29
	m_sPower[3] = sPower(0,0); //30-39
	m_sPower[4] = sPower(0,0); //40-49
	m_sPower[5] = sPower(0,0); //50-59
	m_sPower[6] = sPower(0,0); //60-69
	m_sPower[7] = sPower(0,0); //70-79
	m_sPower[8] = sPower(10,0); //80-89
	m_sPower[9] = sPower(20,0); //90-99
	m_sPower[10] = sPower(30,0); //100-109
	m_sPower[11] = sPower(30,0); //110-119
	m_sPower[12] = sPower(32,0); //120
}
Exemplo n.º 3
0
void CGnomeReference::SetPower() {
  m_sPower[0] = sPower(0, 1); //0-9
  m_sPower[1] = sPower(0, 2); //10-19
  m_sPower[2] = sPower(0, 3); //20-29
  m_sPower[3] = sPower(0, 4); //30-39
  m_sPower[4] = sPower(0, 4); //40-49
  m_sPower[5] = sPower(0, 4); //50-59
  m_sPower[6] = sPower(0, 4); //60-69
  m_sPower[7] = sPower(10, 5); //70-79
  m_sPower[8] = sPower(20, 6); //80-89
  m_sPower[9] = sPower(30, 7); //90-99
  m_sPower[10] = sPower(40, 8); //100-109
  m_sPower[11] = sPower(50, 9); //110-119
  m_sPower[12] = sPower(55, 10); //120
}