CMSIS DSP Software Library: arm_sin_f32.c Source File
Main Page
Modules
Data Structures
Files
Examples
File List
Globals
arm_sin_f32.c
Go to the documentation of this file.00001 /* ----------------------------------------------------------------------
00002 * Copyright (C) 2010 ARM Limited. All rights reserved.
00003 *
00004 * $Date: 29. November 2010
00005 * $Revision: V1.0.3
00006 *
00007 * Project: CMSIS DSP Library
00008 * Title: arm_sin_f32.c
00009 *
00010 * Description: Fast sine calculation for floating-point values.
00011 *
00012 * Target Processor: Cortex-M4/Cortex-M3
00013 *
00014 * Version 1.0.3 2010/11/29
00015 * Re-organized the CMSIS folders and updated documentation.
00016 *
00017 * Version 1.0.2 2010/11/11
00018 * Documentation updated.
00019 *
00020 * Version 1.0.1 2010/10/05
00021 * Production release and review comments incorporated.
00022 *
00023 * Version 1.0.0 2010/09/20
00024 * Production release and review comments incorporated.
00025 * -------------------------------------------------------------------- */
00026
00027 #include "arm_math.h"
00028
00085 static const float32_t sinTable[259] = {
00086 -0.024541229009628296f, 0.000000000000000000f, 0.024541229009628296f,
00087 0.049067676067352295f, 0.073564566671848297f, 0.098017141222953796f,
00088 0.122410677373409270f, 0.146730467677116390f,
00089 0.170961886644363400f, 0.195090323686599730f, 0.219101235270500180f,
00090 0.242980182170867920f, 0.266712754964828490f, 0.290284663438797000f,
00091 0.313681751489639280f, 0.336889863014221190f,
00092 0.359895050525665280f, 0.382683426141738890f, 0.405241310596466060f,
00093 0.427555084228515630f, 0.449611335992813110f, 0.471396744251251220f,
00094 0.492898195981979370f, 0.514102756977081300f,
00095 0.534997642040252690f, 0.555570244789123540f, 0.575808167457580570f,
00096 0.595699310302734380f, 0.615231573581695560f, 0.634393274784088130f,
00097 0.653172850608825680f, 0.671558976173400880f,
00098 0.689540565013885500f, 0.707106769084930420f, 0.724247097969055180f,
00099 0.740951120853424070f, 0.757208824157714840f, 0.773010432720184330f,
00100 0.788346409797668460f, 0.803207516670227050f,
00101 0.817584812641143800f, 0.831469595432281490f, 0.844853579998016360f,
00102 0.857728600502014160f, 0.870086967945098880f, 0.881921291351318360f,
00103 0.893224298954010010f, 0.903989315032958980f,
00104 0.914209783077239990f, 0.923879504203796390f, 0.932992815971374510f,
00105 0.941544055938720700f, 0.949528157711029050f, 0.956940352916717530f,
00106 0.963776051998138430f, 0.970031261444091800f,
00107 0.975702106952667240f, 0.980785250663757320f, 0.985277652740478520f,
00108 0.989176511764526370f, 0.992479562759399410f, 0.995184719562530520f,
00109 0.997290432453155520f, 0.998795449733734130f,
00110 0.999698817729949950f, 1.000000000000000000f, 0.999698817729949950f,
00111 0.998795449733734130f, 0.997290432453155520f, 0.995184719562530520f,
00112 0.992479562759399410f, 0.989176511764526370f,
00113 0.985277652740478520f, 0.980785250663757320f, 0.975702106952667240f,
00114 0.970031261444091800f, 0.963776051998138430f, 0.956940352916717530f,
00115 0.949528157711029050f, 0.941544055938720700f,
00116 0.932992815971374510f, 0.923879504203796390f, 0.914209783077239990f,
00117 0.903989315032958980f, 0.893224298954010010f, 0.881921291351318360f,
00118 0.870086967945098880f, 0.857728600502014160f,
00119 0.844853579998016360f, 0.831469595432281490f, 0.817584812641143800f,
00120 0.803207516670227050f, 0.788346409797668460f, 0.773010432720184330f,
00121 0.757208824157714840f, 0.740951120853424070f,
00122 0.724247097969055180f, 0.707106769084930420f, 0.689540565013885500f,
00123 0.671558976173400880f, 0.653172850608825680f, 0.634393274784088130f,
00124 0.615231573581695560f, 0.595699310302734380f,
00125 0.575808167457580570f, 0.555570244789123540f, 0.534997642040252690f,
00126 0.514102756977081300f, 0.492898195981979370f, 0.471396744251251220f,
00127 0.449611335992813110f, 0.427555084228515630f,
00128 0.405241310596466060f, 0.382683426141738890f, 0.359895050525665280f,
00129 0.336889863014221190f, 0.313681751489639280f, 0.290284663438797000f,
00130 0.266712754964828490f, 0.242980182170867920f,
00131 0.219101235270500180f, 0.195090323686599730f, 0.170961886644363400f,
00132 0.146730467677116390f, 0.122410677373409270f, 0.098017141222953796f,
00133 0.073564566671848297f, 0.049067676067352295f,
00134 0.024541229009628296f, 0.000000000000000122f, -0.024541229009628296f,
00135 -0.049067676067352295f, -0.073564566671848297f, -0.098017141222953796f,
00136 -0.122410677373409270f, -0.146730467677116390f,
00137 -0.170961886644363400f, -0.195090323686599730f, -0.219101235270500180f,
00138 -0.242980182170867920f, -0.266712754964828490f, -0.290284663438797000f,
00139 -0.313681751489639280f, -0.336889863014221190f,
00140 -0.359895050525665280f, -0.382683426141738890f, -0.405241310596466060f,
00141 -0.427555084228515630f, -0.449611335992813110f, -0.471396744251251220f,
00142 -0.492898195981979370f, -0.514102756977081300f,
00143 -0.534997642040252690f, -0.555570244789123540f, -0.575808167457580570f,
00144 -0.595699310302734380f, -0.615231573581695560f, -0.634393274784088130f,
00145 -0.653172850608825680f, -0.671558976173400880f,
00146 -0.689540565013885500f, -0.707106769084930420f, -0.724247097969055180f,
00147 -0.740951120853424070f, -0.757208824157714840f, -0.773010432720184330f,
00148 -0.788346409797668460f, -0.803207516670227050f,
00149 -0.817584812641143800f, -0.831469595432281490f, -0.844853579998016360f,
00150 -0.857728600502014160f, -0.870086967945098880f, -0.881921291351318360f,
00151 -0.893224298954010010f, -0.903989315032958980f,
00152 -0.914209783077239990f, -0.923879504203796390f, -0.932992815971374510f,
00153 -0.941544055938720700f, -0.949528157711029050f, -0.956940352916717530f,
00154 -0.963776051998138430f, -0.970031261444091800f,
00155 -0.975702106952667240f, -0.980785250663757320f, -0.985277652740478520f,
00156 -0.989176511764526370f, -0.992479562759399410f, -0.995184719562530520f,
00157 -0.997290432453155520f, -0.998795449733734130f,
00158 -0.999698817729949950f, -1.000000000000000000f, -0.999698817729949950f,
00159 -0.998795449733734130f, -0.997290432453155520f, -0.995184719562530520f,
00160 -0.992479562759399410f, -0.989176511764526370f,
00161 -0.985277652740478520f, -0.980785250663757320f, -0.975702106952667240f,
00162 -0.970031261444091800f, -0.963776051998138430f, -0.956940352916717530f,
00163 -0.949528157711029050f, -0.941544055938720700f,
00164 -0.932992815971374510f, -0.923879504203796390f, -0.914209783077239990f,
00165 -0.903989315032958980f, -0.893224298954010010f, -0.881921291351318360f,
00166 -0.870086967945098880f, -0.857728600502014160f,
00167 -0.844853579998016360f, -0.831469595432281490f, -0.817584812641143800f,
00168 -0.803207516670227050f, -0.788346409797668460f, -0.773010432720184330f,
00169 -0.757208824157714840f, -0.740951120853424070f,
00170 -0.724247097969055180f, -0.707106769084930420f, -0.689540565013885500f,
00171 -0.671558976173400880f, -0.653172850608825680f, -0.634393274784088130f,
00172 -0.615231573581695560f, -0.595699310302734380f,
00173 -0.575808167457580570f, -0.555570244789123540f, -0.534997642040252690f,
00174 -0.514102756977081300f, -0.492898195981979370f, -0.471396744251251220f,
00175 -0.449611335992813110f, -0.427555084228515630f,
00176 -0.405241310596466060f, -0.382683426141738890f, -0.359895050525665280f,
00177 -0.336889863014221190f, -0.313681751489639280f, -0.290284663438797000f,
00178 -0.266712754964828490f, -0.242980182170867920f,
00179 -0.219101235270500180f, -0.195090323686599730f, -0.170961886644363400f,
00180 -0.146730467677116390f, -0.122410677373409270f, -0.098017141222953796f,
00181 -0.073564566671848297f, -0.049067676067352295f,
00182 -0.024541229009628296f, -0.000000000000000245f, 0.024541229009628296f
00183 };
00184
00185
00192 float32_t arm_sin_f32(
00193 float32_t x)
00194 {
00195 float32_t sinVal, fract, in; /* Temporary variables for input, output */
00196 uint32_t index; /* Index variables */
00197 uint32_t tableSize = (uint32_t) TABLE_SIZE; /* Initialise tablesize */
00198 float32_t wa, wb, wc, wd; /* Cubic interpolation coefficients */
00199 float32_t a, b, c, d; /* Four nearest output values */
00200 float32_t *tablePtr; /* Pointer to table */
00201 int32_t n;
00202
00203 /* input x is in radians */
00204 /* Scale the input to [0 1] range from [0 2*PI] , divide input by 2*pi */
00205 in = x * 0.159154943092f;
00206
00207 /* Calculation of floor value of input */
00208 n = (int32_t) in;
00209
00210 /* Make negative values towards -infinity */
00211 if(x < 0.0f)
00212 {
00213 n = n - 1;
00214 }
00215
00216 /* Map input value to [0 1] */
00217 in = in - (float32_t) n;
00218
00219 /* Calculation of index of the table */
00220 index = (uint32_t) (tableSize * in);
00221
00222 /* fractional value calculation */
00223 fract = ((float32_t) tableSize * in) - (float32_t) index;
00224
00225 /* Initialise table pointer */
00226 tablePtr = (float32_t *) & sinTable[index];
00227
00228 /* Read four nearest values of output value from the sin table */
00229 a = *tablePtr++;
00230 b = *tablePtr++;
00231 c = *tablePtr++;
00232 d = *tablePtr++;
00233
00234 /* Cubic interpolation process */
00235 wa = -(((0.166666667f) * (fract * (fract * fract))) +
00236 ((0.3333333333333f) * fract)) + ((0.5f) * (fract * fract));
00237 wb = (((0.5f) * (fract * (fract * fract))) -
00238 ((fract * fract) + ((0.5f) * fract))) + 1.0f;
00239 wc = (-((0.5f) * (fract * (fract * fract))) +
00240 ((0.5f) * (fract * fract))) + fract;
00241 wd = ((0.166666667f) * (fract * (fract * fract))) -
00242 ((0.166666667f) * fract);
00243
00244 /* Calculate sin value */
00245 sinVal = ((a * wa) + (b * wb)) + ((c * wc) + (d * wd));
00246
00247 /* Return the output value */
00248 return (sinVal);
00249
00250 }
00251
All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Defines
Generated on Mon Nov 29 2010 17:19:57 for CMSIS DSP Software Library by
1.7.2
Wyszukiwarka
Podobne podstrony:
arm conv ?2? sourcearm power ?2? sourcearm ?d ?2? sourcearm scale ?2? sourcearm sin q15? sourcearm correlate ?2? sourcearm mult ?2? sourcearm ?s ?2? sourcearm offset ?2? sourcearm mean ?2? sourcearm cos ?2? sourcearm sin q31? sourcearm std ?2? sourcearm sin ?2?arm negate ?2? sourcearm ?t4 ?2? sourcearm min ?2? sourcearm fill ?2? sourcearm lms ?2? sourcewięcej podobnych podstron