nuclear@3: #ifndef SINCOS_H_ nuclear@3: #define SINCOS_H_ nuclear@3: nuclear@3: #include nuclear@3: nuclear@3: #define M_PI_X16 (int32_t)(M_PI * 65536.0) nuclear@3: /*#define M_PI_X16 (int32_t)((31416 << 16) / 10000)*/ nuclear@3: nuclear@3: #define SINLUT_SCALE 512 nuclear@3: #define SINLUT_SIZE 512 nuclear@3: int16_t sinlut[SINLUT_SIZE]; nuclear@3: nuclear@3: void sincos_init(void); nuclear@3: nuclear@3: /* takes angle in [0, SINLUT_SIZE] and returns: nuclear@3: * sin(2 * angle / SINLUT_SIZE / pi) * SINLUT_SCALE nuclear@3: */ nuclear@3: int16_t sin_int(int16_t norm_angle); nuclear@3: int16_t cos_int(int16_t norm_angle); nuclear@3: nuclear@3: /* takes angle in fixed point 16.16 radians [0, 2pi << 16] nuclear@3: * and returns 16.16 fixed point in [-1 << 16, 1 << 16] nuclear@3: */ nuclear@3: int32_t sin_x16(int32_t radians); nuclear@3: int32_t cos_x16(int32_t radians); nuclear@3: nuclear@3: #endif /* SINCOS_H_ */