From badeade26f637d9f3d1e5375fe9979b929bd740f Mon Sep 17 00:00:00 2001 From: Lauros Pajunen Date: Fri, 24 Feb 2023 14:07:50 +0200 Subject: [PATCH 1/2] Implementation of contribution 30 - adaptive regularization for param-bin --- lib_com/options.h | 2 + lib_rend/ivas_dirac_dec_binaural_functions.c | 95 ++++++++++++++++++++ lib_rend/ivas_stat_rend.h | 3 + 3 files changed, 100 insertions(+) diff --git a/lib_com/options.h b/lib_com/options.h index 9a6a9d4c5b..2efc55d1fc 100755 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -158,6 +158,8 @@ #define SMOOTH_WITH_TRANS_DET #endif +#define NOKIA_PARAMBIN_REQULARIZATION /* Nokia: Contribution - Configured reqularization factor for parametric binauralizer. */ + /* ################## End DEVELOPMENT switches ######################### */ /* clang-format on */ #endif diff --git a/lib_rend/ivas_dirac_dec_binaural_functions.c b/lib_rend/ivas_dirac_dec_binaural_functions.c index 020dd27cfa..0bfa43a1c3 100644 --- a/lib_rend/ivas_dirac_dec_binaural_functions.c +++ b/lib_rend/ivas_dirac_dec_binaural_functions.c @@ -80,6 +80,9 @@ static void matrixMul( float Are[BINAURAL_CHANNELS][BINAURAL_CHANNELS], float Ai static void matrixTransp2Mul( float Are[BINAURAL_CHANNELS][BINAURAL_CHANNELS], float Aim[BINAURAL_CHANNELS][BINAURAL_CHANNELS], float Bre[BINAURAL_CHANNELS][BINAURAL_CHANNELS], float Bim[BINAURAL_CHANNELS][BINAURAL_CHANNELS], float outRe[BINAURAL_CHANNELS][BINAURAL_CHANNELS], float outIm[BINAURAL_CHANNELS][BINAURAL_CHANNELS] ); +#ifdef NOKIA_PARAMBIN_REQULARIZATION +static float configure_reqularization_factor( const IVAS_FORMAT ivas_format, const int32_t ivas_brate ); +#endif /*------------------------------------------------------------------------- * ivas_dirac_dec_init_binaural_data() @@ -283,6 +286,10 @@ ivas_error ivas_dirac_dec_init_binaural_data( ivas_td_decorr_dec_close( &( hBinaural->hTdDecorr ) ); } +#ifdef NOKIA_PARAMBIN_REQULARIZATION + hBinaural->reqularizationFactor = configure_reqularization_factor( st_ivas->ivas_format, st_ivas->hDecoderConfig->ivas_total_brate ); +#endif + st_ivas->hDiracDecBin = hBinaural; return IVAS_ERR_OK; @@ -1079,11 +1086,19 @@ static void ivas_dirac_dec_binaural_determine_processing_matrices( CrEneR = 0.0f; /* Formulate main processing matrix M */ +#ifdef NOKIA_PARAMBIN_REQULARIZATION + formulate2x2MixingMatrix( h->ChEne[0][bin], h->ChEne[1][bin], + h->ChCrossRe[bin], h->ChCrossIm[bin], + h->ChEneOut[0][bin], h->ChEneOut[1][bin], + h->ChCrossReOut[bin], h->ChCrossImOut[bin], + prototypeMtx, Mre, Mim, h->reqularizationFactor ); +#else formulate2x2MixingMatrix( h->ChEne[0][bin], h->ChEne[1][bin], h->ChCrossRe[bin], h->ChCrossIm[bin], h->ChEneOut[0][bin], h->ChEneOut[1][bin], h->ChCrossReOut[bin], h->ChCrossImOut[bin], prototypeMtx, Mre, Mim, 1.0f ); +#endif /* Load estimated covariance matrix to the [2][2] matrix form */ CxRe[0][0] = h->ChEne[0][bin]; @@ -1869,3 +1884,83 @@ static void hrtfShGetHrtf( return; } + + +#ifdef NOKIA_PARAMBIN_REQULARIZATION +/*------------------------------------------------------------------------- + * configure_reqularization_factor() + * + * Configure regularization factor for the mixing matrix generation of the + * parametric binauralizer using IVAS codec format and current bitrate. + *------------------------------------------------------------------------*/ + +/*! r: Configured reqularization factor value to be set. */ +static float configure_reqularization_factor( + const IVAS_FORMAT ivas_format, /* i: IVAS codec format in use */ + const int32_t ivas_brate ) /* i: Current IVAS bitrate */ +{ + float reqularizationFactor; + reqularizationFactor = 1.0f; /* Default value */ + + if ( ivas_format == MASA_FORMAT ) + { + if ( ivas_brate >= IVAS_256k ) + { + reqularizationFactor = 0.2f; + } + else if ( ivas_brate == IVAS_192k ) + { + reqularizationFactor = 0.3f; + } + else if ( ivas_brate == IVAS_160k ) + { + reqularizationFactor = 0.4f; + } + else if ( ivas_brate == IVAS_128k ) + { + reqularizationFactor = 0.5f; + } + else if ( ivas_brate == IVAS_96k ) + { + reqularizationFactor = 0.6f; + } + else if ( ivas_brate >= IVAS_64k ) + { + reqularizationFactor = 0.8f; + } + else + { + reqularizationFactor = 1.0f; + } + } + + if ( ivas_format == MC_FORMAT ) /* This is always McMASA for parametric binauralizer. */ + { + if ( ivas_brate >= IVAS_96k ) + { + reqularizationFactor = 0.3f; + } + else if ( ivas_brate >= IVAS_80k ) + { + reqularizationFactor = 0.5f; + } + else if ( ivas_brate >= IVAS_64k ) + { + reqularizationFactor = 0.7f; + } + else if ( ivas_brate >= IVAS_48k ) + { + reqularizationFactor = 0.8f; + } + else + { + reqularizationFactor = 1.0f; + } + } + + /* For SBA and parametric ISM, currently in default value of 1.0f. */ + + return reqularizationFactor; +} +#endif + diff --git a/lib_rend/ivas_stat_rend.h b/lib_rend/ivas_stat_rend.h index 586a43c4f8..ff431cb504 100644 --- a/lib_rend/ivas_stat_rend.h +++ b/lib_rend/ivas_stat_rend.h @@ -140,6 +140,9 @@ typedef struct ivas_dirac_dec_binaural_data_structure uint16_t useSubframeMode; /* 0 = process in 20 ms frames, 1 = process in 5 ms subframes */ uint16_t useTdDecorr; ivas_td_decorr_state_t *hTdDecorr; +#ifdef NOKIA_PARAMBIN_REQULARIZATION + float reqularizationFactor; +#endif } DIRAC_DEC_BIN_DATA, *DIRAC_DEC_BIN_HANDLE; -- GitLab From 07a7b6986623df5250e16f9132925b87b70aee1c Mon Sep 17 00:00:00 2001 From: Tapani Pihlajakuja Date: Tue, 4 Apr 2023 14:04:48 +0300 Subject: [PATCH 2/2] Apply clang format patch. --- lib_rend/ivas_dirac_dec_binaural_functions.c | 1 - 1 file changed, 1 deletion(-) diff --git a/lib_rend/ivas_dirac_dec_binaural_functions.c b/lib_rend/ivas_dirac_dec_binaural_functions.c index 336083e9af..b27462d649 100644 --- a/lib_rend/ivas_dirac_dec_binaural_functions.c +++ b/lib_rend/ivas_dirac_dec_binaural_functions.c @@ -1948,4 +1948,3 @@ static float configure_reqularization_factor( return reqularizationFactor; } #endif - -- GitLab