Commit 90df4655 authored by Dominik Weckbecker's avatar Dominik Weckbecker 💬
Browse files

add normalization tables for FM (with a factor of sqrt(2) as compared to MAXN)

parent d77535cb
Loading
Loading
Loading
Loading
+39 −29
Original line number Diff line number Diff line
@@ -35,23 +35,25 @@
#include "ivas_cnst.h"
#include "ambi_convert.h"

#define SQRT_3 1.7320508f
#define SQRT_5 2.2360679f
#define SQRT_7 2.64575131f

#define INV_SQRT_3 0.5773502f
#define INV_SQRT_5 0.4472135f
#define INV_SQRT_7 0.3779644f

#define TWO_OVER_SQRT_3 1.1547005f
#define SQRT_8_OVER_5   1.2649110f
#define SQRT_3_OVER_5   0.7745966f
#define SQRT_45_OVER_32 1.1858541f

#define INV_TWO_OVER_SQRT_3 0.8660254f
#define INV_SQRT_8_OVER_5   0.7905694f
#define INV_SQRT_3_OVER_5   1.2909944f
#define INV_SQRT_45_OVER_32 0.8432740f
#define SQRT_2_ 1.4142135f
#define SQRT_3_ 1.7320508f
#define SQRT_5_ 2.2360679f
#define SQRT_7_ 2.64575131f

#define INV_SQRT_2_  0.7071067f
#define INV_SQRT_3_  0.5773502f
#define INV_SQRT_5_  0.4472135f
#define INV_SQRT_7_  0.3779644f

#define TWO_OVER_SQRT_3_ 1.1547005f
#define SQRT_8_OVER_5_   1.2649110f
#define SQRT_3_OVER_5_   0.7745966f
#define SQRT_45_OVER_32_ 1.1858541f

#define INV_TWO_OVER_SQRT_3_ 0.8660254f
#define INV_SQRT_8_OVER_5_   0.7905694f
#define INV_SQRT_3_OVER_5_   1.2909944f
#define INV_SQRT_45_OVER_32_ 0.8432740f

#define AMBI_MAX_CHANNELS 16

@@ -60,27 +62,37 @@
   -------------------------------- */

static const float N3D_SN3D[AMBI_MAX_CHANNELS] = { 1.0f,
                                                   SQRT_3, SQRT_3, SQRT_3,
                                                   SQRT_5, SQRT_5, SQRT_5, SQRT_5, SQRT_5,
                                                   SQRT_7, SQRT_7, SQRT_7, SQRT_7, SQRT_7, SQRT_7, SQRT_7
                                                   SQRT_3_, SQRT_3_, SQRT_3_,
                                                   SQRT_5_, SQRT_5_, SQRT_5_, SQRT_5_, SQRT_5_,
                                                   SQRT_7_, SQRT_7_, SQRT_7_, SQRT_7_, SQRT_7_, SQRT_7_, SQRT_7_
};

static const float SN3D_N3D[AMBI_MAX_CHANNELS] = { 1.0f,
                                                   INV_SQRT_3, INV_SQRT_3, INV_SQRT_3,
                                                   INV_SQRT_5, INV_SQRT_5, INV_SQRT_5, INV_SQRT_5, INV_SQRT_5,
                                                   INV_SQRT_7, INV_SQRT_7, INV_SQRT_7, INV_SQRT_7, INV_SQRT_7, INV_SQRT_7, INV_SQRT_7 
                                                   INV_SQRT_3_, INV_SQRT_3_, INV_SQRT_3_,
                                                   INV_SQRT_5_, INV_SQRT_5_, INV_SQRT_5_, INV_SQRT_5_, INV_SQRT_5_,
                                                   INV_SQRT_7_, INV_SQRT_7_, INV_SQRT_7_, INV_SQRT_7_, INV_SQRT_7_, INV_SQRT_7_, INV_SQRT_7_ 
};

static const float MAXN_SN3D[AMBI_MAX_CHANNELS] = { 1.0f,
                                                    1.0f, 1.0f, 1.0f,
                                                    TWO_OVER_SQRT_3, TWO_OVER_SQRT_3, 1, TWO_OVER_SQRT_3, TWO_OVER_SQRT_3,
                                                    SQRT_8_OVER_5, SQRT_3_OVER_5, SQRT_45_OVER_32, 1, SQRT_45_OVER_32, SQRT_3_OVER_5, SQRT_8_OVER_5 
                                                    TWO_OVER_SQRT_3_, TWO_OVER_SQRT_3_, 1, TWO_OVER_SQRT_3_, TWO_OVER_SQRT_3_,
                                                    SQRT_8_OVER_5_, SQRT_3_OVER_5_, SQRT_45_OVER_32_, 1, SQRT_45_OVER_32_, SQRT_3_OVER_5_, SQRT_8_OVER_5_ 
};

static const float SN3D_MAXN[AMBI_MAX_CHANNELS] = { 1.0f,
                                                    1.0f, 1.0f, 1.0f,
                                                    INV_TWO_OVER_SQRT_3, INV_TWO_OVER_SQRT_3, 1.0f, INV_TWO_OVER_SQRT_3, INV_TWO_OVER_SQRT_3,
                                                    INV_SQRT_8_OVER_5, INV_SQRT_3_OVER_5, INV_SQRT_45_OVER_32, 1.0f, INV_SQRT_45_OVER_32, INV_SQRT_3_OVER_5, INV_SQRT_8_OVER_5 };
                                                    INV_TWO_OVER_SQRT_3_, INV_TWO_OVER_SQRT_3_, 1.0f, INV_TWO_OVER_SQRT_3_, INV_TWO_OVER_SQRT_3_,
                                                    INV_SQRT_8_OVER_5_, INV_SQRT_3_OVER_5_, INV_SQRT_45_OVER_32_, 1.0f, INV_SQRT_45_OVER_32_, INV_SQRT_3_OVER_5_, INV_SQRT_8_OVER_5_ };

static const float FM_SN3D[AMBI_MAX_CHANNELS] = { SQRT_2_,
                                                  1.0f, 1.0f, 1.0f,
                                                  TWO_OVER_SQRT_3_, TWO_OVER_SQRT_3_, 1, TWO_OVER_SQRT_3_, TWO_OVER_SQRT_3_,
                                                  SQRT_8_OVER_5_, SQRT_3_OVER_5_, SQRT_45_OVER_32_, 1, SQRT_45_OVER_32_, SQRT_3_OVER_5_, SQRT_8_OVER_5_ };

static const float FM_MAXN[AMBI_MAX_CHANNELS] = { INV_SQRT_2,
                                                  1.0f, 1.0f, 1.0f,
                                                  INV_TWO_OVER_SQRT_3_, INV_TWO_OVER_SQRT_3_, 1.0f, INV_TWO_OVER_SQRT_3_, INV_TWO_OVER_SQRT_3_,
                                                  INV_SQRT_8_OVER_5_, INV_SQRT_3_OVER_5_, INV_SQRT_45_OVER_32_, 1.0f, INV_SQRT_45_OVER_32_, INV_SQRT_3_OVER_5_, INV_SQRT_8_OVER_5_ };

/* ----------------------------
    channel re-ordering tables
@@ -110,12 +122,10 @@ static const int16_t REORDER_ACN_SID[AMBI_MAX_CHANNELS] = { 0,
                                                            15, 9, 14, 10, 13, 11, 12 
};


/* ----------------------------------
    API functions for the conversion
   ---------------------------------- */


int16_t convert_ambi_format( float in[][L_FRAME48k], float out[][L_FRAME48k], int16_t order, AMBI_FMT in_format, AMBI_FMT out_format )
{
    assert( order <= 3 );
+5 −4
Original line number Diff line number Diff line
@@ -46,15 +46,16 @@ typedef enum
typedef enum
{
    AMBI_NORM_SN3D = 0,
    AMBI_NORM_N3D = 1,
    AMBI_NORM_MAXN = 2
    AMBI_NORM_N3D,
    AMBI_NORM_MAXN,
	AMBI_NORM_FM
} AMBI_CHANNEL_NORM;

typedef enum
{
	AMBI_CHANNEL_ORDER_ACN = 0,
    AMBI_CHANNEL_ORDER_FM = 1,
    AMBI_CHANNEL_ORDER_SID = 2
    AMBI_CHANNEL_ORDER_FM,
    AMBI_CHANNEL_ORDER_SID
} AMBI_CHANNEL_ORDER;

int16_t convert_ambi_format(float in[][L_FRAME48k], float out[][L_FRAME48k], int16_t order, AMBI_FMT in_format, AMBI_FMT out_format);