Mercurial > hg > vamp-fanchirp
changeset 10:af59167b3d35 perf
size_t -> int throughout: permits better optimisation for tight for-loops, making the whole thing about 10% faster
author | Chris Cannam |
---|---|
date | Tue, 02 Oct 2018 13:21:15 +0100 |
parents | 54dd64b6cfc0 |
children | 36c99e4c7e94 |
files | FChTransformF0gram.cpp FChTransformF0gram.h FChTransformUtils.cpp FChTransformUtils.h |
diffstat | 4 files changed, 109 insertions(+), 110 deletions(-) [+] |
line wrap: on
line diff
--- a/FChTransformF0gram.cpp Tue Oct 02 13:17:19 2018 +0100 +++ b/FChTransformF0gram.cpp Tue Oct 02 13:21:15 2018 +0100 @@ -478,7 +478,7 @@ /* f0 values of F0gram grid as string values */ vector<string> f0values; - size_t ind = 0; + int ind = 0; char f0String[10]; while (ind < m_num_f0s) { sprintf(f0String, "%4.2f", m_f0s[ind]); @@ -552,19 +552,19 @@ FChTransformF0gram::design_GLogS() { // total number & initial quantity of f0s - m_glogs_init_f0s = (size_t)(((double)m_f0_params.num_f0s_per_oct)*log2(5.0))+1; + m_glogs_init_f0s = (int)(((double)m_f0_params.num_f0s_per_oct)*log2(5.0))+1; m_glogs_num_f0s = (m_f0_params.num_octs+1)*m_f0_params.num_f0s_per_oct + m_glogs_init_f0s; // Initialize arrays m_glogs_f0 = new double[m_glogs_num_f0s]; m_glogs = new double[m_glogs_num_f0s*m_warp_params.num_warps]; - m_glogs_n = new size_t[m_glogs_num_f0s]; - m_glogs_index = new size_t[m_glogs_num_f0s]; + m_glogs_n = new int[m_glogs_num_f0s]; + m_glogs_index = new int[m_glogs_num_f0s]; // Compute f0 values m_glogs_harmonic_count = 0; double factor = (double)(m_warp_params.nsamps_twarp/2)/(double)(m_warp_params.nsamps_twarp/2+1); - for (size_t i = 0; i < m_glogs_num_f0s; i++) { + for (int i = 0; i < m_glogs_num_f0s; i++) { m_glogs_f0[i] = (m_f0_params.f0min/5.0)*pow(2.0,(double)i/(double)m_f0_params.num_f0s_per_oct); // for every f0 compute number of partials less or equal than m_fmax. m_glogs_n[i] = m_fmax*factor/m_glogs_f0[i]; @@ -573,18 +573,18 @@ } // Initialize arrays for interpolation - m_glogs_posint = new size_t[m_glogs_harmonic_count]; + m_glogs_posint = new int[m_glogs_harmonic_count]; m_glogs_posfrac = new double[m_glogs_harmonic_count]; m_glogs_interp = new double[m_glogs_harmonic_count]; // Compute int & frac of interpolation positions - size_t aux_index = 0; + int aux_index = 0; double aux_pos; - for (size_t i = 0; i < m_glogs_num_f0s; i++) { - for (size_t j = 1; j <= m_glogs_n[i]; j++) { + for (int i = 0; i < m_glogs_num_f0s; i++) { + for (int j = 1; j <= m_glogs_n[i]; j++) { // indice en el vector de largo t_warp/2+1 donde el ultimo valor corresponde a f=m_fmax aux_pos = ((double)j*m_glogs_f0[i])*((double)(m_warp_params.nsamps_twarp/2+1))/m_fmax; - m_glogs_posint[aux_index] = (size_t)aux_pos; + m_glogs_posint[aux_index] = (int)aux_pos; m_glogs_posfrac[aux_index] = aux_pos - (double)m_glogs_posint[aux_index]; aux_index++; } @@ -592,22 +592,22 @@ // Third harmonic attenuation double aux_third_harmonic; - m_glogs_third_harmonic_posint = new size_t[(m_f0_params.num_octs+1)*m_f0_params.num_f0s_per_oct]; + m_glogs_third_harmonic_posint = new int[(m_f0_params.num_octs+1)*m_f0_params.num_f0s_per_oct]; m_glogs_third_harmonic_posfrac = new double[(m_f0_params.num_octs+1)*m_f0_params.num_f0s_per_oct]; - for (size_t i = 0; i < (m_f0_params.num_octs+1)*m_f0_params.num_f0s_per_oct; i++) { + for (int i = 0; i < (m_f0_params.num_octs+1)*m_f0_params.num_f0s_per_oct; i++) { aux_third_harmonic = (double)i + (double)m_glogs_init_f0s - ((double)m_f0_params.num_f0s_per_oct)*log2(3.0); - m_glogs_third_harmonic_posint[i] = (size_t)aux_third_harmonic; + m_glogs_third_harmonic_posint[i] = (int)aux_third_harmonic; m_glogs_third_harmonic_posfrac[i] = aux_third_harmonic - (double)(m_glogs_third_harmonic_posint[i]); } m_glogs_third_harmonic = new double[(m_f0_params.num_octs+1)*m_f0_params.num_f0s_per_oct]; // Fifth harmonic attenuation double aux_fifth_harmonic; - m_glogs_fifth_harmonic_posint = new size_t[(m_f0_params.num_octs+1)*m_f0_params.num_f0s_per_oct]; + m_glogs_fifth_harmonic_posint = new int[(m_f0_params.num_octs+1)*m_f0_params.num_f0s_per_oct]; m_glogs_fifth_harmonic_posfrac = new double[(m_f0_params.num_octs+1)*m_f0_params.num_f0s_per_oct]; - for (size_t i = 0; i < (m_f0_params.num_octs+1)*m_f0_params.num_f0s_per_oct; i++) { + for (int i = 0; i < (m_f0_params.num_octs+1)*m_f0_params.num_f0s_per_oct; i++) { aux_fifth_harmonic = (double)i + (double)m_glogs_init_f0s - ((double)m_f0_params.num_f0s_per_oct)*log2(5.0); - m_glogs_fifth_harmonic_posint[i] = (size_t)aux_fifth_harmonic; + m_glogs_fifth_harmonic_posint[i] = (int)aux_fifth_harmonic; m_glogs_fifth_harmonic_posfrac[i] = aux_fifth_harmonic - (double)(m_glogs_fifth_harmonic_posint[i]); } m_glogs_fifth_harmonic = new double[(m_f0_params.num_octs+1)*m_f0_params.num_f0s_per_oct]; @@ -618,7 +618,7 @@ m_glogs_sigma_correction = new double[m_f0_params.num_octs*m_f0_params.num_f0s_per_oct]; m_glogs_hf_smoothing_window = new double[m_warp_params.nsamps_twarp/2+1]; double MIDI_value; - for (size_t i = 0; i < m_f0_params.num_octs*m_f0_params.num_f0s_per_oct; i++) { + for (int i = 0; i < m_f0_params.num_octs*m_f0_params.num_f0s_per_oct; i++) { MIDI_value = 69.0 + 12.0 * log2(m_glogs_f0[i + m_glogs_init_f0s]/440.0); m_glogs_f0_preference_weights[i] = 1.0/sqrt(2.0*M_PI*m_f0_params.prefer_stdev*m_f0_params.prefer_stdev)*exp(-(MIDI_value-m_f0_params.prefer_mean)*(MIDI_value-m_f0_params.prefer_mean)/(2.0*m_f0_params.prefer_stdev*m_f0_params.prefer_stdev)); m_glogs_f0_preference_weights[i] = (0.01 + m_glogs_f0_preference_weights[i]) / (1.01); @@ -629,7 +629,7 @@ double smooth_width = 1000.0; // hertz. double smooth_aux = (double)(m_warp_params.nsamps_twarp/2+1)*(m_fmax-smooth_width)/m_fmax; - for (size_t i = 0; i < m_warp_params.nsamps_twarp/2+1; i++) { + for (int i = 0; i < m_warp_params.nsamps_twarp/2+1; i++) { if (i < smooth_aux) { m_glogs_hf_smoothing_window[i] = 1.0; } else { @@ -672,7 +672,7 @@ // time instants of the original signal frame double t_orig[m_warpings.nsamps_torig]; //float * t_orig = new float [m_warpings.nsamps_torig]; - for (size_t ind = 0; ind < m_warpings.nsamps_torig; ind++) { + for (int ind = 0; ind < m_warpings.nsamps_torig; ind++) { t_orig[ind] = ((double)(ind + 1) - (double)m_warpings.nsamps_torig / 2.0) / m_warpings.fs_orig; } @@ -684,8 +684,8 @@ // maximum relative frequency deviation double freq_relative_max = 0; - for (size_t i = 0; i < m_warpings.nsamps_torig; i++) - for (size_t j = 0; j < m_warp_params.num_warps; j++) + for (int i = 0; i < m_warpings.nsamps_torig; i++) + for (int j = 0; j < m_warp_params.num_warps; j++) if (freq_relative_max < freq_relative[j * m_warpings.nsamps_torig + i]) freq_relative_max = freq_relative[j * m_warpings.nsamps_torig + i]; @@ -694,7 +694,7 @@ // time instants of the warped signal frame double t_warp[m_warp_params.nsamps_twarp]; - for (size_t ind = 0; ind < m_warp_params.nsamps_twarp; ind++) { + for (int ind = 0; ind < m_warp_params.nsamps_twarp; ind++) { t_warp[ind] = ((double)((int)(ind + 1)- (int)m_warp_params.nsamps_twarp / 2)) / (double)m_warpings.fs_warp; } @@ -708,14 +708,14 @@ /* output << "chirp_rates" << endl; - for (size_t j = 0; j < m_warp_params.num_warps; j++){ + for (int j = 0; j < m_warp_params.num_warps; j++){ output << m_warpings.chirp_rates[j]; output << " "; } output << endl << "freq_relative" << endl; - for (size_t i = 0; i < m_warpings.nsamps_torig; i++){ - for (size_t j = 0; j < m_warp_params.num_warps; j++){ + for (int i = 0; i < m_warpings.nsamps_torig; i++){ + for (int j = 0; j < m_warp_params.num_warps; j++){ output << freq_relative[j * m_warpings.nsamps_torig + i]; output << " "; } @@ -724,7 +724,7 @@ output << endl << "t_orig" << endl; - for (size_t i = 0; i < m_warpings.nsamps_torig; i++){ + for (int i = 0; i < m_warpings.nsamps_torig; i++){ output << t_orig[i] << endl ; } */ @@ -749,7 +749,7 @@ hypothesis: sampling frequency at the central point equals the original */ - m_warpings.pos_int = new size_t[m_warp_params.num_warps * m_warp_params.nsamps_twarp]; + m_warpings.pos_int = new int[m_warp_params.num_warps * m_warp_params.nsamps_twarp]; m_warpings.pos_frac = new double[m_warp_params.num_warps * m_warp_params.nsamps_twarp]; // vector of phase values @@ -759,14 +759,14 @@ // warped positions double *pos1 = new double[m_warp_params.nsamps_twarp*m_warp_params.num_warps]; - for (size_t i = 0; i < m_warp_params.num_warps; i++) { + for (int i = 0; i < m_warp_params.num_warps; i++) { // integration of relative frequency to obtain phase values cumtrapz(t_orig, freq_relative + i*(m_warpings.nsamps_torig), m_warpings.nsamps_torig, phi); // centering of phase values to force original frequency in the middle aux = phi[m_warpings.nsamps_torig/2]; - for (size_t j = 0; j < m_warpings.nsamps_torig; j++) { + for (int j = 0; j < m_warpings.nsamps_torig; j++) { phi[j] -= aux; } //for @@ -781,10 +781,10 @@ // % fractional value that defines the warped position // warps.pos1_frac = (double(pos1)' - double(pos1_int)); - for (size_t j = 0; j < m_warp_params.nsamps_twarp*m_warp_params.num_warps; j++) { + for (int j = 0; j < m_warp_params.nsamps_twarp*m_warp_params.num_warps; j++) { // previous sample index pos1[j] = pos1[j]*m_warpings.fs_orig + m_warpings.nsamps_torig/2 + 1; - m_warpings.pos_int[j] = (size_t) pos1[j]; + m_warpings.pos_int[j] = (int) pos1[j]; m_warpings.pos_frac[j] = pos1[j] - (double)(m_warpings.pos_int[j]); } //for @@ -806,7 +806,7 @@ m_warpings.chirp_rates[0] = -m_warp_params.alpha_max; double increment = (double) m_warp_params.alpha_max / ((m_warp_params.num_warps - 1) / 2); - for (size_t ind = 1; ind < m_warp_params.num_warps; ind++) { + for (int ind = 1; ind < m_warp_params.num_warps; ind++) { m_warpings.chirp_rates[ind] = m_warpings.chirp_rates[ind - 1] + increment; } // force zero value @@ -826,20 +826,20 @@ // fill positive values int ind_log = middle_point; - for (size_t ind = 0; ind < (m_warp_params.num_warps + 1) / 2; ind++) { + for (int ind = 0; ind < (m_warp_params.num_warps + 1) / 2; ind++) { m_warpings.chirp_rates[ind_log] = pow(10, exponent) - 1; exponent += increment; ind_log++; } // fill negative values - for (size_t ind = 0; ind < (m_warp_params.num_warps - 1) / 2; ind++) { + for (int ind = 0; ind < (m_warp_params.num_warps - 1) / 2; ind++) { m_warpings.chirp_rates[ind] = -m_warpings.chirp_rates[m_warp_params.num_warps - 1 - ind]; } } // compute relative frequency deviation - for (size_t i = 0; i < m_warpings.nsamps_torig; i++) - for (size_t j = 0; j < m_warp_params.num_warps; j++) + for (int i = 0; i < m_warpings.nsamps_torig; i++) + for (int j = 0; j < m_warp_params.num_warps; j++) freq_relative[j * m_warpings.nsamps_torig + i] = 1.0 + t_orig[i] * m_warpings.chirp_rates[j]; //freq_relative[i * m_warpings.nsamps_torig + j] = 1.0 + t_orig[i] * m_warpings.chirp_rates[j]; //freq_relative[i][j] = 1.0 + t_orig[i] * m_warpings.chirp_rates[j]; @@ -855,8 +855,8 @@ double *lp_LPFWindow_aux = new double[m_blockSize/2+1]; mp_LPFWindow = new double[m_blockSize/2+1]; - size_t i_max = (size_t) ((2.0*m_fmax/m_fs) * ( (double)m_blockSize / 2.0 + 1.0 )); - for (size_t i = 0; i < m_blockSize/2+1; i++) { + int i_max = (int) ((2.0*m_fmax/m_fs) * ( (double)m_blockSize / 2.0 + 1.0 )); + for (int i = 0; i < m_blockSize/2+1; i++) { if (i >= i_max) { lp_LPFWindow_aux[i] = 0.0; } else { @@ -866,7 +866,7 @@ LPF_time = (double*)fftw_malloc(sizeof ( double) * m_warpings.nsamps_torig); //memset((char*)LPF_time, 0, m_warpings.nsamps_torig * sizeof(double)); // sustituyo el memset por un for: - for (size_t i = 0; i < m_warpings.nsamps_torig; i++) { + for (int i = 0; i < m_warpings.nsamps_torig; i++) { LPF_time[i] = 0.0; } #ifdef DEBUG @@ -875,7 +875,7 @@ LPF_frequency = (fftw_complex*)fftw_malloc(sizeof ( fftw_complex) * (m_warpings.nsamps_torig/2 + 1)); //tamaño de la fft cuando la entrada es real //memset((char*)LPF_frequency, 0, sizeof(fftw_complex) * (m_warpings.nsamps_torig/2 + 1)); // sustituyo el memset por un for: - for (size_t i = 0; i < (m_warpings.nsamps_torig/2 + 1); i++) { + for (int i = 0; i < (m_warpings.nsamps_torig/2 + 1); i++) { LPF_frequency[i][0] = 0.0; LPF_frequency[i][1] = 0.0; } @@ -885,24 +885,24 @@ plan_forward_LPF = fftw_plan_dft_r2c_1d(m_blockSize, LPF_time, LPF_frequency, FFTW_ESTIMATE); plan_backward_LPF = fftw_plan_dft_c2r_1d(m_warpings.nsamps_torig, LPF_frequency, LPF_time, FFTW_ESTIMATE|FFTW_PRESERVE_INPUT); - size_t winWidth = 11; + int winWidth = 11; double *lp_hanningWindow = new double[winWidth]; double accum=0; - for (size_t i = 0; i < winWidth; i++) { + for (int i = 0; i < winWidth; i++) { lp_hanningWindow[i]=0.5*(1.0-cos(2*M_PI*(double)(i+1)/((double)winWidth+1.0))); accum+=lp_hanningWindow[i]; } - for (size_t i = 0; i < winWidth; i++) { //window normalization + for (int i = 0; i < winWidth; i++) { //window normalization lp_hanningWindow[i]=lp_hanningWindow[i]/accum; } - for (size_t i = 0; i < m_blockSize/2+1; i++) { + for (int i = 0; i < m_blockSize/2+1; i++) { //if (((i-(winWidth-1)/2)<0)||(i+(winWidth-1))/2>m_blockSize/2-1) {//consideramos winWidth impar, si la ventana sale del arreglo se rellena con el valor origianl if ( (i > (i_max + (winWidth-1)/2)) || (i <= (i_max - (winWidth-1)/2)) ) { mp_LPFWindow[i]=lp_LPFWindow_aux[i]; } else { accum=0; - for (size_t j = -((winWidth-1)/2); j <= (winWidth-1)/2; j++) { + for (int j = -((winWidth-1)/2); j <= (winWidth-1)/2; j++) { accum+=lp_LPFWindow_aux[i-j]*lp_hanningWindow[j+(winWidth-1)/2]; } mp_LPFWindow[i]=accum; @@ -915,7 +915,7 @@ void FChTransformF0gram::apply_LPF() { fftw_execute(plan_forward_LPF); - for (size_t i = 0; i < m_blockSize/2+1; i++) { + for (int i = 0; i < m_blockSize/2+1; i++) { LPF_frequency[i][0]*=mp_LPFWindow[i]; LPF_frequency[i][1]*=mp_LPFWindow[i]; } @@ -1011,10 +1011,10 @@ printf(" m_glogs_harmonic_count = %d.\n",m_glogs_harmonic_count); #endif - // size_t n = m_nfft/2 + 1; + // int n = m_nfft/2 + 1; // double *tbuf = in_window; - for (size_t i = 0; i < m_blockSize; i++) { + for (int i = 0; i < m_blockSize; i++) { LPF_time[i] = (double)(inputBuffers[0][i]) * m_timeWindow[i]; } @@ -1032,13 +1032,13 @@ /* Solo a modo de prueba, voy a poner la salida del filtrado en «in» y voy a mostrar la FFT de eso, para ver el efecto del filtrado. */ -// for (size_t i = 0; i < m_nfft; i++) { +// for (int i = 0; i < m_nfft; i++) { // in[i][0] = tbuf[i]; // in[i][1] = 0; // } // fftw_execute(planFFT); // double real, imag; -// for (size_t i=0; i<n; ++i) { // preincremento?? ver version de nacho +// for (int i=0; i<n; ++i) { // preincremento?? ver version de nacho // real = out[i][0]; // imag = out[i][1]; // feature.values.push_back(real*real + imag*imag); @@ -1047,7 +1047,7 @@ // float real; // float imag; -// for (size_t i=0; i<m_blockSize/2+1; i++) { +// for (int i=0; i<m_blockSize/2+1; i++) { // real = (float)(LPF_frequency[i][0]); // imag = (float)(LPF_frequency[i][1]); // feature.values.push_back(real*real+imag*imag); @@ -1058,14 +1058,14 @@ // Hanning window & FFT for all warp directions double max_glogs = -DBL_MAX; - size_t ind_max_glogs = 0; + int ind_max_glogs = 0; - for (size_t i_warp = 0; i_warp < m_warp_params.num_warps; i_warp++) { + for (int i_warp = 0; i_warp < m_warp_params.num_warps; i_warp++) { // Interpolate interp1q(LPF_time, (m_warpings.pos_int) + i_warp*m_warp_params.nsamps_twarp, m_warpings.pos_frac + i_warp*m_warp_params.nsamps_twarp, x_warping, m_warp_params.nsamps_twarp); // Apply window - for (size_t i = 0; i < m_warp_params.nsamps_twarp; i++) { + for (int i = 0; i < m_warp_params.nsamps_twarp; i++) { x_warping[i] *= mp_HanningWindow[i]; } @@ -1075,7 +1075,7 @@ // Copy result //memcpy(m_absFanChirpTransform + i_warp*(m_warp_params.nsamps_twarp/2+1), m_auxFanChirpTransform, (m_warp_params.nsamps_twarp/2+1)*sizeof(fftw_complex)); asi como esta no funciona double *aux_abs_fcht = m_absFanChirpTransform + i_warp*(m_warp_params.nsamps_twarp/2+1); - for (size_t i = 0; i < (m_warp_params.nsamps_twarp/2+1); i++) { + for (int i = 0; i < (m_warp_params.nsamps_twarp/2+1); i++) { aux_abs_fcht[i] = log10(1.0 + 10.0*sqrt(m_auxFanChirpTransform[i][0]*m_auxFanChirpTransform[i][0]+m_auxFanChirpTransform[i][1]*m_auxFanChirpTransform[i][1])); // smoothing high frequency values //aux_abs_fcht[i] *= m_glogs_hf_smoothing_window[i]; @@ -1084,10 +1084,10 @@ // ----------------------------------------------------------------------------------------- // GLogS interp1q(aux_abs_fcht, m_glogs_posint, m_glogs_posfrac, m_glogs_interp, m_glogs_harmonic_count); - size_t glogs_ind = 0; - for (size_t i = 0; i < m_glogs_num_f0s; i++) { + int glogs_ind = 0; + for (int i = 0; i < m_glogs_num_f0s; i++) { double glogs_accum = 0; - for (size_t j = 1; j <= m_glogs_n[i]; j++) { + for (int j = 1; j <= m_glogs_n[i]; j++) { glogs_accum += m_glogs_interp[glogs_ind++]; } m_glogs[i + i_warp*m_glogs_num_f0s] = glogs_accum/(double)m_glogs_n[i]; @@ -1096,18 +1096,18 @@ // Sub/super harmonic correction interp1q(m_glogs + i_warp*m_glogs_num_f0s, m_glogs_third_harmonic_posint, m_glogs_third_harmonic_posfrac, m_glogs_third_harmonic, (m_f0_params.num_octs+1)*m_f0_params.num_f0s_per_oct); interp1q(m_glogs + i_warp*m_glogs_num_f0s, m_glogs_fifth_harmonic_posint, m_glogs_fifth_harmonic_posfrac, m_glogs_fifth_harmonic, (m_f0_params.num_octs+1)*m_f0_params.num_f0s_per_oct); - for (size_t i = m_glogs_num_f0s-1; i >= m_glogs_init_f0s; i--) { + for (int i = m_glogs_num_f0s-1; i >= m_glogs_init_f0s; i--) { m_glogs[i + i_warp*m_glogs_num_f0s] -= MAX(MAX(m_glogs[i-m_f0_params.num_f0s_per_oct + i_warp*m_glogs_num_f0s],m_glogs_third_harmonic[i-m_glogs_init_f0s]),m_glogs_fifth_harmonic[i-m_glogs_init_f0s]); //m_glogs[i] -= MAX(m_glogs[i-m_f0_params.num_f0s_per_oct],m_glogs_third_harmonic[i-m_glogs_init_f0s]); } - for (size_t i = m_glogs_init_f0s; i < m_glogs_num_f0s-m_f0_params.num_f0s_per_oct; i++) { + for (int i = m_glogs_init_f0s; i < m_glogs_num_f0s-m_f0_params.num_f0s_per_oct; i++) { m_glogs[i + i_warp*m_glogs_num_f0s] -= 0.3*m_glogs[i+m_f0_params.num_f0s_per_oct + i_warp*m_glogs_num_f0s]; // Median, sigma $ weights correction m_glogs[i + i_warp*m_glogs_num_f0s] = (m_glogs[i + i_warp*m_glogs_num_f0s]-m_glogs_median_correction[i-m_glogs_init_f0s])*m_glogs_sigma_correction[i-m_glogs_init_f0s]*m_glogs_f0_preference_weights[i-m_glogs_init_f0s]; } // Look for maximum value to determine best direction - for (size_t i = m_glogs_init_f0s; i < m_glogs_num_f0s-m_f0_params.num_f0s_per_oct; i++) { + for (int i = m_glogs_init_f0s; i < m_glogs_num_f0s-m_f0_params.num_f0s_per_oct; i++) { if (m_glogs[i + i_warp*m_glogs_num_f0s] > max_glogs) { max_glogs = m_glogs[i + i_warp*m_glogs_num_f0s]; ind_max_glogs = i_warp; @@ -1117,8 +1117,8 @@ // ---------------------------------------------------------------------------------------------- - for (size_t i=m_glogs_init_f0s; i< m_glogs_num_f0s - m_f0_params.num_f0s_per_oct; i++) { - //for (size_t i=0; i<(m_warp_params.nsamps_twarp/2+1); i++) { + for (int i=m_glogs_init_f0s; i< m_glogs_num_f0s - m_f0_params.num_f0s_per_oct; i++) { + //for (int i=0; i<(m_warp_params.nsamps_twarp/2+1); i++) { //feature.values.push_back((float)(m_warpings.pos_int[i])+ (float)(m_warpings.pos_frac[i])); //feature.values.push_back((float)(phi[i]*100000.0)); //feature.values.push_back((float)(t_orig[i])); @@ -1129,7 +1129,7 @@ switch (m_f0gram_mode) { case 1: max_glogs = -DBL_MAX; - for (size_t i_warp = 0; i_warp < m_warp_params.num_warps; i_warp++) { + for (int i_warp = 0; i_warp < m_warp_params.num_warps; i_warp++) { if (m_glogs[i + i_warp*m_glogs_num_f0s] > max_glogs) { max_glogs = m_glogs[i + i_warp*m_glogs_num_f0s]; ind_max_glogs = i_warp; @@ -1138,7 +1138,7 @@ feature.values.push_back((float)max_glogs); break; case 0: - feature.values.push_back((float)m_glogs[i+(size_t)ind_max_glogs*(size_t)m_glogs_num_f0s]); + feature.values.push_back((float)m_glogs[i+(int)ind_max_glogs*(int)m_glogs_num_f0s]); break; } //feature.values.push_back((float)m_glogs_hf_smoothing_window[i]); @@ -1166,20 +1166,20 @@ void FChTransformF0gram::design_time_window() { - size_t transitionWidth = (size_t)m_blockSize/128 + 1;; + int transitionWidth = (int)m_blockSize/128 + 1;; m_timeWindow = new double[m_blockSize]; double *lp_transitionWindow = new double[transitionWidth]; //memset(m_timeWindow, 1.0, m_blockSize); - for (size_t i = 0; i < m_blockSize; i++) { + for (int i = 0; i < m_blockSize; i++) { m_timeWindow[i] = 1.0; } - for (size_t i = 0; i < transitionWidth; i++) { + for (int i = 0; i < transitionWidth; i++) { lp_transitionWindow[i]=0.5*(1.0-cos(2*M_PI*(double)(i+1)/((double)transitionWidth+1.0))); } - for (size_t i = 0; i < transitionWidth/2; i++) { + for (int i = 0; i < transitionWidth/2; i++) { m_timeWindow[i] = lp_transitionWindow[i]; m_timeWindow[m_blockSize-1-i] = lp_transitionWindow[transitionWidth-1-i]; }
--- a/FChTransformF0gram.h Tue Oct 02 13:17:19 2018 +0100 +++ b/FChTransformF0gram.h Tue Oct 02 13:21:15 2018 +0100 @@ -70,8 +70,8 @@ protected: string m_currentProgram; - size_t m_stepSize; - size_t m_blockSize; + int m_stepSize; + int m_blockSize; float m_fs; // input sampling rate (inputSampleRate) // plugin-specific data and methods go here @@ -79,18 +79,18 @@ // ============= WARPING PARAMETERS ============= double m_fmax; // maximum frequency of interest (Hz) - size_t m_nfft; // number of fft points (controls zero-padding) - size_t m_hop; // hop in samples in the upsampled signal - size_t m_num_f0s; // number of f0 values in F0gram grid + int m_nfft; // number of fft points (controls zero-padding) + int m_hop; // hop in samples in the upsampled signal + int m_num_f0s; // number of f0 values in F0gram grid //vector<float> m_f0s; // vector of f0 values double *m_f0s; // vector of f0 values typedef struct { - size_t nsamps_twarp; // number of samples of the warped signal frame + int nsamps_twarp; // number of samples of the warped signal frame double alpha_max; // maximum value of normalized frequency deviation (alpha) - size_t num_warps; // number of warpings - size_t fact_over_samp; // oversampling factor - size_t alpha_dist; // distribution of alpha values, 'lin' or 'log' (0 - 1) + int num_warps; // number of warpings + int fact_over_samp; // oversampling factor + int alpha_dist; // distribution of alpha values, 'lin' or 'log' (0 - 1) } warping_parameters; warping_parameters m_warp_params; @@ -99,12 +99,12 @@ typedef struct { double f0min; // minimun fundamental frequency - size_t num_octs; // number of octaves - size_t num_f0s_per_oct; // number of f0s per octave - size_t num_f0_hyps; // number of f0 hypotesis to extract + int num_octs; // number of octaves + int num_f0s_per_oct; // number of f0s per octave + int num_f0_hyps; // number of f0 hypotesis to extract bool prefer; // whether to use a f0 preference guassian function - size_t prefer_mean; // mean of f0 preference function (MIDI number for C4) - size_t prefer_stdev; // stdev of f0 preference function (stdev in MIDI numbers) + int prefer_mean; // mean of f0 preference function (MIDI number for C4) + int prefer_stdev; // stdev of f0 preference function (stdev in MIDI numbers) } f0_parameters; f0_parameters m_f0_params; @@ -128,9 +128,9 @@ double fs_orig; // sampling frequency after oversampling double fs_warp; // sampling frequency of warped signal double *chirp_rates; // chirp rates - size_t nsamps_torig; // number of samples of the original signal frame - size_t fact_over_samp; // oversampling factor (use instead warp_params.fact_over_samp) - size_t *pos_int; // index of previous sample to do the warping by interpolation efficiently + int nsamps_torig; // number of samples of the original signal frame + int fact_over_samp; // oversampling factor (use instead warp_params.fact_over_samp) + int *pos_int; // index of previous sample to do the warping by interpolation efficiently double *pos_frac; // fractional value to do the warping by interpolation efficiently } warping_design; @@ -154,18 +154,18 @@ // GLogS double *m_glogs_f0; double *m_glogs; - size_t *m_glogs_n; - size_t *m_glogs_index; - size_t *m_glogs_posint; + int *m_glogs_n; + int *m_glogs_index; + int *m_glogs_posint; double *m_glogs_posfrac; double *m_glogs_interp; - size_t m_glogs_harmonic_count; - size_t m_glogs_num_f0s; - size_t m_glogs_init_f0s; - size_t *m_glogs_third_harmonic_posint; + int m_glogs_harmonic_count; + int m_glogs_num_f0s; + int m_glogs_init_f0s; + int *m_glogs_third_harmonic_posint; double *m_glogs_third_harmonic_posfrac; double *m_glogs_third_harmonic; - size_t *m_glogs_fifth_harmonic_posint; + int *m_glogs_fifth_harmonic_posint; double *m_glogs_fifth_harmonic_posfrac; double *m_glogs_fifth_harmonic; double *m_glogs_f0_preference_weights;
--- a/FChTransformUtils.cpp Tue Oct 02 13:17:19 2018 +0100 +++ b/FChTransformUtils.cpp Tue Oct 02 13:21:15 2018 +0100 @@ -19,20 +19,20 @@ #include "FChTransformUtils.h" #include <math.h> -void cumtrapz(const double *x, const double *y, size_t N, double *accum) +void cumtrapz(const double *x, const double *y, int N, double *accum) /*Trapezoidal Integrator: 1/2(b-a)(F(a)+F(b))*/ { accum[0]=0.0; - for (size_t i = 1; i < N; i++) { + for (int i = 1; i < N; i++) { accum[i]=accum[i-1]+0.5*(x[i]-x[i-1])*(y[i]+y[i-1]); } } -void interp1(const double *x1, const double *y1, size_t N1, const double *x2, double *y2, size_t N2){ +void interp1(const double *x1, const double *y1, int N1, const double *x2, double *y2, int N2){ /*1-D linear interpolation*/ - for (size_t i = 0; i < N2; i++) { + for (int i = 0; i < N2; i++) { /*Smaller or equal than the smallest, or larger or equal than the largest.*/ if ( x2[i] <= x1[0] ) { y2[i] = y1[0]; @@ -40,11 +40,10 @@ y2[i] = y1[N1-1]; } else { /*Search every value of x2 in x1*/ - size_t j = 1; - size_t salir = 0; + int j = 1; + int salir = 0; while ((j<N1)&&(!salir)) { if ( x2[i] <= x1[j] ) { - //y2[i] = ( x2[i]*( y1[j] - y1[j-1] ) + x1[j]*y1[j-1] - x1[j-1]*y1[j] ) / ( x1[j] - x1[j-1] ); y2[i] = y1[j-1] + ( ( y1[j] - y1[j-1] )*(x2[i] - x1[j-1] ) )/ ( x1[j] - x1[j-1] ); salir = 1; } // if @@ -55,23 +54,23 @@ } -void interp1q(const double *y1, const size_t *x2_int, const double *x2_frac, double *y2, size_t N2){ +void interp1q(const double *y1, const int *x2_int, const double *x2_frac, double *y2, int N2){ - for(size_t i=0;i<N2;i++){ + for(int i=0;i<N2;i++){ y2[i] = y1[x2_int[i]]*(1.0-x2_frac[i])+y1[x2_int[i]+1]*x2_frac[i]; } // for } -void hanning_window(double *p_window, size_t n, bool normalize) { +void hanning_window(double *p_window, int n, bool normalize) { double accum=0; - for (size_t i = 0; i < n; i++) { + for (int i = 0; i < n; i++) { p_window[i] = 0.5*(1.0-cos(2*M_PI*(double)(i+1)/((double)n+1.0))); accum += p_window[i]; } if (normalize) { - for (size_t i = 0; i < n; i++) { //window normalization + for (int i = 0; i < n; i++) { //window normalization p_window[i] = p_window[i]/accum; } }
--- a/FChTransformUtils.h Tue Oct 02 13:17:19 2018 +0100 +++ b/FChTransformUtils.h Tue Oct 02 13:21:15 2018 +0100 @@ -17,10 +17,10 @@ #include <string.h> -void interp1(const double *x1,const double *y1, size_t N1, const double *x2, double *y2, size_t N2); +void interp1(const double *x1,const double *y1, int N1, const double *x2, double *y2, int N2); -void interp1q(const double *y1, const size_t *x2_int, const double *x2_frac, double *y2, size_t N2); +void interp1q(const double *y1, const int *x2_int, const double *x2_frac, double *y2, int N2); -void cumtrapz(const double *x, const double *y, size_t N, double *accum); +void cumtrapz(const double *x, const double *y, int N, double *accum); -void hanning_window(double *p_window, size_t n, bool normalize); +void hanning_window(double *p_window, int n, bool normalize);