sin_table.c 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. #include "os/os_types.h"
  2. #include "math/fix_math.h"
  3. /*
  4. 1.cos和sin转换公式一
  5. sin[(pi/2)-x]=cosx;
  6. cos[(pi/2)-x]=sinx;
  7. 2.cos和sin转换公式二
  8. cos[(pi/2)+x]=-sinx;
  9. sin[(pi/2)+x]=cosx;
  10. */
  11. static s16 sinTable[] =
  12. { 0, 286, 572, 857, 1143, 1428, 1713, 1997, 2280, 2563, 2845, 3126, 3406, 3686,
  13. 3964, 4240, 4516, 4790, 5063, 5334, 5604, 5872, 6138, 6402, 6664, 6924, 7182,
  14. 7438, 7692, 7943, 8192, 8438, 8682, 8923, 9162, 9397, 9630, 9860, 10087,
  15. 10311, 10531, 10749, 10963, 11174, 11381, 11585, 11786, 11982, 12176, 12365,
  16. 12551, 12733, 12911, 13085, 13255, 13421, 13583, 13741, 13894, 14044, 14189,
  17. 14330, 14466, 14598, 14726, 14849, 14968, 15082, 15191, 15296, 15396, 15491,
  18. 15582, 15668, 15749, 15826, 15897, 15964, 16026, 16083, 16135, 16182, 16225,
  19. 16262, 16294, 16322, 16344, 16362, 16374, 16382, 16384, 16382, 16374, 16362,
  20. 16344, 16322, 16294, 16262, 16225, 16182, 16135, 16083, 16026, 15964, 15897,
  21. 15826, 15749, 15668, 15582, 15491, 15396, 15296, 15191, 15082, 14968, 14849,
  22. 14726, 14598, 14466, 14330, 14189, 14044, 13894, 13741, 13583, 13421, 13255,
  23. 13085, 12911, 12733, 12551, 12365, 12176, 11982, 11786, 11585, 11381, 11174,
  24. 10963, 10749, 10531, 10311, 10087, 9860, 9630, 9397, 9162, 8923, 8682, 8438,
  25. 8192, 7943, 7692, 7438, 7182, 6924, 6664, 6402, 6138, 5872, 5604, 5334, 5063,
  26. 4790, 4516, 4240, 3964, 3686, 3406, 3126, 2845, 2563, 2280, 1997, 1713, 1428,
  27. 1143, 857, 572, 286, 0, -286, -572, -857, -1143, -1428, -1713, -1997, -2280,
  28. -2563, -2845, -3126, -3406, -3686, -3964, -4240, -4516, -4790, -5063, -5334,
  29. -5604, -5872, -6138, -6402, -6664, -6924, -7182, -7438, -7692, -7943, -8192,
  30. -8438, -8682, -8923, -9162, -9397, -9630, -9860, -10087, -10311, -10531,
  31. -10749, -10963, -11174, -11381, -11585, -11786, -11982, -12176, -12365,
  32. -12551, -12733, -12911, -13085, -13255, -13421, -13583, -13741, -13894,
  33. -14044, -14189, -14330, -14466, -14598, -14726, -14849, -14968, -15082,
  34. -15191, -15296, -15396, -15491, -15582, -15668, -15749, -15826, -15897,
  35. -15964, -16026, -16083, -16135, -16182, -16225, -16262, -16294, -16322,
  36. -16344, -16362, -16374, -16382, -16384, -16382, -16374, -16362, -16344,
  37. -16322, -16294, -16262, -16225, -16182, -16135, -16083, -16026, -15964,
  38. -15897, -15826, -15749, -15668, -15582, -15491, -15396, -15296, -15191,
  39. -15082, -14968, -14849, -14726, -14598, -14466, -14330, -14189, -14044,
  40. -13894, -13741, -13583, -13421, -13255, -13085, -12911, -12733, -12551,
  41. -12365, -12176, -11982, -11786, -11585, -11381, -11174, -10963, -10749,
  42. -10531, -10311, -10087, -9860, -9630, -9397, -9162, -8923, -8682, -8438,
  43. -8192, -7943, -7692, -7438, -7182, -6924, -6664, -6402, -6138, -5872, -5604,
  44. -5334, -5063, -4790, -4516, -4240, -3964, -3686, -3406, -3126, -2845, -2563,
  45. -2280, -1997, -1713, -1428, -1143, -857, -572, -286, 0 };
  46. void SinCos_Lut(s16q5_t angle, s16q14_t *s, s16q14_t *c) {
  47. u16 angle_degree = angle >> 5; //去掉小数部分
  48. if ((angle & 0x1F) > 16) {
  49. angle_degree += 1;
  50. }
  51. angle_degree = angle_degree % 360;
  52. *s = sinTable[angle_degree];
  53. //cosx = sin[(pi/2)+x]
  54. angle_degree = (angle_degree + 90) % 360;
  55. *c = sinTable[angle_degree];
  56. }