00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #include "arm_math.h"
00025
00082 static const float32_t sinTable[259] = {
00083 -0.024541229009628296f, 0.000000000000000000f, 0.024541229009628296f,
00084 0.049067676067352295f, 0.073564566671848297f, 0.098017141222953796f,
00085 0.122410677373409270f, 0.146730467677116390f,
00086 0.170961886644363400f, 0.195090323686599730f, 0.219101235270500180f,
00087 0.242980182170867920f, 0.266712754964828490f, 0.290284663438797000f,
00088 0.313681751489639280f, 0.336889863014221190f,
00089 0.359895050525665280f, 0.382683426141738890f, 0.405241310596466060f,
00090 0.427555084228515630f, 0.449611335992813110f, 0.471396744251251220f,
00091 0.492898195981979370f, 0.514102756977081300f,
00092 0.534997642040252690f, 0.555570244789123540f, 0.575808167457580570f,
00093 0.595699310302734380f, 0.615231573581695560f, 0.634393274784088130f,
00094 0.653172850608825680f, 0.671558976173400880f,
00095 0.689540565013885500f, 0.707106769084930420f, 0.724247097969055180f,
00096 0.740951120853424070f, 0.757208824157714840f, 0.773010432720184330f,
00097 0.788346409797668460f, 0.803207516670227050f,
00098 0.817584812641143800f, 0.831469595432281490f, 0.844853579998016360f,
00099 0.857728600502014160f, 0.870086967945098880f, 0.881921291351318360f,
00100 0.893224298954010010f, 0.903989315032958980f,
00101 0.914209783077239990f, 0.923879504203796390f, 0.932992815971374510f,
00102 0.941544055938720700f, 0.949528157711029050f, 0.956940352916717530f,
00103 0.963776051998138430f, 0.970031261444091800f,
00104 0.975702106952667240f, 0.980785250663757320f, 0.985277652740478520f,
00105 0.989176511764526370f, 0.992479562759399410f, 0.995184719562530520f,
00106 0.997290432453155520f, 0.998795449733734130f,
00107 0.999698817729949950f, 1.000000000000000000f, 0.999698817729949950f,
00108 0.998795449733734130f, 0.997290432453155520f, 0.995184719562530520f,
00109 0.992479562759399410f, 0.989176511764526370f,
00110 0.985277652740478520f, 0.980785250663757320f, 0.975702106952667240f,
00111 0.970031261444091800f, 0.963776051998138430f, 0.956940352916717530f,
00112 0.949528157711029050f, 0.941544055938720700f,
00113 0.932992815971374510f, 0.923879504203796390f, 0.914209783077239990f,
00114 0.903989315032958980f, 0.893224298954010010f, 0.881921291351318360f,
00115 0.870086967945098880f, 0.857728600502014160f,
00116 0.844853579998016360f, 0.831469595432281490f, 0.817584812641143800f,
00117 0.803207516670227050f, 0.788346409797668460f, 0.773010432720184330f,
00118 0.757208824157714840f, 0.740951120853424070f,
00119 0.724247097969055180f, 0.707106769084930420f, 0.689540565013885500f,
00120 0.671558976173400880f, 0.653172850608825680f, 0.634393274784088130f,
00121 0.615231573581695560f, 0.595699310302734380f,
00122 0.575808167457580570f, 0.555570244789123540f, 0.534997642040252690f,
00123 0.514102756977081300f, 0.492898195981979370f, 0.471396744251251220f,
00124 0.449611335992813110f, 0.427555084228515630f,
00125 0.405241310596466060f, 0.382683426141738890f, 0.359895050525665280f,
00126 0.336889863014221190f, 0.313681751489639280f, 0.290284663438797000f,
00127 0.266712754964828490f, 0.242980182170867920f,
00128 0.219101235270500180f, 0.195090323686599730f, 0.170961886644363400f,
00129 0.146730467677116390f, 0.122410677373409270f, 0.098017141222953796f,
00130 0.073564566671848297f, 0.049067676067352295f,
00131 0.024541229009628296f, 0.000000000000000122f, -0.024541229009628296f,
00132 -0.049067676067352295f, -0.073564566671848297f, -0.098017141222953796f,
00133 -0.122410677373409270f, -0.146730467677116390f,
00134 -0.170961886644363400f, -0.195090323686599730f, -0.219101235270500180f,
00135 -0.242980182170867920f, -0.266712754964828490f, -0.290284663438797000f,
00136 -0.313681751489639280f, -0.336889863014221190f,
00137 -0.359895050525665280f, -0.382683426141738890f, -0.405241310596466060f,
00138 -0.427555084228515630f, -0.449611335992813110f, -0.471396744251251220f,
00139 -0.492898195981979370f, -0.514102756977081300f,
00140 -0.534997642040252690f, -0.555570244789123540f, -0.575808167457580570f,
00141 -0.595699310302734380f, -0.615231573581695560f, -0.634393274784088130f,
00142 -0.653172850608825680f, -0.671558976173400880f,
00143 -0.689540565013885500f, -0.707106769084930420f, -0.724247097969055180f,
00144 -0.740951120853424070f, -0.757208824157714840f, -0.773010432720184330f,
00145 -0.788346409797668460f, -0.803207516670227050f,
00146 -0.817584812641143800f, -0.831469595432281490f, -0.844853579998016360f,
00147 -0.857728600502014160f, -0.870086967945098880f, -0.881921291351318360f,
00148 -0.893224298954010010f, -0.903989315032958980f,
00149 -0.914209783077239990f, -0.923879504203796390f, -0.932992815971374510f,
00150 -0.941544055938720700f, -0.949528157711029050f, -0.956940352916717530f,
00151 -0.963776051998138430f, -0.970031261444091800f,
00152 -0.975702106952667240f, -0.980785250663757320f, -0.985277652740478520f,
00153 -0.989176511764526370f, -0.992479562759399410f, -0.995184719562530520f,
00154 -0.997290432453155520f, -0.998795449733734130f,
00155 -0.999698817729949950f, -1.000000000000000000f, -0.999698817729949950f,
00156 -0.998795449733734130f, -0.997290432453155520f, -0.995184719562530520f,
00157 -0.992479562759399410f, -0.989176511764526370f,
00158 -0.985277652740478520f, -0.980785250663757320f, -0.975702106952667240f,
00159 -0.970031261444091800f, -0.963776051998138430f, -0.956940352916717530f,
00160 -0.949528157711029050f, -0.941544055938720700f,
00161 -0.932992815971374510f, -0.923879504203796390f, -0.914209783077239990f,
00162 -0.903989315032958980f, -0.893224298954010010f, -0.881921291351318360f,
00163 -0.870086967945098880f, -0.857728600502014160f,
00164 -0.844853579998016360f, -0.831469595432281490f, -0.817584812641143800f,
00165 -0.803207516670227050f, -0.788346409797668460f, -0.773010432720184330f,
00166 -0.757208824157714840f, -0.740951120853424070f,
00167 -0.724247097969055180f, -0.707106769084930420f, -0.689540565013885500f,
00168 -0.671558976173400880f, -0.653172850608825680f, -0.634393274784088130f,
00169 -0.615231573581695560f, -0.595699310302734380f,
00170 -0.575808167457580570f, -0.555570244789123540f, -0.534997642040252690f,
00171 -0.514102756977081300f, -0.492898195981979370f, -0.471396744251251220f,
00172 -0.449611335992813110f, -0.427555084228515630f,
00173 -0.405241310596466060f, -0.382683426141738890f, -0.359895050525665280f,
00174 -0.336889863014221190f, -0.313681751489639280f, -0.290284663438797000f,
00175 -0.266712754964828490f, -0.242980182170867920f,
00176 -0.219101235270500180f, -0.195090323686599730f, -0.170961886644363400f,
00177 -0.146730467677116390f, -0.122410677373409270f, -0.098017141222953796f,
00178 -0.073564566671848297f, -0.049067676067352295f,
00179 -0.024541229009628296f, -0.000000000000000245f, 0.024541229009628296f
00180 };
00181
00182
00189 float32_t arm_sin_f32(
00190 float32_t x)
00191 {
00192 float32_t sinVal, fract, in;
00193 uint32_t index;
00194 uint32_t tableSize = (uint32_t) TABLE_SIZE;
00195 float32_t wa, wb, wc, wd;
00196 float32_t a, b, c, d;
00197 float32_t *tablePtr;
00198 int32_t n;
00199 float32_t fractsq, fractby2, fractby6, fractby3, fractsqby2;
00200 float32_t oneminusfractby2;
00201 float32_t frby2xfrsq, frby6xfrsq;
00202
00203
00204
00205 in = x * 0.159154943092f;
00206
00207
00208 n = (int32_t) in;
00209
00210
00211 if(x < 0.0f)
00212 {
00213 n = n - 1;
00214 }
00215
00216
00217 in = in - (float32_t) n;
00218
00219
00220 index = (uint32_t) (tableSize * in);
00221
00222
00223 fract = ((float32_t) tableSize * in) - (float32_t) index;
00224
00225
00226 tablePtr = (float32_t *) & sinTable[index];
00227
00228
00229 a = tablePtr[0];
00230 b = tablePtr[1];
00231 c = tablePtr[2];
00232 d = tablePtr[3];
00233
00234
00235 fractsq = fract * fract;
00236 fractby2 = fract * 0.5f;
00237 fractby6 = fract * 0.166666667f;
00238 fractby3 = fract * 0.3333333333333f;
00239 fractsqby2 = fractsq * 0.5f;
00240 frby2xfrsq = (fractby2) * fractsq;
00241 frby6xfrsq = (fractby6) * fractsq;
00242 oneminusfractby2 = 1.0f - fractby2;
00243 wb = fractsqby2 - fractby3;
00244 wc = (fractsqby2 + fract);
00245 wa = wb - frby6xfrsq;
00246 wb = frby2xfrsq - fractsq;
00247 sinVal = wa * a;
00248 wc = wc - frby2xfrsq;
00249 wd = (frby6xfrsq) - fractby6;
00250 wb = wb + oneminusfractby2;
00251
00252
00253 sinVal = (sinVal + (b * wb)) + ((c * wc) + (d * wd));
00254
00255
00256 return (sinVal);
00257
00258 }
00259