Commit f314bb5e authored by Jiaquan Huo's avatar Jiaquan Huo
Browse files

Merge branch 'lfe-plc-precision' into 'main'

[non-be]#816: Double precision arithmetic in LFE fix

See merge request !1691
parents 80eaebd7 ffb2c80a
Loading
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -563,6 +563,10 @@ enum

#define INT_FS_12k8                         12800                                                                                                            /* internal sampling frequency                */
#define M                                   16                                                                                                               /* order of the LP filter @ 12.8kHz           */
#ifdef NONE_BE_FIX_816_LFE_PLC_FLOAT
#define MAX_LP_FILTER_ORDER                 20                                              /* Max order of an LP filter */
#endif

#define L_FRAME                             256                                                                                                              /* frame size at 12.8kHz                      */
#define NB_SUBFR                            4                                                                                                                /* number of subframes per frame              */
#define L_SUBFR                             ( L_FRAME / NB_SUBFR )                                                                                           /* subframe size                              */
+4 −0
Original line number Diff line number Diff line
@@ -1444,7 +1444,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

+5 −1
Original line number Diff line number Diff line
@@ -5496,7 +5496,11 @@ void ivas_lfe_dec(

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                     */
);
+21 −1
Original line number Diff line number Diff line
@@ -3129,6 +3129,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 };
#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,
@@ -3147,7 +3167,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
@@ -361,7 +361,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];

#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];
Loading