Audio: DRC: Change DRC to use lookup table based sine function

This change saves in TGL platform about 13 MPCS, from 83
to 70 MCPS. In MTL platform the saving is 12 MCPS, from 46
to 34 MCPS. The .bss RAM usage increases by 1 kB from
selecting CONFIG_MATH_LUT_SINE_FIXED.

Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com>
This commit is contained in:
Seppo Ingalsuo 2023-11-17 18:32:58 +02:00 committed by Liam Girdwood
parent 3a1cdedf01
commit 8d2fb32fa5
2 changed files with 4 additions and 4 deletions

View File

@ -3,6 +3,7 @@
config COMP_DRC
bool "Dynamic Range Compressor component"
select CORDIC_FIXED
select MATH_LUT_SINE_FIXED
select NUMBERS_NORM
select MATH_EXP
select COMP_BLOB

View File

@ -11,6 +11,7 @@
#include <stdint.h>
#include <sof/audio/format.h>
#include <sof/math/numbers.h>
#include <sof/math/lut_trig.h>
#include <sof/math/trig.h>
#include "drc_plat_conf.h"
@ -60,9 +61,8 @@ static inline int32_t drc_sin_fixed(int32_t x)
{
const int32_t lshift = drc_get_lshift(30, 30, 28);
int32_t denorm_x = drc_mult_lshift(x, PI_OVER_TWO_Q30, lshift);
int32_t sin_val = sin_fixed_16b(denorm_x);
return sin_val << 16;
return sofm_lut_sin_fixed_16b(denorm_x) << 16;
}
#ifdef DRC_USE_CORDIC_ASIN
@ -88,9 +88,8 @@ static inline int32_t drc_asin_fixed(int32_t x)
static inline int32_t drc_sin_fixed(int32_t x)
{
const int32_t PI_OVER_TWO = Q_CONVERT_FLOAT(1.57079632679489661923, 30);
int32_t sin_val = sin_fixed_16b(Q_MULTSR_32X32((int64_t)x, PI_OVER_TWO, 30, 30, 28));
return sin_val << 16;
return sofm_lut_sin_fixed_16b(Q_MULTSR_32X32((int64_t)x, PI_OVER_TWO, 30, 30, 28)) << 16;
}
#ifdef DRC_USE_CORDIC_ASIN