CMSIS DSP Library from CMSIS 2.0. See http://www.onarm.com/cmsis/ for full details
Dependents: K22F_DSP_Matrix_least_square BNO055-ELEC3810 1BNO055 ECE4180Project--Slave2 ... more
Sine
[Fast Math Functions]
Computes the trigonometric sine function using a combination of table lookup and cubic interpolation. More...
Functions | |
float32_t | arm_sin_f32 (float32_t x) |
Fast approximation to the trigonometric sine function for floating-point data. | |
q15_t | arm_sin_q15 (q15_t x) |
Fast approximation to the trigonometric sine function for Q15 data. | |
q31_t | arm_sin_q31 (q31_t x) |
Fast approximation to the trigonometric sine function for Q31 data. | |
Variables | |
static const float32_t | sinTable [259] |
static const q15_t | sinTableQ15 [259] |
static const q31_t | sinTableQ31 [259] |
Detailed Description
Computes the trigonometric sine function using a combination of table lookup and cubic interpolation.
There are separate functions for Q15, Q31, and floating-point data types. The input to the floating-point version is in radians while the fixed-point Q15 and Q31 have a scaled input with the range [0 1) mapping to [0 2*pi).
The implementation is based on table lookup using 256 values together with cubic interpolation. The steps used are:
- Calculation of the nearest integer table index
- Fetch the four table values a, b, c, and d
- Compute the fractional portion (fract) of the table index.
- Calculation of wa, wb, wc, wd
- The final result equals
a*wa + b*wb + c*wc + d*wd
where
a=Table[index-1]; b=Table[index+0]; c=Table[index+1]; d=Table[index+2];
and
wa=-(1/6)*fract.^3 + (1/2)*fract.^2 - (1/3)*fract; wb=(1/2)*fract.^3 - fract.^2 - (1/2)*fract + 1; wc=-(1/2)*fract.^3+(1/2)*fract.^2+fract; wd=(1/6)*fract.^3 - (1/6)*fract;
Function Documentation
float32_t arm_sin_f32 | ( | float32_t | x ) |
Fast approximation to the trigonometric sine function for floating-point data.
end of LinearInterpolate group
- Parameters:
-
[in] x input value in radians.
- Returns:
- sin(x).
Definition at line 192 of file arm_sin_f32.c.
q15_t arm_sin_q15 | ( | q15_t | x ) |
Fast approximation to the trigonometric sine function for Q15 data.
- Parameters:
-
[in] x Scaled input value in radians.
- Returns:
- sin(x).
The Q15 input value is in the range [0 +1) and is mapped to a radian value in the range [0 2*pi).
Definition at line 103 of file arm_sin_q15.c.
q31_t arm_sin_q31 | ( | q31_t | x ) |
Fast approximation to the trigonometric sine function for Q31 data.
- Parameters:
-
[in] x Scaled input value in radians.
- Returns:
- sin(x).
The Q31 input value is in the range [0 +1) and is mapped to a radian value in the range [0 2*pi).
Definition at line 133 of file arm_sin_q31.c.
Variable Documentation
const float32_t sinTable[259] [static] |
- Example code for Generation of Floating-point Sin Table: tableSize = 256;
for(n = -1; n < (tableSize + 1); n++) { sinTable[n+1]=sin(2*pi*n/tableSize); }
- where pi value is 3.14159265358979
Definition at line 85 of file arm_sin_f32.c.
const q15_t sinTableQ15[259] [static] |
- Example code for Generation of Q15 Sin Table:
tableSize = 256; for(n = -1; n < (tableSize + 1); n++) { sinTable[n+1]=sin(2*pi*n/tableSize); }
where pi value is 3.14159265358979
- Convert Floating point to Q15(Fixed point): (sinTable[i] * pow(2, 15))
- rounding to nearest integer is done sinTable[i] += (sinTable[i] > 0 ? 0.5 :-0.5);
Definition at line 58 of file arm_sin_q15.c.
const q31_t sinTableQ31[259] [static] |
- Tables generated are in Q31(1.31 Fixed point format) Generation of sin values in floating point:
tableSize = 256; for(n = -1; n < (tableSize + 1); n++) { sinTable[n+1]= sin(2*pi*n/tableSize); }
where pi value is 3.14159265358979
- Convert Floating point to Q31(Fixed point): (sinTable[i] * pow(2, 31))
- rounding to nearest integer is done sinTable[i] += (sinTable[i] > 0 ? 0.5 :-0.5);
Definition at line 56 of file arm_sin_q31.c.
Generated on Tue Jul 12 2022 14:13:55 by 1.7.2