diff options
author | Koen Vos <koen.vos@skype.net> | 2011-12-13 14:47:31 -0500 |
---|---|---|
committer | Jean-Marc Valin <jmvalin@jmvalin.ca> | 2011-12-13 14:47:31 -0500 |
commit | bf75c8ec4d0dded188bc7793de6da56c7ff0be1c (patch) | |
tree | c21bb05faf0a203b73e8f8aae90fc63dac27625d /silk/NLSF2A.c | |
parent | 6619a736376221f2782cecff55d051c3ecfc2ff7 (diff) | |
download | opus-bf75c8ec4d0dded188bc7793de6da56c7ff0be1c.tar.gz |
SILK fixes following last codec WG meeting
decoder:
- fixed incorrect scaling of filter states for the smallest quantization
step sizes
- NLSF2A now limits the prediction gain of LPC filters
encoder:
- increased damping of LTP coefficients in LTP analysis
- increased white noise fraction in noise shaping LPC analysis
- introduced maximum total prediction gain. Used by Burg's method to
exit early if prediction gain is exceeded. This improves packet
loss robustness and numerical robustness in Burg's method
- Prefiltered signal is now in int32 Q10 domain, from int16 Q0
- Increased max number of iterations in CBR gain control loop from 5 to 6
- Removed useless code from LTP scaling control
- Optimization: smarter LPC loop unrolling
- Switched default win32 compile mode to be floating-point
resampler:
- made resampler have constant delay of 0.75 ms; removed delay
compensation from silk code.
- removed obsolete table entries (~850 Bytes)
- increased downsampling filter order from 16 to 18/24/36 (depending on
frequency ratio)
- reoptimized filter coefficients
Diffstat (limited to 'silk/NLSF2A.c')
-rw-r--r-- | silk/NLSF2A.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/silk/NLSF2A.c b/silk/NLSF2A.c index f2a26935..b10c6901 100644 --- a/silk/NLSF2A.c +++ b/silk/NLSF2A.c @@ -83,7 +83,7 @@ void silk_NLSF2A( opus_int32 P[ SILK_MAX_ORDER_LPC / 2 + 1 ], Q[ SILK_MAX_ORDER_LPC / 2 + 1 ]; opus_int32 Ptmp, Qtmp, f_int, f_frac, cos_val, delta; opus_int32 a32_QA1[ SILK_MAX_ORDER_LPC ]; - opus_int32 maxabs, absval, idx=0, sc_Q16, invGain_Q30; + opus_int32 maxabs, absval, idx=0, sc_Q16; silk_assert( LSF_COS_TAB_SZ_FIX == 128 ); silk_assert( d==10||d==16 ); @@ -162,8 +162,8 @@ void silk_NLSF2A( } } - for( i = 1; i < MAX_LPC_STABILIZE_ITERATIONS; i++ ) { - if( silk_LPC_inverse_pred_gain( &invGain_Q30, a_Q12, d ) == 1 ) { + for( i = 1; i <= MAX_LPC_STABILIZE_ITERATIONS; i++ ) { + if( silk_LPC_inverse_pred_gain( a_Q12, d ) < SILK_FIX_CONST( 1.0 / MAX_PREDICTION_POWER_GAIN, 30 ) ) { /* Prediction coefficients are (too close to) unstable; apply bandwidth expansion */ /* on the unscaled coefficients, convert to Q12 and measure again */ silk_bwexpander_32( a32_QA1, d, 65536 - silk_SMULBB( 9 + i, i ) ); /* 10_Q16 = 0.00015 */ @@ -175,7 +175,7 @@ void silk_NLSF2A( } } - if( i == MAX_LPC_STABILIZE_ITERATIONS ) { + if( i > MAX_LPC_STABILIZE_ITERATIONS ) { /* Reached the last iteration, set coefficients to zero */ for( k = 0; k < d; k++ ) { a_Q12[ k ] = 0; |