Skip to content

Wide range of values for observed for reference_power resulting in precision loss and high MLDs in ivas_dirac_dec_render processing

Test case: ltv-MASA 2TC at 96 kbps, 48kHz in, 48kHz out, MONO out

In the above test case, at around 7712 frame, the values inside ivas_dirac_dec_render processing for reference_power and reference_power_smooth buffers are having quite a large range with values ranging from 2.xx to 10^11 order. Since these buffers are in Word32, the Q factor was coming out as Q(-11) which was unable to handle these smaller values. Word64 implementation also doesn’t seem to be feasible because there are some multiplication and division operations happening for its calculation and usage down the line could not be accommodated in Word64. For further processing, reference_power_smooth_buffers are used to calculate gains which are modifying cldfb related buffers inside ivas_dirac_dec_output_synthesis_process_subframe_psd_ls_fx. So, due to this precision loss, the real and imaginary buffers are getting calculated incorrectly further leading to deviation in output and high MLDs.

Float code dumps:

Name Value Type
reference_power_smooth,60 0x00fb0ed8 {1.12123781e+11, 2.13012419e+10, 3.20389120e+09, 4.32607437e+09, 1.43548698e+09, 1.38198003e+09, ...} float[60]
[0] 1.12E+11 float
[1] 2.13E+10 float
[2] 3.20E+09 float
[3] 4.33E+09 float
[4] 1.44E+09 float
[5] 1.38E+09 float
[6] 3.44E+09 float
[7] 835644864 float
[8] 78562392 float
[9] 126561176 float
[10] 40910900 float
[11] 25921034 float
[12] 33086312 float
[13] 29657100 float
[14] 18425232 float
[15] 12699304 float
[16] 8861048 float
[17] 13667408 float
[18] 12157381 float
[19] 3789297.25 float
[20] 9753415 float
[21] 8467907 float
[22] 3889820 float
[23] 8308914.5 float
[24] 16013249 float
[25] 3653945.5 float
[26] 1804171.13 float
[27] 604622.125 float
[28] 924181.375 float
[29] 704615.875 float
[30] 2040965.25 float
[31] 1561034.75 float
[32] 4265408 float
[33] 5864695 float
[34] 2893515.25 float
[35] 1526915.75 float
[36] 3238846.5 float
[37] 1193969.5 float
[38] 1449454 float
[39] 2964750.5 float
[40] 2883687.75 float
[41] 1898733.63 float
[42] 2171816.25 float
[43] 2113912 float
[44] 1890157 float
[45] 486523.563 float
[46] 282687.844 float
[47] 903418.125 float
[48] 241957 float
[49] 362024.063 float
[50] 17602.918 float
[51] 5.04815102 float
[52] 5.02293968 float
[53] 3.54574561 float
[54] 4.74774218 float
[55] 4.09441185 float
[56] 3.72185445 float
[57] 3.90770555 float
[58] 4.39547396 float
[59] 3.69693184 float

Fixed code dumps:

Name Value Type
reference_power_smooth_fx,60 0x013c10c8 {54692936, 10400828, 1563414, 2112119, 701430, 674762, 1680343, 407737, 38359, 61674, 20040, ...} int[60]
[0] 54692936 int
[1] 10400828 int
[2] 1563414 int
[3] 2112119 int
[4] 701430 int
[5] 674762 int
[6] 1680343 int
[7] 407737 int
[8] 38359 int
[9] 61674 int
[10] 20040 int
[11] 12791 int
[12] 16132 int
[13] 14600 int
[14] 9001 int
[15] 6307 int
[16] 4406 int
[17] 6835 int
[18] 5965 int
[19] 1837 int
[20] 4867 int
[21] 4131 int
[22] 1881 int
[23] 4057 int
[24] 7805 int
[25] 1740 int
[26] 861 int
[27] 307 int
[28] 468 int
[29] 351 int
[30] 1014 int
[31] 752 int
[32] 2103 int
[33] 2877 int
[34] 1424 int
[35] 747 int
[36] 1616 int
[37] 606 int
[38] 703 int
[39] 1451 int
[40] 1411 int
[41] 943 int
[42] 1054 int
[43] 1051 int
[44] 935 int
[45] 240 int
[46] 142 int
[47] 448 int
[48] 108 int
[49] 179 int
[50] 9 int
[51] 0 int
[52] 0 int
[53] 0 int
[54] 0 int
[55] 0 int
[56] 0 int
[57] 0 int
[58] 2 int
[59] 2 int