pinebuds/services/multimedia/speech/inc/ae_math.h

94 lines
2.2 KiB
C

/***************************************************************************
*
* Copyright 2015-2019 BES.
* All rights reserved. All unpublished rights reserved.
*
* No part of this work may be used or reproduced in any form or by any
* means, or stored in a database or retrieval system, without prior written
* permission of BES.
*
* Use of this work is governed by a license granted by BES.
* This work contains confidential and proprietary information of
* BES. which is protected by copyright, trade secret,
* trademark and other intellectual property rights.
*
****************************************************************************/
#ifndef AE_MATH_H
#define AE_MATH_H
#include <stdint.h>
#include <math.h>
#ifdef __arm__
#include "arm_math.h"
#endif
#define AE_PI 3.14159265358979323846f
#define EPS (1e-7f)
#define AE_CLAMP(x,lo,hi) ((x) < (lo) ? (lo) : (x) > (hi) ? (hi) : (x))
#ifdef __arm__
#define AE_SSAT16(x) __SSAT((int32_t)(x), 16)
#define AE_SSAT24(x) __SSAT((int32_t)(x), 24)
#else
#define AE_SSAT16(x) AE_CLAMP(x,-32768,32767)
#define AE_SSAT24(x) AE_CLAMP(x,-16777216,16777215)
#endif
#define AE_ABS(x) ((x) > 0 ? (x) : (-(x)))
#define AE_FLOOR(x) (floorf(x))
#define AE_ROUND(x) (roundf(x))
#define AE_INT(x) ((int)(x))
// deal with x > -1 && x < 0
#define AE_SIGN(x) ((AE_INT(x) == 0 && (x) < 0) ? "-" : "")
#define AE_FRAC(x) ((int)(((x) > 0 ? ((x) - AE_INT(x)) : (AE_INT(x) - (x))) * 1000000))
#define AE_MIN(a,b) ((a) < (b) ? (a) : (b))
#define AE_MAX(a,b) ((a) > (b) ? (a) : (b))
#define SQUARE(x) ((x) * (x))
#define DB2LIN(x) (powf(10.f, (x) / 20.f))
#ifdef VQE_SIMULATE
#define AE_SIN(x) sinf(x)
#define AE_COS(x) cosf(x)
#else
#define AE_SIN(x) arm_sin_f32(x)
#define AE_COS(x) arm_cos_f32(x)
#endif
int ae_gcd(int u, int v);
int ipow(int base, int exp);
float ipowf(float base, int exp);
float pow_int(float base, int exp);
float expint(int n, float x);
float sqrt_approx(float z);
#define AE_RAND_MAX (32767)
void ae_srand(unsigned int init);
int ae_rand(void);
void speech_conv(float *x, float *y, short len1,int len2, float *out);
void scale_int16(int16_t *pDst, int16_t *pSrc, float scale, uint32_t blockSize);
int32_t nextpow2(int32_t N);
#endif