op_fix_sin.c File Reference


Detailed Description

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

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

Definition in file op_fix_sin.c.

#include "dsp.h"

Go to the source code of this file.

Defines

#define DSP16_MODULO_1_MASK   (((U16) -1) >> (16 - (DSP16_QB+1)))
#define DSP32_MODULO_1_MASK   (((U32) -1) >> (32 - (DSP32_QB+1)))

Functions

dsp16_t dsp16_op_kernel_cosfix (dsp16_t angle)
dsp16_t dsp16_op_kernel_sinfix (dsp16_t angle)
dsp16_t dsp16_op_sin (dsp16_t angle)
 16-bit fixed point version of the sine function.
dsp32_t dsp32_op_kernel_cosfix (dsp32_t angle)
dsp32_t dsp32_op_kernel_sinfix (dsp32_t angle)
dsp32_t dsp32_op_sin (dsp32_t angle)
 32-bit fixed point version of the sine function.


Define Documentation

#define DSP16_MODULO_1_MASK   (((U16) -1) >> (16 - (DSP16_QB+1)))

Definition at line 51 of file op_fix_sin.c.

Referenced by dsp16_op_sin().

#define DSP32_MODULO_1_MASK   (((U32) -1) >> (32 - (DSP32_QB+1)))

Definition at line 95 of file op_fix_sin.c.

Referenced by dsp32_op_sin().


Function Documentation

dsp16_t dsp16_op_kernel_cosfix ( dsp16_t  angle  ) 

Definition at line 49 of file op_kfix_cos.c.

References DSP16_Q, and DSP16_QB.

Referenced by dsp16_op_sin().

00050 {
00051   // Coefficients of the 4th order Tchebychev polynom to calculate a cosine.
00052   const dsp16_t c0 = DSP16_Q(1.);
00053   const dsp16_t c2 = DSP16_Q(0.61651611328125);
00054   const dsp16_t c4 = DSP16_Q(0.1231689453125);
00055   S32 z, suma;
00056 
00057   // Computation of the polynom
00058   z = (angle*angle) >> (DSP16_QB - 3);
00059   suma = c2 - ((z*c4) >> (DSP16_QB + 1));
00060 
00061   return (c0 - ((z*suma) >> DSP16_QB));
00062 }

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_cosfix ( dsp32_t  angle  ) 

Definition at line 65 of file op_kfix_cos.c.

References DSP32_Q, and DSP32_QB.

Referenced by dsp32_op_sin().

00066 {
00067   // Coefficients of the 12th order Tchebychev polynom to calculate a cosine.
00068   const dsp32_t one = DSP32_Q(1.);
00069   const dsp32_t half = DSP32_Q(0.61685027507);    //0.5*(pi^2/8);
00070   const dsp32_t C1 = DSP32_Q(0.50733903092);      //(4.1666667908e-02*pi^2)*(pi^2/8);
00071   const dsp32_t C2 = DSP32_Q(-0.16690785015);     //(-1.3888889225e-03*pi^4)*(pi^2/8);
00072   const dsp32_t C3 = DSP32_Q(0.02941632920);      //(2.4801587642e-05*pi^6)*(pi^2/8);
00073   const dsp32_t C4 = DSP32_Q(-0.00322586085);     //(-2.7557314297e-07*pi^8)*(pi^2/8);
00074   const dsp32_t C5 = DSP32_Q(0.00024118485);      //(2.0875723372e-09*pi^10)*(pi^2/8);
00075   const dsp32_t C6 = DSP32_Q(-0.00001295308);     //(-1.1359647598e-11*pi^12)*(pi^2/8);
00076   long long z, suma, produ;
00077 
00078   // Computation of the polynom
00079   z = (long long) angle;
00080   z = (z*z) >> DSP32_QB;
00081 
00082   produ = (z*C6) >> DSP32_QB;
00083 
00084   suma = C5 + produ;
00085   produ = (z*suma) >> DSP32_QB;
00086   suma = C4 + produ;
00087   produ = (z*suma) >> DSP32_QB;
00088   suma = C3 + produ;
00089   produ = (z*suma) >> DSP32_QB;
00090   suma = C2 + produ;
00091   produ = (z*suma) >> DSP32_QB;
00092   suma = C1 + produ;
00093   produ = (z*suma) >> DSP32_QB;
00094   produ = z*produ;
00095 
00096   return (one - (((half*z - produ)) >> (DSP32_QB - 3)));
00097 }

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