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 |