arduino-audio-tools
Loading...
Searching...
No Matches
Classes | Namespaces | Macros | Typedefs | Functions | Variables
MDFEchoCancellation.h File Reference
#include <algorithm>
#include <cmath>
#include <cstdint>
#include <cstdlib>
#include <cstring>
#include <vector>
#include "MDFEchoCancellationConfig.h"
#include "AudioTools/AudioLibs/AudioFFT.h"

Go to the source code of this file.

Classes

struct  echo_float_t
 
struct  EchoState_
 Internal echo canceller state structure. More...
 
struct  fft_state< Allocator >
 FFT state management structure with custom allocator support. More...
 
class  MDFEchoCancellation< Allocator >
 Acoustic echo canceller using MDF algorithm. More...
 

Namespaces

namespace  audio_tools
 Generic Implementation of sound input and output for desktop environments using portaudio.
 

Macros

#define ABS(x)   (((x) < 0) ? (-(x)) : (x))
 
#define ABS16(x)   (((x) < 0) ? (-(x)) : (x))
 
#define ABS32(x)   (((x) < 0) ? (-(x)) : (x))
 
#define ECHO_GET_FRAME_SIZE   3
 
#define ECHO_GET_IMPULSE_RESPONSE   29
 
#define ECHO_GET_IMPULSE_RESPONSE_SIZE   27
 
#define ECHO_GET_SAMPLING_RATE   25
 
#define ECHO_SET_SAMPLING_RATE   24
 
#define FLOAT_ADD(a, b)   (echo_float_add(a, b))
 
#define FLOAT_DIVU(a, b)   (echo_float_divu(a, b))
 
#define FLOAT_EXTRACT16(a)   (echo_float_extract16(a))
 
#define FLOAT_GT(a, b)   (echo_float_gt(a, b))
 
#define FLOAT_LT(a, b)   (echo_float_lt(a, b))
 
#define FLOAT_MUL32U(a, b)   (echo_float_mul32_u(a, b))
 
#define FLOAT_MULT(a, b)   (echo_float_mult(a, b))
 
#define FLOAT_SHL(a, b)   (echo_float_shl(a, b))
 
#define FLOAT_SQRT(a)   (echo_float_sqrt(a))
 
#define FLOAT_SUB(a, b)   (echo_float_sub(a, b))
 
#define MAX16(a, b)   ((a) > (b) ? (a) : (b))
 
#define MAX32(a, b)   ((a) > (b) ? (a) : (b))
 
#define MIN16(a, b)   ((a) < (b) ? (a) : (b))
 
#define MIN32(a, b)   ((a) < (b) ? (a) : (b))
 
#define PSEUDOFLOAT(x)   (echo_float_from_double(x))
 
#define TOP16(x)   (x)
 
#define WEIGHT_SHIFT   0
 
#define WORD2INT(x)
 

Typedefs

typedef struct audio_tools::echo_float_t echo_float_t
 
typedef int16_t echo_int16_t
 
typedef int32_t echo_int32_t
 
typedef echo_word32_t echo_mem_t
 
typedef uint16_t echo_uint16_t
 
typedef uint32_t echo_uint32_t
 
typedef echo_int16_t echo_word16_t
 
typedef echo_int32_t echo_word32_t
 
typedef struct EchoState_ EchoState
 

Functions

template<typename Allocator = std::allocator<uint8_t>>
void echo_fft (void *table, echo_word16_t *in, echo_word16_t *out)
 Perform forward FFT.
 
template<typename Allocator = std::allocator<uint8_t>>
void echo_fft_destroy (void *table)
 Destroy FFT state and release resources.
 
template<typename Allocator >
voidecho_fft_init (int size, AudioFFTBase *driver, const Allocator &alloc)
 Initialize FFT state.
 
echo_float_t echo_float_add (echo_float_t a, echo_float_t b)
 
echo_float_t echo_float_divu (echo_float_t a, echo_float_t b)
 
int16_t echo_float_extract16 (echo_float_t x)
 
echo_float_t echo_float_from_double (double x)
 
bool echo_float_gt (echo_float_t a, echo_float_t b)
 
bool echo_float_lt (echo_float_t a, echo_float_t b)
 
echo_float_t echo_float_mul32_u (float a, float b)
 
echo_float_t echo_float_mult (echo_float_t a, echo_float_t b)
 
echo_float_t echo_float_shl (echo_float_t x, int bits)
 
echo_float_t echo_float_sqrt (echo_float_t x)
 
echo_float_t echo_float_sub (echo_float_t a, echo_float_t b)
 
template<typename Allocator = std::allocator<uint8_t>>
void echo_ifft (void *table, echo_word16_t *in, echo_word16_t *out)
 Perform inverse FFT.
 

Variables

static const echo_float_t MIN_LEAK = {164, -15}
 
static const echo_float_t VAR1_SMOOTH = {11796, -15}
 
static const echo_float_t VAR1_UPDATE = {16384, -15}
 
static const echo_float_t VAR2_SMOOTH = {23674, -15}
 
static const echo_float_t VAR2_UPDATE = {8192, -15}
 
static const echo_float_t VAR_BACKTRACK = {16384, 2}
 

Macro Definition Documentation

◆ ABS

#define ABS (   x)    (((x) < 0) ? (-(x)) : (x))

◆ ABS16

#define ABS16 (   x)    (((x) < 0) ? (-(x)) : (x))

◆ ABS32

#define ABS32 (   x)    (((x) < 0) ? (-(x)) : (x))

◆ ECHO_GET_FRAME_SIZE

#define ECHO_GET_FRAME_SIZE   3

◆ ECHO_GET_IMPULSE_RESPONSE

#define ECHO_GET_IMPULSE_RESPONSE   29

◆ ECHO_GET_IMPULSE_RESPONSE_SIZE

#define ECHO_GET_IMPULSE_RESPONSE_SIZE   27

◆ ECHO_GET_SAMPLING_RATE

#define ECHO_GET_SAMPLING_RATE   25

◆ ECHO_SET_SAMPLING_RATE

#define ECHO_SET_SAMPLING_RATE   24

◆ FLOAT_ADD

#define FLOAT_ADD (   a,
 
)    (echo_float_add(a, b))

◆ FLOAT_DIVU

#define FLOAT_DIVU (   a,
 
)    (echo_float_divu(a, b))

◆ FLOAT_EXTRACT16

#define FLOAT_EXTRACT16 (   a)    (echo_float_extract16(a))

◆ FLOAT_GT

#define FLOAT_GT (   a,
 
)    (echo_float_gt(a, b))

◆ FLOAT_LT

#define FLOAT_LT (   a,
 
)    (echo_float_lt(a, b))

◆ FLOAT_MUL32U

#define FLOAT_MUL32U (   a,
 
)    (echo_float_mul32_u(a, b))

◆ FLOAT_MULT

#define FLOAT_MULT (   a,
 
)    (echo_float_mult(a, b))

◆ FLOAT_SHL

#define FLOAT_SHL (   a,
 
)    (echo_float_shl(a, b))

◆ FLOAT_SQRT

#define FLOAT_SQRT (   a)    (echo_float_sqrt(a))

◆ FLOAT_SUB

#define FLOAT_SUB (   a,
 
)    (echo_float_sub(a, b))

◆ MAX16

#define MAX16 (   a,
 
)    ((a) > (b) ? (a) : (b))

◆ MAX32

#define MAX32 (   a,
 
)    ((a) > (b) ? (a) : (b))

◆ MIN16

#define MIN16 (   a,
 
)    ((a) < (b) ? (a) : (b))

◆ MIN32

#define MIN32 (   a,
 
)    ((a) < (b) ? (a) : (b))

◆ PSEUDOFLOAT

#define PSEUDOFLOAT (   x)    (echo_float_from_double(x))

◆ TOP16

#define TOP16 (   x)    (x)

◆ WEIGHT_SHIFT

#define WEIGHT_SHIFT   0

◆ WORD2INT

#define WORD2INT (   x)
Value:
((x) < -32767.5f \
? -32768 \
: ((x) > 32766.5f ? 32767 : (echo_int16_t)floorf(.5f + (x))))