void MelBanks::ProcessFrame(float *inp_frame, float *ret_features) { // preprocessing in the time domain if(z_mean_source) { sSubtractAverage(vector_size, inp_frame); } if(preem_coef != 0.0f) { sPreemphasisBW(vector_size, inp_frame, preem_coef); } sMultVect(vector_size, inp_frame, hamming); // FFT sSet(fft_vector_size, FFT_real, 0.0f); sSet(fft_vector_size, FFT_imag, 0.0f); sCopy(vector_size, FFT_real, inp_frame); cComplex22N(fft_vector_size, FFT_real, FFT_imag, FFT_vector + 1); FFT_vector[0] = 0.0f; cFour1(FFT_vector, fft_vector_size, -1); c2N2Complex(fft_vector_size_2, FFT_vector + 1, FFT_real, FFT_imag); cPower(fft_vector_size_2, FFT_real, FFT_imag); //sSqrt(MB_FFTVECTORSIZE_2, FFTReal); // Get logarithms of energies in critical bands _mbApply(mel_banks, FFT_real, out_en, false); if(take_log) { sLn(nbanks, out_en); } sCopy(nbanks, ret_features, out_en); }
void MelBanks::Init() { if(initialized) return; // get wector size which is power of two fft_vector_size = 1; while(fft_vector_size < vector_size) fft_vector_size *= 2; fft_vector_size_2 = fft_vector_size / 2; input_vector = 0; input_vector_pos = 0; first_frame = true; // space for one waveform frame frame = new float [vector_size]; frame_backup = new float [vector_size]; frame_pos = 0; // coefficients of hamming window hamming = new float[vector_size]; sSet(vector_size, hamming, 1.0f); sWindow_Hamming(vector_size, hamming); // space for FFT FFT_vector = new float [2 * fft_vector_size + 1]; // real + imag + not used entry FFT_real = new float [fft_vector_size]; FFT_imag = new float [fft_vector_size]; if(nbanks_full == -1) { nbanks_full = nbanks; } out_en = new float [nbanks_full]; // calculate mel-bank mel_banks = _mbInit(nbanks_full, fft_vector_size, sample_freq, lo_freq, hi_freq, 0); initialized = true; }
CString cryptoRandomUserPassword (int iChars, DWORD dwFlags) // cryptoRandomUserPassword // // Generates a random password for a user (e.g., when reseting a password). { if (iChars <= 0) return NULL_STR; // Put together a large string of possible characters based on the flags. CString sSet(MAX_SET_SIZE); char *pSet = sSet.GetParsePointer(); char *pPos = pSet; if (dwFlags & CRYPTOPASS_MIXED_CASE) { char *pSrc = g_AlphaMixed_set; char *pSrcEnd = pSrc + sizeof(g_AlphaMixed_set) - 1; while (pSrc < pSrcEnd) *pPos++ = *pSrc++; } else { char *pSrc = g_Alpha_set; char *pSrcEnd = pSrc + sizeof(g_Alpha_set) - 1; while (pSrc < pSrcEnd) *pPos++ = *pSrc++; } if (dwFlags & CRYPTOPASS_NUMBERS) { char *pSrc = g_Numbers_set; char *pSrcEnd = pSrc + sizeof(g_Numbers_set) - 1; while (pSrc < pSrcEnd) *pPos++ = *pSrc++; } if (dwFlags & CRYPTOPASS_SYMBOLS) { char *pSrc = g_Symbols_set; char *pSrcEnd = pSrc + sizeof(g_Symbols_set) - 1; while (pSrc < pSrcEnd) *pPos++ = *pSrc++; } int iSetSize = (int)(pPos - pSet); // Now generate a password of the appropriate number of characters CString sPassword(iChars); pPos = sPassword.GetParsePointer(); char *pPosEnd = pPos + iChars; while (pPos < pPosEnd) { unsigned int dwRnd; rand_s(&dwRnd); *pPos++ = pSet[dwRnd % iSetSize]; } // Done return sPassword; }