Commit b2c8c341 authored by Sandesh Venkatesh's avatar Sandesh Venkatesh
Browse files

Fixed point changes for 3gpp issue 764 floating point changes

[x] LFE PLC functions changed from double to float precision.
Corresponding fixed point changes are implemented in this commit.
parent 3f246845
Loading
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -719,6 +719,9 @@ enum
#define L_SUBFR16k                          ( L_FRAME16k / NB_SUBFR )                       /* subframe size at 16kHz   */
#define L_HALFR16k                          ( 2 * L_SUBFR16k )                              /* half-frame size at 16kHz */

#ifdef NONE_BE_FIX_816_LFE_PLC_FLOAT
#define MAX_LP_FILTER_ORDER                 20                                              /* Max order of an LP filter */
#endif
#define L_INTERPOL2                         16                                              /* Length of filter for interpolation         */
#define L_INTERPOL                          ( L_INTERPOL2 + 1 )                             /* Length of filter for interpolation   */
#define TILT_FAC                            0.68f                                           /* tilt factor (denominator)                  */
@@ -773,6 +776,9 @@ enum

#define L_FILT_2OVER3                       12
#define L_FILT_2OVER3_LP                    3
#ifdef NONE_BE_FIX_816_LFE_PLC_FLOAT
#define MAX_LP_FILTER_ORDER                 20                                              /* Max order of an LP filter */
#endif

typedef enum
{
+4 −0
Original line number Diff line number Diff line
@@ -1592,7 +1592,11 @@ typedef enum
/* LFE PLC */
#define LFE_PLC_BUFLEN                          240
#define LFE_PLC_FS                              1600
#ifdef NONE_BE_FIX_816_LFE_PLC_FLOAT
#define L_FRAME_1k6                             ( LFE_PLC_FS / FRAMES_PER_SEC )
#else
#define L_FRAME_1k6                             ( 20 * LFE_PLC_FS / 1000 )
#endif
#define LFE_PLC_LENANA                          LFE_PLC_BUFLEN
#define LFE_PLC_FDEL                            300

+9 −6
Original line number Diff line number Diff line
@@ -7561,11 +7561,14 @@ void ivas_lfe_dec(
#endif
void ivas_lfe_tdplc(
    LFE_DEC_HANDLE hLFE, /* i/o: LFE decoder handle           */
    const float *prevsynth,                                     /* i  : previous frame synthesis                */
#ifdef NONE_BE_FIX_816_LFE_PLC_FLOAT
    float *prevsynth, /* i  : previous frame synthesis     */
#else
    double *prevsynth, /* i  : previous frame synthesis                */
#endif
    float *ytda,               /* o  : output time-domain buffer    */
    const int16_t output_frame /* i  : output frame length          */
);

void ivas_lfe_window_init(
    LFE_WINDOW_HANDLE hLFEWindow,                               /* i/o: LFE window handle                       */
    const int32_t sampling_rate,                                /* i  : sampling rate                           */
+21 −2
Original line number Diff line number Diff line
@@ -3530,7 +3530,26 @@ const int16_t ivas_lfe_min_shift_tbl[IVAS_LFE_NUM_COEFFS_IN_SUBGRP] = { 1, 0 };
const float ivas_lfe_lpf_delay[2] = { 0.00175f, 0.0035f };
const Word16 ivas_lfe_lpf_delay_Q15[2] = { 57, 114 };
#ifdef NONE_BE_FIX_816_LFE_PLC_FLOAT
const float hamm_lfe_plc[LFE_PLC_LENANA / 2] =
{
    0.08000000000000002f, 0.08015895227847719f, 0.08063569926248770f, 0.08142991147368656f, 0.08254104003450596f, 0.08396831704748331f, 0.08571075612595230f, 0.08776715307573196f,
    0.09013608672734141f, 0.09281591991816535f, 0.09580480062389246f, 0.09910066323844335f, 0.10270123000150438f, 0.10660401257268071f, 0.11080631375118072f, 0.11530522933984272f,
    0.12009765015221685f, 0.12518026416131367f, 0.13054955878853602f, 0.13620182333121073f, 0.14213315152704381f, 0.14833944425372619f, 0.15481641236182375f, 0.16155957963899570f,
    0.16856428590349043f, 0.17582569022478273f, 0.18333877426912554f, 0.19109834576770490f, 0.19909904210500018f, 0.20733533402487142f, 0.21580152945181053f, 0.22449177742471671f,
    0.23340007214047787f, 0.24252025710456171f, 0.25184602938575001f, 0.26137094397207467f, 0.27108841822494550f, 0.28099173642839037f, 0.29107405443026624f, 0.30132840437223085f,
    0.31174769950520753f, 0.32232473908701620f, 0.33305221335878232f, 0.34392270859668939f, 0.35492871223557998f, 0.36606261806086549f, 0.37731673146515798f, 0.38868327476598852f,
    0.40015439258093899f, 0.41172215725647360f, 0.42337857434671339f, 0.43511558813837425f, 0.44692508721804453f, 0.45879891007795709f, 0.47072885075638249f, 0.48270666450874267f,
    0.49472407350552849f, 0.50677277255308162f, 0.51884443483328757f, 0.53093071765821398f, 0.54302326823571601f, 0.55511372944202464f, 0.56719374559732838f, 0.57925496824035816f,
    0.59128906189798180f, 0.60328770984582458f, 0.61524261985593010f, 0.62714552992749328f, 0.63898821399670414f, 0.65076248762175315f, 0.66246021363907504f, 0.67407330778691554f,
    0.68559374429233988f, 0.69701356141781945f, 0.70832486696356345f, 0.71951984372179334f, 0.73059075487919101f, 0.74152994936378558f, 0.75232986713258543f, 0.76298304439630038f,
    0.77348211877754336f, 0.78381983439894576f, 0.79398904689767136f, 0.80398272836286389f, 0.81379397219261318f, 0.82341599786708708f, 0.83284215563452701f, 0.84206593110687011f,
    0.85108094976182280f, 0.85988098134827329f, 0.86845994419199846f, 0.87681190939868969f, 0.88493110495139349f, 0.89281191969953333f, 0.90044890723675941f, 0.90783678966494241f,
    0.91497046124171255f, 0.92184499190902180f, 0.92845563070029180f, 0.93479780902379184f, 0.94086714381997805f, 0.94665944059061280f, 0.95217069629756890f, 0.95739710212931617f,
    0.96233504613317988f, 0.96698111571154954f, 0.97133209998031445f, 0.97538499198789563f, 0.97913699079334116f, 0.98258550340204664f, 0.98572814655776630f, 0.98856274838967395f,
    0.99108734991333569f, 0.99330020638455863f, 0.99519978850517732f, 0.99678478347994692f, 0.99805409592381300f, 0.99900684861892730f, 0.99964238312089115f, 0.99996026021380402f
};
#else
const double d_hamm_lfe_plc[LFE_PLC_LENANA / 2] =
{
    0.08000000000000002, 0.08015895227847719, 0.08063569926248770, 0.08142991147368656, 0.08254104003450596, 0.08396831704748331, 0.08571075612595230, 0.08776715307573196,
@@ -3549,7 +3568,7 @@ const double d_hamm_lfe_plc[LFE_PLC_LENANA / 2] =
    0.96233504613317988, 0.96698111571154954, 0.97133209998031445, 0.97538499198789563, 0.97913699079334116, 0.98258550340204664, 0.98572814655776630, 0.98856274838967395,
    0.99108734991333569, 0.99330020638455863, 0.99519978850517732, 0.99678478347994692, 0.99805409592381300, 0.99900684861892730, 0.99964238312089115, 0.99996026021380402
};
#endif
/*------------------------------------------------------------------------------------------*
 * MDFT/iMDFT ROM tables
 *------------------------------------------------------------------------------------------*/
+4 −0
Original line number Diff line number Diff line
@@ -380,7 +380,11 @@ extern const int16_t ivas_lfe_min_shift_tbl[IVAS_LFE_NUM_COEFFS_IN_SUBGRP];
extern const ivas_lfe_freq_models ivas_str_lfe_freq_models;
extern const float ivas_lfe_lpf_delay[2];
extern const Word16 ivas_lfe_lpf_delay_Q15[2];
#ifdef NONE_BE_FIX_816_LFE_PLC_FLOAT
extern const float hamm_lfe_plc[LFE_PLC_LENANA / 2];
#else
extern const double d_hamm_lfe_plc[LFE_PLC_LENANA / 2];
#endif
extern const float ivas_sin_twiddle_480[IVAS_480_PT_LEN >> 1];
extern const float ivas_cos_twiddle_480[IVAS_480_PT_LEN >> 1];
extern const float ivas_sin_twiddle_320[IVAS_320_PT_LEN >> 1];
Loading