Commit 15e51883 authored by janssontoftg's avatar janssontoftg
Browse files

Merge branch 'ericsson/td-renderer-modeling-matlab' into 'main'

[non-BE][Renderer non-BE][split-non-BE] Add MATLAB TD object rendering modeling tool

See merge request !858
parents d53baff4 7d1de653
Loading
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -222,6 +222,7 @@
#define FIX_647_SILENT_W_PARAMBIN                       /* Nokia: Issue #647: Fix silent W SH inputs in parametric binauralizer */

#define MASA_AND_OBJECTS                                /* Nokia: Combination of MASA and objects */
#define TD_REND_TUNING_RENAME                           /* Eri: Tuning of TD renderer model as part of contribution 25 and renaming for default HRIR set */

#define FIX_SBA_VANISHING_RESIDUAL                     /*Dlb : Fix for vanishing residual cases when W channel is 0*/
#define FIX_527_SBA_MONO_INPUT                          /* Dlb : Fix for mono content in a HOA input format */
+85 −0
Original line number Diff line number Diff line
@@ -393,6 +393,32 @@ static ivas_error DefaultBSplineModel(
    /* int16_t parameters */
    model->UseItdModel = 1;
    model->SplineDegree = 4;
#ifdef TD_REND_TUNING_RENAME
    model->elevDim2 = 17;
    model->elevDim3 = 15;
    model->AlphaN = 470;
    model->num_unique_azim_splines = 1;
    model->elevSegSamples = 4;
    model->elevBsLen[0] = 5;
    model->elevBsLen[1] = 9;
    model->elevBsLen[2] = 13;
    model->elevBsLen[3] = 9;
    model->elevBsStart[0] = 0;
    model->elevBsStart[1] = 5;
    model->elevBsStart[2] = 14;
    model->elevBsStart[3] = 27;

    model->azimDim2 = defaultHRIR_rom_azimDim2;
    model->azimDim3 = defaultHRIR_rom_azimDim3;
    model->azim_start_idx = defaultHRIR_rom_azim_start_idx;
    model->azimSegSamples = defaultHRIR_rom_azimSegSamples;
    model->azimShapeIdx = defaultHRIR_rom_azimShapeIdx;
    model->azimShapeSampFactor = defaultHRIR_rom_azimShapeSampFactor;

    /* float parameters */
    model->elevKSeq = (const float *) defaultHRIR_rom_elevKSeq;
    model->elevBsShape = (const float *) defaultHRIR_rom_elevBsShape;
#else
    model->elevDim2 = 20;
    model->elevDim3 = 18;
    model->AlphaN = 578;
@@ -417,13 +443,18 @@ static ivas_error DefaultBSplineModel(
    /* float parameters */
    model->elevKSeq = (const float *) orange53_rom_elevKSeq;
    model->elevBsShape = (const float *) orange53_rom_elevBsShape;
#endif

    if ( ( model->azimBsShape = (const float **) malloc( model->num_unique_azim_splines * sizeof( float * ) ) ) == NULL )
    {
        return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Binaural TD renderer\n" ) );
    }

#ifdef TD_REND_TUNING_RENAME
    model->azimBsShape[0] = (const float *) defaultHRIR_rom_azimBsShape;
#else
    model->azimBsShape[0] = (const float *) orange53_rom_azimBsShape;
#endif
    if ( ( model->azimKSeq = (float **) malloc( 18 * sizeof( float * ) ) ) == NULL )
    {
        return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Binaural TD renderer\n" ) );
@@ -432,16 +463,30 @@ static ivas_error DefaultBSplineModel(
    {
        return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Binaural TD renderer\n" ) );
    }
#ifdef TD_REND_TUNING_RENAME
    if ( ( model->azimKSeq[model->elevDim3 - 1] = (float *) malloc( 2 * sizeof( float * ) ) ) == NULL )
#else
    if ( ( model->azimKSeq[17] = (float *) malloc( 2 * sizeof( float * ) ) ) == NULL )
#endif
    {
        return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Binaural TD renderer\n" ) );
    }
    model->azimKSeq[0][0] = 0.0f;
#ifdef TD_REND_TUNING_RENAME
    model->azimKSeq[model->elevDim3 - 1][0] = 0.0f;
#else
    model->azimKSeq[17][0] = 0.0f;
#endif
    model->azimKSeq[0][1] = 360.0f;
#ifdef TD_REND_TUNING_RENAME
    model->azimKSeq[model->elevDim3 - 1][1] = 360.0f;

    for ( i = 1; i < model->elevDim3 - 1; i++ )
#else
    model->azimKSeq[17][1] = 360.0f;

    for ( i = 1; i < 17; i++ )
#endif
    {
        if ( ( model->azimKSeq[i] = (float *) malloc( model->azimDim2[i] * sizeof( float * ) ) ) == NULL ) /* azimDim2[i] = 91, i=2..15 */
        {
@@ -449,17 +494,28 @@ static ivas_error DefaultBSplineModel(
        }
        for ( j = 0; j < model->azimDim2[i]; j++ )
        {
#ifdef TD_REND_TUNING_RENAME
            model->azimKSeq[i][j] = (float) defaultHRIR_rom_azimSegSamples[0] * j;
#else
            model->azimKSeq[i][j] = (float) orange53_rom_azimSegSamples[0] * j;
#endif
        }
    }

    switch ( output_Fs )
    {
        case 48000:
#ifdef TD_REND_TUNING_RENAME
            model->AlphaL = (const float *) defaultHRIR_rom_AlphaL48;
            model->AlphaR = (const float *) defaultHRIR_rom_AlphaR48;
            model->EL = (const float *) defaultHRIR_rom_EL48;
            model->ER = (const float *) defaultHRIR_rom_ER48;
#else
            model->AlphaL = (const float *) orange53_rom_AlphaL48;
            model->AlphaR = (const float *) orange53_rom_AlphaR48;
            model->EL = (const float *) orange53_rom_EL48;
            model->ER = (const float *) orange53_rom_ER48;
#endif
            model->K = 128;
            if ( HrFiltSet_p->ModelParams.UseItdModel )
            {
@@ -467,10 +523,17 @@ static ivas_error DefaultBSplineModel(
            }
            break;
        case 32000:
#ifdef TD_REND_TUNING_RENAME
            model->AlphaL = (const float *) defaultHRIR_rom_AlphaL32;
            model->AlphaR = (const float *) defaultHRIR_rom_AlphaR32;
            model->EL = (const float *) defaultHRIR_rom_EL32;
            model->ER = (const float *) defaultHRIR_rom_ER32;
#else
            model->AlphaL = (const float *) orange53_rom_AlphaL32;
            model->AlphaR = (const float *) orange53_rom_AlphaR32;
            model->EL = (const float *) orange53_rom_EL32;
            model->ER = (const float *) orange53_rom_ER32;
#endif
            model->K = 86;
            if ( HrFiltSet_p->ModelParams.UseItdModel )
            {
@@ -478,10 +541,17 @@ static ivas_error DefaultBSplineModel(
            }
            break;
        case 16000:
#ifdef TD_REND_TUNING_RENAME
            model->AlphaL = (const float *) defaultHRIR_rom_AlphaL16;
            model->AlphaR = (const float *) defaultHRIR_rom_AlphaR16;
            model->EL = (const float *) defaultHRIR_rom_EL16;
            model->ER = (const float *) defaultHRIR_rom_ER16;
#else
            model->AlphaL = (const float *) orange53_rom_AlphaL16;
            model->AlphaR = (const float *) orange53_rom_AlphaR16;
            model->EL = (const float *) orange53_rom_EL16;
            model->ER = (const float *) orange53_rom_ER16;
#endif
            model->K = 43;
            if ( HrFiltSet_p->ModelParams.UseItdModel )
            {
@@ -507,7 +577,11 @@ static ivas_error DefaultBSplineModel(
    modelITD->elevBsStart[2] = 11;
    modelITD->elevBsStart[3] = 21;

#ifdef TD_REND_TUNING_RENAME
    modelITD->elevKSeq = defaultHRIR_rom_ITD_elevKSeq;
#else
    modelITD->elevKSeq = model->elevKSeq;
#endif

    modelITD->azimBsLen[0] = 11;
    modelITD->azimBsLen[1] = 21;
@@ -520,6 +594,16 @@ static ivas_error DefaultBSplineModel(

    modelITD->azimSegSamples = 10;

#ifdef TD_REND_TUNING_RENAME
    modelITD->azimKSeq = defaultHRIR_rom_ITD_azimKSeq;
    modelITD->W = (const float *) defaultHRIR_rom_ITD_W;
    modelITD->azimBsShape = (const float *) defaultHRIR_rom_ITD_azimBsShape;
    modelITD->elevBsShape = (const float *) defaultHRIR_rom_ITD_elevBsShape;

    HRTF_model_precalc( model );

    HrFiltSet_p->latency_s = defaultHRIR_rom_latency_s;
#else
    modelITD->azimKSeq = orange53_rom_ITD_azimKSeq;
    modelITD->W = (const float *) orange53_rom_ITD_W;
    modelITD->azimBsShape = (const float *) orange53_rom_ITD_azimBsShape;
@@ -528,6 +612,7 @@ static ivas_error DefaultBSplineModel(
    HRTF_model_precalc( model );

    HrFiltSet_p->latency_s = orange53_rom_latency_s;
#endif
    HrFiltSet_p->SampleRate = output_Fs;
    HrFiltSet_p->FiltLength = HrFiltSet_p->ModelParams.K;

+6 −0
Original line number Diff line number Diff line
@@ -998,9 +998,15 @@ static void set_reverb_acoustic_data(
    }
    else
    {
#ifdef TD_REND_TUNING_RENAME
        pParams->pHrtf_avg_pwr_response_l_const = defaultHRIR_left_avg_power;
        pParams->pHrtf_avg_pwr_response_r_const = defaultHRIR_right_avg_power;
        pParams->pHrtf_inter_aural_coherence_const = defaultHRIR_coherence;
#else
        pParams->pHrtf_avg_pwr_response_l_const = orange53_left_avg_power;
        pParams->pHrtf_avg_pwr_response_r_const = orange53_right_avg_power;
        pParams->pHrtf_inter_aural_coherence_const = orange53_coherence;
#endif
    }

    /* interpolate input table data for T60 and DSR to the FFT filter grid */
+10116 −0

File changed.

Preview size limit exceeded, changes collapsed.

+31 −0
Original line number Diff line number Diff line
@@ -41,6 +41,36 @@
/*-------------------------------------------------------------------------
 * TD Binaural rendering related ROM tables
 *------------------------------------------------------------------------*/
#ifdef TD_REND_TUNING_RENAME
/* TD renderer default HRIR model */
extern const float defaultHRIR_rom_latency_s;
extern const int16_t defaultHRIR_rom_azimDim2[15];
extern const int16_t defaultHRIR_rom_azimDim3[15];
extern const int16_t defaultHRIR_rom_azim_start_idx[15];
extern const int16_t defaultHRIR_rom_azimSegSamples[1];
extern const int16_t defaultHRIR_rom_azimShapeIdx[15];
extern const int16_t defaultHRIR_rom_azimShapeSampFactor[15];
extern const float defaultHRIR_rom_elevKSeq[13];
extern const uint32_t defaultHRIR_rom_AlphaL48[470 * 128];
extern const uint32_t defaultHRIR_rom_AlphaR48[470 * 128];
extern const uint32_t defaultHRIR_rom_AlphaL32[470 * 86];
extern const uint32_t defaultHRIR_rom_AlphaR32[470 * 86];
extern const uint32_t defaultHRIR_rom_AlphaL16[470 * 43];
extern const uint32_t defaultHRIR_rom_AlphaR16[470 * 43];
extern const uint32_t defaultHRIR_rom_EL48[HRTF_MODEL_N_SECTIONS * 470];
extern const uint32_t defaultHRIR_rom_ER48[HRTF_MODEL_N_SECTIONS * 470];
extern const uint32_t defaultHRIR_rom_EL32[HRTF_MODEL_N_SECTIONS * 470];
extern const uint32_t defaultHRIR_rom_ER32[HRTF_MODEL_N_SECTIONS * 470];
extern const uint32_t defaultHRIR_rom_EL16[HRTF_MODEL_N_SECTIONS * 470];
extern const uint32_t defaultHRIR_rom_ER16[HRTF_MODEL_N_SECTIONS * 470];
extern const uint32_t defaultHRIR_rom_elevBsShape[36];
extern const uint32_t defaultHRIR_rom_azimBsShape[21];
extern const uint32_t defaultHRIR_rom_ITD_W[658];
extern const uint32_t defaultHRIR_rom_ITD_azimBsShape[84];
extern const float defaultHRIR_rom_ITD_azimKSeq[19];
extern const uint32_t defaultHRIR_rom_ITD_elevBsShape[28];
extern const float defaultHRIR_rom_ITD_elevKSeq[16];
#else
/* TD renderer HRTF default model Orange53 */
extern const float orange53_rom_latency_s;
extern const int16_t orange53_rom_azimDim2[18];
@@ -68,3 +98,4 @@ extern const uint32_t orange53_rom_ITD_W[658];
extern const uint32_t orange53_rom_ITD_azimBsShape[84];
extern const float orange53_rom_ITD_azimKSeq[19];
extern const uint32_t orange53_rom_ITD_elevBsShape[28];
#endif
Loading