00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 #include "arm_math.h"
00031
00051 static const int32_t sinTableQ31[360] = {
00052
00053 0x0, 0xfdc41e9b, 0xfb8869ce, 0xf94d0e2e, 0xf7123849, 0xf4d814a4, 0xf29ecfb2,
00054 0xf06695da,
00055 0xee2f9369, 0xebf9f498, 0xe9c5e582, 0xe7939223, 0xe5632654, 0xe334cdc9,
00056 0xe108b40d, 0xdedf047d,
00057 0xdcb7ea46, 0xda939061, 0xd8722192, 0xd653c860, 0xd438af17, 0xd220ffc0,
00058 0xd00ce422, 0xcdfc85bb,
00059 0xcbf00dbe, 0xc9e7a512, 0xc7e3744b, 0xc5e3a3a9, 0xc3e85b18, 0xc1f1c224,
00060 0xc0000000, 0xbe133b7c,
00061 0xbc2b9b05, 0xba4944a2, 0xb86c5df0, 0xb6950c1e, 0xb4c373ee, 0xb2f7b9af,
00062 0xb1320139, 0xaf726def,
00063 0xadb922b7, 0xac0641fb, 0xaa59eda4, 0xa8b4471a, 0xa7156f3c, 0xa57d8666,
00064 0xa3ecac65, 0xa263007d,
00065 0xa0e0a15f, 0x9f65ad2d, 0x9df24175, 0x9c867b2c, 0x9b2276b0, 0x99c64fc5,
00066 0x98722192, 0x9726069c,
00067 0x95e218c9, 0x94a6715d, 0x937328f5, 0x92485786, 0x9126145f, 0x900c7621,
00068 0x8efb92c2, 0x8df37f8b,
00069 0x8cf45113, 0x8bfe1b3f, 0x8b10f144, 0x8a2ce59f, 0x89520a1a, 0x88806fc4,
00070 0x87b826f7, 0x86f93f50,
00071 0x8643c7b3, 0x8597ce46, 0x84f56073, 0x845c8ae3, 0x83cd5982, 0x8347d77b,
00072 0x82cc0f36, 0x825a0a5b,
00073 0x81f1d1ce, 0x81936daf, 0x813ee55b, 0x80f43f69, 0x80b381ac, 0x807cb130,
00074 0x804fd23a, 0x802ce84c,
00075 0x8013f61d, 0x8004fda0, 0x80000000, 0x8004fda0, 0x8013f61d, 0x802ce84c,
00076 0x804fd23a, 0x807cb130,
00077 0x80b381ac, 0x80f43f69, 0x813ee55b, 0x81936daf, 0x81f1d1ce, 0x825a0a5b,
00078 0x82cc0f36, 0x8347d77b,
00079 0x83cd5982, 0x845c8ae3, 0x84f56073, 0x8597ce46, 0x8643c7b3, 0x86f93f50,
00080 0x87b826f7, 0x88806fc4,
00081 0x89520a1a, 0x8a2ce59f, 0x8b10f144, 0x8bfe1b3f, 0x8cf45113, 0x8df37f8b,
00082 0x8efb92c2, 0x900c7621,
00083 0x9126145f, 0x92485786, 0x937328f5, 0x94a6715d, 0x95e218c9, 0x9726069c,
00084 0x98722192, 0x99c64fc5,
00085 0x9b2276b0, 0x9c867b2c, 0x9df24175, 0x9f65ad2d, 0xa0e0a15f, 0xa263007d,
00086 0xa3ecac65, 0xa57d8666,
00087 0xa7156f3c, 0xa8b4471a, 0xaa59eda4, 0xac0641fb, 0xadb922b7, 0xaf726def,
00088 0xb1320139, 0xb2f7b9af,
00089 0xb4c373ee, 0xb6950c1e, 0xb86c5df0, 0xba4944a2, 0xbc2b9b05, 0xbe133b7c,
00090 0xc0000000, 0xc1f1c224,
00091 0xc3e85b18, 0xc5e3a3a9, 0xc7e3744b, 0xc9e7a512, 0xcbf00dbe, 0xcdfc85bb,
00092 0xd00ce422, 0xd220ffc0,
00093 0xd438af17, 0xd653c860, 0xd8722192, 0xda939061, 0xdcb7ea46, 0xdedf047d,
00094 0xe108b40d, 0xe334cdc9,
00095 0xe5632654, 0xe7939223, 0xe9c5e582, 0xebf9f498, 0xee2f9369, 0xf06695da,
00096 0xf29ecfb2, 0xf4d814a4,
00097 0xf7123849, 0xf94d0e2e, 0xfb8869ce, 0xfdc41e9b, 0x0, 0x23be165, 0x4779632,
00098 0x6b2f1d2,
00099 0x8edc7b7, 0xb27eb5c, 0xd61304e, 0xf996a26, 0x11d06c97, 0x14060b68,
00100 0x163a1a7e, 0x186c6ddd,
00101 0x1a9cd9ac, 0x1ccb3237, 0x1ef74bf3, 0x2120fb83, 0x234815ba, 0x256c6f9f,
00102 0x278dde6e, 0x29ac37a0,
00103 0x2bc750e9, 0x2ddf0040, 0x2ff31bde, 0x32037a45, 0x340ff242, 0x36185aee,
00104 0x381c8bb5, 0x3a1c5c57,
00105 0x3c17a4e8, 0x3e0e3ddc, 0x40000000, 0x41ecc484, 0x43d464fb, 0x45b6bb5e,
00106 0x4793a210, 0x496af3e2,
00107 0x4b3c8c12, 0x4d084651, 0x4ecdfec7, 0x508d9211, 0x5246dd49, 0x53f9be05,
00108 0x55a6125c, 0x574bb8e6,
00109 0x58ea90c4, 0x5a82799a, 0x5c13539b, 0x5d9cff83, 0x5f1f5ea1, 0x609a52d3,
00110 0x620dbe8b, 0x637984d4,
00111 0x64dd8950, 0x6639b03b, 0x678dde6e, 0x68d9f964, 0x6a1de737, 0x6b598ea3,
00112 0x6c8cd70b, 0x6db7a87a,
00113 0x6ed9eba1, 0x6ff389df, 0x71046d3e, 0x720c8075, 0x730baeed, 0x7401e4c1,
00114 0x74ef0ebc, 0x75d31a61,
00115 0x76adf5e6, 0x777f903c, 0x7847d909, 0x7906c0b0, 0x79bc384d, 0x7a6831ba,
00116 0x7b0a9f8d, 0x7ba3751d,
00117 0x7c32a67e, 0x7cb82885, 0x7d33f0ca, 0x7da5f5a5, 0x7e0e2e32, 0x7e6c9251,
00118 0x7ec11aa5, 0x7f0bc097,
00119 0x7f4c7e54, 0x7f834ed0, 0x7fb02dc6, 0x7fd317b4, 0x7fec09e3, 0x7ffb0260,
00120 0x7fffffff, 0x7ffb0260,
00121 0x7fec09e3, 0x7fd317b4, 0x7fb02dc6, 0x7f834ed0, 0x7f4c7e54, 0x7f0bc097,
00122 0x7ec11aa5, 0x7e6c9251,
00123 0x7e0e2e32, 0x7da5f5a5, 0x7d33f0ca, 0x7cb82885, 0x7c32a67e, 0x7ba3751d,
00124 0x7b0a9f8d, 0x7a6831ba,
00125 0x79bc384d, 0x7906c0b0, 0x7847d909, 0x777f903c, 0x76adf5e6, 0x75d31a61,
00126 0x74ef0ebc, 0x7401e4c1,
00127 0x730baeed, 0x720c8075, 0x71046d3e, 0x6ff389df, 0x6ed9eba1, 0x6db7a87a,
00128 0x6c8cd70b, 0x6b598ea3,
00129 0x6a1de737, 0x68d9f964, 0x678dde6e, 0x6639b03b, 0x64dd8950, 0x637984d4,
00130 0x620dbe8b, 0x609a52d3,
00131 0x5f1f5ea1, 0x5d9cff83, 0x5c13539b, 0x5a82799a, 0x58ea90c4, 0x574bb8e6,
00132 0x55a6125c, 0x53f9be05,
00133 0x5246dd49, 0x508d9211, 0x4ecdfec7, 0x4d084651, 0x4b3c8c12, 0x496af3e2,
00134 0x4793a210, 0x45b6bb5e,
00135 0x43d464fb, 0x41ecc484, 0x40000000, 0x3e0e3ddc, 0x3c17a4e8, 0x3a1c5c57,
00136 0x381c8bb5, 0x36185aee,
00137 0x340ff242, 0x32037a45, 0x2ff31bde, 0x2ddf0040, 0x2bc750e9, 0x29ac37a0,
00138 0x278dde6e, 0x256c6f9f,
00139 0x234815ba, 0x2120fb83, 0x1ef74bf3, 0x1ccb3237, 0x1a9cd9ac, 0x186c6ddd,
00140 0x163a1a7e, 0x14060b68,
00141 0x11d06c97, 0xf996a26, 0xd61304e, 0xb27eb5c, 0x8edc7b7, 0x6b2f1d2,
00142 0x4779632, 0x23be165,
00143
00144
00145 };
00146
00157 static const int32_t cosTableQ31[360] = {
00158 0x80000000, 0x8004fda0, 0x8013f61d, 0x802ce84c, 0x804fd23a, 0x807cb130,
00159 0x80b381ac, 0x80f43f69,
00160 0x813ee55b, 0x81936daf, 0x81f1d1ce, 0x825a0a5b, 0x82cc0f36, 0x8347d77b,
00161 0x83cd5982, 0x845c8ae3,
00162 0x84f56073, 0x8597ce46, 0x8643c7b3, 0x86f93f50, 0x87b826f7, 0x88806fc4,
00163 0x89520a1a, 0x8a2ce59f,
00164 0x8b10f144, 0x8bfe1b3f, 0x8cf45113, 0x8df37f8b, 0x8efb92c2, 0x900c7621,
00165 0x9126145f, 0x92485786,
00166 0x937328f5, 0x94a6715d, 0x95e218c9, 0x9726069c, 0x98722192, 0x99c64fc5,
00167 0x9b2276b0, 0x9c867b2c,
00168 0x9df24175, 0x9f65ad2d, 0xa0e0a15f, 0xa263007d, 0xa3ecac65, 0xa57d8666,
00169 0xa7156f3c, 0xa8b4471a,
00170 0xaa59eda4, 0xac0641fb, 0xadb922b7, 0xaf726def, 0xb1320139, 0xb2f7b9af,
00171 0xb4c373ee, 0xb6950c1e,
00172 0xb86c5df0, 0xba4944a2, 0xbc2b9b05, 0xbe133b7c, 0xc0000000, 0xc1f1c224,
00173 0xc3e85b18, 0xc5e3a3a9,
00174 0xc7e3744b, 0xc9e7a512, 0xcbf00dbe, 0xcdfc85bb, 0xd00ce422, 0xd220ffc0,
00175 0xd438af17, 0xd653c860,
00176 0xd8722192, 0xda939061, 0xdcb7ea46, 0xdedf047d, 0xe108b40d, 0xe334cdc9,
00177 0xe5632654, 0xe7939223,
00178 0xe9c5e582, 0xebf9f498, 0xee2f9369, 0xf06695da, 0xf29ecfb2, 0xf4d814a4,
00179 0xf7123849, 0xf94d0e2e,
00180 0xfb8869ce, 0xfdc41e9b, 0x0, 0x23be165, 0x4779632, 0x6b2f1d2, 0x8edc7b7,
00181 0xb27eb5c,
00182 0xd61304e, 0xf996a26, 0x11d06c97, 0x14060b68, 0x163a1a7e, 0x186c6ddd,
00183 0x1a9cd9ac, 0x1ccb3237,
00184 0x1ef74bf3, 0x2120fb83, 0x234815ba, 0x256c6f9f, 0x278dde6e, 0x29ac37a0,
00185 0x2bc750e9, 0x2ddf0040,
00186 0x2ff31bde, 0x32037a45, 0x340ff242, 0x36185aee, 0x381c8bb5, 0x3a1c5c57,
00187 0x3c17a4e8, 0x3e0e3ddc,
00188 0x40000000, 0x41ecc484, 0x43d464fb, 0x45b6bb5e, 0x4793a210, 0x496af3e2,
00189 0x4b3c8c12, 0x4d084651,
00190 0x4ecdfec7, 0x508d9211, 0x5246dd49, 0x53f9be05, 0x55a6125c, 0x574bb8e6,
00191 0x58ea90c4, 0x5a82799a,
00192 0x5c13539b, 0x5d9cff83, 0x5f1f5ea1, 0x609a52d3, 0x620dbe8b, 0x637984d4,
00193 0x64dd8950, 0x6639b03b,
00194 0x678dde6e, 0x68d9f964, 0x6a1de737, 0x6b598ea3, 0x6c8cd70b, 0x6db7a87a,
00195 0x6ed9eba1, 0x6ff389df,
00196 0x71046d3e, 0x720c8075, 0x730baeed, 0x7401e4c1, 0x74ef0ebc, 0x75d31a61,
00197 0x76adf5e6, 0x777f903c,
00198 0x7847d909, 0x7906c0b0, 0x79bc384d, 0x7a6831ba, 0x7b0a9f8d, 0x7ba3751d,
00199 0x7c32a67e, 0x7cb82885,
00200 0x7d33f0ca, 0x7da5f5a5, 0x7e0e2e32, 0x7e6c9251, 0x7ec11aa5, 0x7f0bc097,
00201 0x7f4c7e54, 0x7f834ed0,
00202 0x7fb02dc6, 0x7fd317b4, 0x7fec09e3, 0x7ffb0260, 0x7fffffff, 0x7ffb0260,
00203 0x7fec09e3, 0x7fd317b4,
00204 0x7fb02dc6, 0x7f834ed0, 0x7f4c7e54, 0x7f0bc097, 0x7ec11aa5, 0x7e6c9251,
00205 0x7e0e2e32, 0x7da5f5a5,
00206 0x7d33f0ca, 0x7cb82885, 0x7c32a67e, 0x7ba3751d, 0x7b0a9f8d, 0x7a6831ba,
00207 0x79bc384d, 0x7906c0b0,
00208 0x7847d909, 0x777f903c, 0x76adf5e6, 0x75d31a61, 0x74ef0ebc, 0x7401e4c1,
00209 0x730baeed, 0x720c8075,
00210 0x71046d3e, 0x6ff389df, 0x6ed9eba1, 0x6db7a87a, 0x6c8cd70b, 0x6b598ea3,
00211 0x6a1de737, 0x68d9f964,
00212 0x678dde6e, 0x6639b03b, 0x64dd8950, 0x637984d4, 0x620dbe8b, 0x609a52d3,
00213 0x5f1f5ea1, 0x5d9cff83,
00214 0x5c13539b, 0x5a82799a, 0x58ea90c4, 0x574bb8e6, 0x55a6125c, 0x53f9be05,
00215 0x5246dd49, 0x508d9211,
00216 0x4ecdfec7, 0x4d084651, 0x4b3c8c12, 0x496af3e2, 0x4793a210, 0x45b6bb5e,
00217 0x43d464fb, 0x41ecc484,
00218 0x40000000, 0x3e0e3ddc, 0x3c17a4e8, 0x3a1c5c57, 0x381c8bb5, 0x36185aee,
00219 0x340ff242, 0x32037a45,
00220 0x2ff31bde, 0x2ddf0040, 0x2bc750e9, 0x29ac37a0, 0x278dde6e, 0x256c6f9f,
00221 0x234815ba, 0x2120fb83,
00222 0x1ef74bf3, 0x1ccb3237, 0x1a9cd9ac, 0x186c6ddd, 0x163a1a7e, 0x14060b68,
00223 0x11d06c97, 0xf996a26,
00224 0xd61304e, 0xb27eb5c, 0x8edc7b7, 0x6b2f1d2, 0x4779632, 0x23be165, 0x0,
00225 0xfdc41e9b,
00226 0xfb8869ce, 0xf94d0e2e, 0xf7123849, 0xf4d814a4, 0xf29ecfb2, 0xf06695da,
00227 0xee2f9369, 0xebf9f498,
00228 0xe9c5e582, 0xe7939223, 0xe5632654, 0xe334cdc9, 0xe108b40d, 0xdedf047d,
00229 0xdcb7ea46, 0xda939061,
00230 0xd8722192, 0xd653c860, 0xd438af17, 0xd220ffc0, 0xd00ce422, 0xcdfc85bb,
00231 0xcbf00dbe, 0xc9e7a512,
00232 0xc7e3744b, 0xc5e3a3a9, 0xc3e85b18, 0xc1f1c224, 0xc0000000, 0xbe133b7c,
00233 0xbc2b9b05, 0xba4944a2,
00234 0xb86c5df0, 0xb6950c1e, 0xb4c373ee, 0xb2f7b9af, 0xb1320139, 0xaf726def,
00235 0xadb922b7, 0xac0641fb,
00236 0xaa59eda4, 0xa8b4471a, 0xa7156f3c, 0xa57d8666, 0xa3ecac65, 0xa263007d,
00237 0xa0e0a15f, 0x9f65ad2d,
00238 0x9df24175, 0x9c867b2c, 0x9b2276b0, 0x99c64fc5, 0x98722192, 0x9726069c,
00239 0x95e218c9, 0x94a6715d,
00240 0x937328f5, 0x92485786, 0x9126145f, 0x900c7621, 0x8efb92c2, 0x8df37f8b,
00241 0x8cf45113, 0x8bfe1b3f,
00242 0x8b10f144, 0x8a2ce59f, 0x89520a1a, 0x88806fc4, 0x87b826f7, 0x86f93f50,
00243 0x8643c7b3, 0x8597ce46,
00244 0x84f56073, 0x845c8ae3, 0x83cd5982, 0x8347d77b, 0x82cc0f36, 0x825a0a5b,
00245 0x81f1d1ce, 0x81936daf,
00246 0x813ee55b, 0x80f43f69, 0x80b381ac, 0x807cb130, 0x804fd23a, 0x802ce84c,
00247 0x8013f61d, 0x8004fda0,
00248
00249 };
00250
00251
00264 void arm_sin_cos_q31(
00265 q31_t theta,
00266 q31_t * pSinVal,
00267 q31_t * pCosVal)
00268 {
00269 q31_t x0;
00270 q31_t y0, y1;
00271 q31_t xSpacing = INPUT_SPACING;
00272 uint32_t i;
00273 q31_t oneByXSpacing;
00274 q31_t out;
00275 uint32_t sign_bits;
00276 uint32_t firstX = 0x80000000;
00277
00278
00279 i = ((uint32_t) theta - firstX) / (uint32_t) xSpacing;
00280
00281
00282 x0 = (q31_t) firstX + ((q31_t) i * xSpacing);
00283
00284
00285 y0 = sinTableQ31[i];
00286 y1 = sinTableQ31[i + 1u];
00287
00288
00289
00290 sign_bits = 8u;
00291 oneByXSpacing = 0x5A000000;
00292
00293
00294 out =
00295 (((q31_t) (((q63_t) (theta - x0) * oneByXSpacing) >> 32)) << sign_bits);
00296
00297
00298 *pSinVal = y0 + ((q31_t) (((q63_t) (y1 - y0) * out) >> 30));
00299
00300
00301 y0 = cosTableQ31[i];
00302 y1 = cosTableQ31[i + 1u];
00303
00304
00305 *pCosVal = y0 + ((q31_t) (((q63_t) (y1 - y0) * out) >> 30));
00306
00307 }
00308