Accuracy of spatial metadata in ivas_omasa_enc_fx compared to the floating point equivalent
# Basic info - Float reference: - Encoder (float): f40fa4679af7066ad8f554907305761b55a6cc63 - Fixed point: - Decoder (fixed): ced61be1369cf22e693758beb6184d862a585d38 # Bug description Earlier it was found that McMASA parameter analysis had differences between fx and float (see issue #1584). Now the same inspection was done to the OMASA parameter analysis. Similar differences were found. These variables were inspected: ``` Word32 azimuth_fx[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; /* Q22 */ Word32 elevation_fx[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; /* Q22 */ Word32 energy_ratio_fx[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; /* Q30 */ ``` and corresponding float variants. The following command was used `-ism_masa 4 2 ltv48_OMASA_4ISM_2TC_ISM1.csv ltv48_OMASA_4ISM_2TC_ISM2.csv ltv48_OMASA_4ISM_2TC_ISM3.csv ltv48_OMASA_4ISM_2TC_ISM4.csv ltv48_OMASA_4ISM_2TC.met 24400 48 ltv48_OMASA_4ISM_2TC.wav data.bts` The following differences between fx and float were found: ![omasa_fx_vs_float](/uploads/665c222bc0598fedd187b7bdb903f16a/omasa_fx_vs_float.png) In this plot, negative difference is red and positive difference is green. Ideally, the plots should be completely black. However, there are differences clearly noticeable in the figure. # Ways to inspect data The comparison was done by dumping for basop (after calling ivas_omasa_param_est_enc_fx in `ivas_omasa_enc_fx`) with: ``` { static FILE* dumpFile = NULL; if (dumpFile == NULL) { dumpFile = fopen("./meta/omasa_fx_dump.bin", "wb"); } for (i = 0; i < MAX_PARAM_SPATIAL_SUBFRAMES; I++) { fwrite(hOMasaMeta->directional_meta[0].azimuth_fx[i], sizeof(Word32), MASA_FREQUENCY_BANDS, dumpFile); fwrite(hOMasaMeta->directional_meta[0].elevation_fx[i], sizeof(Word32), MASA_FREQUENCY_BANDS, dumpFile); fwrite(hOMasaMeta->directional_meta[0].energy_ratio_fx[i], sizeof(Word32), MASA_FREQUENCY_BANDS, dumpFile); fwrite(hOMasaMeta->directional_meta[0].spread_coherence_fx[i], sizeof(Word32), MASA_FREQUENCY_BANDS, dumpFile); fwrite(hOMasaMeta->common_meta.surround_coherence_fx[i], sizeof(Word32), MASA_FREQUENCY_BANDS, dumpFile); } } ``` and for float (after calling ivas_omasa_param_est_enc in `ivas_omasa_enc`) with ``` { static FILE* dumpFile = NULL; if (dumpFile == NULL) { dumpFile = fopen("./meta/omasa_float_dump.bin", "wb"); } for (i = 0; i < MAX_PARAM_SPATIAL_SUBFRAMES; I++) { fwrite(hOMasaMeta->directional_meta[0].azimuth[i], sizeof(Word32), MASA_FREQUENCY_BANDS, dumpFile); fwrite(hOMasaMeta->directional_meta[0].elevation[i], sizeof(Word32), MASA_FREQUENCY_BANDS, dumpFile); fwrite(hOMasaMeta->directional_meta[0].energy_ratio[i], sizeof(Word32), MASA_FREQUENCY_BANDS, dumpFile); fwrite(hOMasaMeta->directional_meta[0].spread_coherence[i], sizeof(Word32), MASA_FREQUENCY_BANDS, dumpFile); fwrite(hOMasaMeta->common_meta.surround_coherence[i], sizeof(Word32), MASA_FREQUENCY_BANDS, dumpFile); } } ``` and my Matlab script for comparison (and plotting) is here: [processTwoOMASAdumps.m](/uploads/4aea33edaca1ee41474562313105f622/processTwoOMASAdumps.m)
issue