Skip to content

Accuracy of spatial metadata in ivas_omasa_enc_fx compared to the floating point equivalent

Basic info

  • Float reference:
  • Fixed point:

Bug description

Earlier it was found that McMASA parameter analysis had differences between fx and float (see issue #1584 (closed)). 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

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