Skip to content

Commit

Permalink
Audio: DRC: Change DRC to use lookup table based sine function
Browse files Browse the repository at this point in the history
This change saves about 13 MPCS, from 83 MCPS to 70 MCPS while
the .bss RAM usage increases by 1 kB from selecting
CONFIG_MATH_LUT_TRIG_FIXED.

Signed-off-by: Seppo Ingalsuo <[email protected]>
  • Loading branch information
singalsu committed Jan 9, 2024
1 parent bbdfa43 commit 7c8ae5f
Show file tree
Hide file tree
Showing 2 changed files with 4 additions and 4 deletions.
1 change: 1 addition & 0 deletions src/audio/drc/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
config COMP_DRC
bool "Dynamic Range Compressor component"
select CORDIC_FIXED
select MATH_LUT_TRIG_FIXED
select NUMBERS_NORM
select MATH_EXP
select COMP_BLOB
Expand Down
7 changes: 3 additions & 4 deletions src/audio/drc/drc_math.h
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -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
Expand All @@ -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
Expand Down

0 comments on commit 7c8ae5f

Please sign in to comment.