Loading lib_dec/ivas_lfe_plc.c +72 −1 Original line number Diff line number Diff line Loading @@ -64,7 +64,7 @@ #define EPS_STOP 1e-5 #endif #if 0 #ifndef NONE_BE_FIX_816_LFE_PLC_FLOAT /*------------------------------------------------------------------------------------------* * Static function declarations Loading Loading @@ -290,6 +290,77 @@ static int16_t lfeplc_lev_dur( return ( flag ); } #else /*---------------------------------------------------------------------* * lfeplc_lev_dur() * * Wiener-Levinson-Durbin algorithm to compute LP parameters from the autocorrelations * of input signal *---------------------------------------------------------------------*/ /*! r: stability flag */ static int16_t lfeplc_lev_dur( float *a_out, /* o : LP coefficients (a[0] = 1.0) */ const float *r, /* i : vector of autocorrelations */ const int16_t m /* i : order of LP filter */ ) { int16_t i, j, l; float buf[TCXLTP_LTP_ORDER]; float *rc; /* reflection coefficients 0,...,m-1 */ float s, at, err; float a[LFE_PLC_LPCORD + 1] = { 0.0f }; set_f( a_out, 0.f, LFE_PLC_LPCORD + 1); rc = &buf[0]; a[0] = 1.f; err = r[0]; a_out[0] = a[0]; rc[0] = ( -r[1] ) / r[0]; s = r[1]; a[1] = rc[0]; a_out[1] = a[1]; err += rc[0] * s; s += r[2] * a[1]; rc[1] = ( -s ) / err; i = 2; while ( i < m ) { for ( j = 1; j <= i / 2; j++ ) { l = i - j; at = a[j] + rc[i - 1] * a[l]; a[l] += rc[i - 1] * a[j]; a[j] = at; } a[i] = rc[i - 1]; err += rc[i - 1] * s; s = 0.f; i++; for ( j = 0; j < i; j++ ) { s += r[i - j] * a[j]; } rc[i - 1] = ( -s ) / err; if ( fabsf( rc[i - 1] ) > 0.99945f ) { return 1; } else { for ( j = 0; j <= m; j++ ) { a_out[j] = a[j]; } } } return 0; } #endif #ifndef NONE_BE_FIX_816_LFE_PLC_FLOAT /*-------------------------------------------------------------------* Loading Loading
lib_dec/ivas_lfe_plc.c +72 −1 Original line number Diff line number Diff line Loading @@ -64,7 +64,7 @@ #define EPS_STOP 1e-5 #endif #if 0 #ifndef NONE_BE_FIX_816_LFE_PLC_FLOAT /*------------------------------------------------------------------------------------------* * Static function declarations Loading Loading @@ -290,6 +290,77 @@ static int16_t lfeplc_lev_dur( return ( flag ); } #else /*---------------------------------------------------------------------* * lfeplc_lev_dur() * * Wiener-Levinson-Durbin algorithm to compute LP parameters from the autocorrelations * of input signal *---------------------------------------------------------------------*/ /*! r: stability flag */ static int16_t lfeplc_lev_dur( float *a_out, /* o : LP coefficients (a[0] = 1.0) */ const float *r, /* i : vector of autocorrelations */ const int16_t m /* i : order of LP filter */ ) { int16_t i, j, l; float buf[TCXLTP_LTP_ORDER]; float *rc; /* reflection coefficients 0,...,m-1 */ float s, at, err; float a[LFE_PLC_LPCORD + 1] = { 0.0f }; set_f( a_out, 0.f, LFE_PLC_LPCORD + 1); rc = &buf[0]; a[0] = 1.f; err = r[0]; a_out[0] = a[0]; rc[0] = ( -r[1] ) / r[0]; s = r[1]; a[1] = rc[0]; a_out[1] = a[1]; err += rc[0] * s; s += r[2] * a[1]; rc[1] = ( -s ) / err; i = 2; while ( i < m ) { for ( j = 1; j <= i / 2; j++ ) { l = i - j; at = a[j] + rc[i - 1] * a[l]; a[l] += rc[i - 1] * a[j]; a[j] = at; } a[i] = rc[i - 1]; err += rc[i - 1] * s; s = 0.f; i++; for ( j = 0; j < i; j++ ) { s += r[i - j] * a[j]; } rc[i - 1] = ( -s ) / err; if ( fabsf( rc[i - 1] ) > 0.99945f ) { return 1; } else { for ( j = 0; j <= m; j++ ) { a_out[j] = a[j]; } } } return 0; } #endif #ifndef NONE_BE_FIX_816_LFE_PLC_FLOAT /*-------------------------------------------------------------------* Loading