op_kfix_sin.c File Reference


Detailed Description

16-bit and 32-bit fixed-point sine kernel functions or the AVR32 UC3

Author:
Atmel Corporation: http://www.atmel.com
Support and FAQ: http://support.atmel.no/

Definition in file op_kfix_sin.c.

#include "dsp.h"

Go to the source code of this file.

Functions

dsp16_t dsp16_op_kernel_sinfix (dsp16_t angle)
dsp32_t dsp32_op_kernel_sinfix (dsp32_t angle)


Function Documentation

dsp16_t dsp16_op_kernel_sinfix ( dsp16_t  angle  ) 

Definition at line 49 of file op_kfix_sin.c.

References DSP16_Q, and DSP16_QB.

Referenced by dsp16_op_sin().

00050 {
00051   // Coefficients of the 5th order Tchebychev polynom to calculate a sine.
00052   const dsp16_t s1 = DSP16_Q(0.785369873046875);
00053   const dsp16_t s3 = DSP16_Q(0.322784423828125);
00054   const dsp16_t s5 = DSP16_Q(0.03875732421875);
00055   S32 z, suma;
00056 
00057   // Computation of the polynom
00058   z = (angle*angle) >> (DSP16_QB - 3);
00059   suma = s3 - ((z*s5) >> (DSP16_QB + 1));
00060   suma = s1 - ((z*suma) >> (DSP16_QB + 1));
00061 
00062   return (angle*suma) >> (DSP16_QB - 2);
00063 }

dsp32_t dsp32_op_kernel_sinfix ( dsp32_t  angle  ) 

Definition at line 66 of file op_kfix_sin.c.

References DSP32_Q, and DSP32_QB.

Referenced by dsp32_op_sin().

00067 {
00068   // Coefficients of the 13th order Tchebychev polynom to calculate a sinus.
00069   const dsp32_t S0 = DSP32_Q(0.78539816340);    //pi/4;
00070   const dsp32_t S1 = DSP32_Q(-0.64596411675);   //-1.6666667163e-01*pi^3/8;
00071   const dsp32_t S2 = DSP32_Q(0.31877052162);    //8.3333337680e-03*pi^5/8;
00072   const dsp32_t S3 = DSP32_Q(-0.07490806720);   //-1.9841270114e-04*pi^7/8;
00073   const dsp32_t S4 = DSP32_Q(0.01026823400);    //2.7557314297e-06*pi^9/8;
00074   const dsp32_t S5 = DSP32_Q(-0.00092125426);   //-2.5050759689e-08*pi^11/8;
00075   const dsp32_t S6 = DSP32_Q(0.00005769937);    //1.5896910177e-10*pi^13/8;
00076   long long z, v, suma, produ;
00077 
00078   // Computation of the polynom  
00079   z = (long long) angle;
00080   z = (z*z) >> DSP32_QB;
00081   v = (long long) angle;
00082   v = (z*v) >> DSP32_QB;
00083 
00084   produ = (z*S6) >> DSP32_QB;
00085   suma = S5 + produ;
00086   produ = (z*suma) >> DSP32_QB;
00087   suma = S4 + produ;
00088   produ = (z*suma) >> DSP32_QB;
00089   suma = S3 + produ;
00090   produ = (z*suma) >> DSP32_QB;
00091   suma = S2 + produ;
00092 
00093   produ = (z*suma) >> DSP32_QB;
00094   suma = S1 + produ;
00095   produ = (v*suma) >> (DSP32_QB - 3);
00096 
00097   return ((S0*((long long) angle)) >> (DSP32_QB - 2)) + produ;
00098 }


Generated on Fri Feb 19 02:23:20 2010 for AVR32 UC3 - EVK1104 DSPLib Demo Documentation by  doxygen 1.5.5