FastMathQ15.cpp 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. #include "FastMathQ15.h"
  2. #include <stdio.h>
  3. #include "Error.h"
  4. #include "arm_math.h"
  5. #include "Test.h"
  6. #define SNR_THRESHOLD 70
  7. /*
  8. Reference patterns are generated with
  9. a double precision computation.
  10. */
  11. #define ABS_ERROR ((q15_t)10)
  12. void FastMathQ15::test_cos_q15()
  13. {
  14. const q15_t *inp = input.ptr();
  15. q15_t *refp = ref.ptr();
  16. q15_t *outp = output.ptr();
  17. int i;
  18. for(i=0; i < ref.nbSamples(); i++)
  19. {
  20. outp[i]=arm_cos_q15(inp[i]);
  21. }
  22. ASSERT_SNR(ref,output,(float32_t)SNR_THRESHOLD);
  23. ASSERT_NEAR_EQ(ref,output,ABS_ERROR);
  24. }
  25. void FastMathQ15::test_sin_q15()
  26. {
  27. const q15_t *inp = input.ptr();
  28. q15_t *refp = ref.ptr();
  29. q15_t *outp = output.ptr();
  30. int i;
  31. for(i=0; i < ref.nbSamples(); i++)
  32. {
  33. outp[i]=arm_sin_q15(inp[i]);
  34. }
  35. ASSERT_SNR(ref,output,(float32_t)SNR_THRESHOLD);
  36. ASSERT_NEAR_EQ(ref,output,ABS_ERROR);
  37. }
  38. void FastMathQ15::test_sqrt_q15()
  39. {
  40. const q15_t *inp = input.ptr();
  41. q15_t *refp = ref.ptr();
  42. q15_t *outp = output.ptr();
  43. arm_status status;
  44. int i;
  45. for(i=0; i < ref.nbSamples(); i++)
  46. {
  47. status=arm_sqrt_q15(inp[i],&outp[i]);
  48. ASSERT_TRUE((status == ARM_MATH_SUCCESS) || ((inp[i] <= 0) && (status == ARM_MATH_ARGUMENT_ERROR)));
  49. }
  50. ASSERT_SNR(ref,output,(float32_t)SNR_THRESHOLD);
  51. ASSERT_NEAR_EQ(ref,output,ABS_ERROR);
  52. }
  53. void FastMathQ15::setUp(Testing::testID_t id,std::vector<Testing::param_t>& paramsArgs,Client::PatternMgr *mgr)
  54. {
  55. switch(id)
  56. {
  57. case FastMathQ15::TEST_COS_Q15_1:
  58. {
  59. input.reload(FastMathQ15::ANGLES1_Q15_ID,mgr);
  60. ref.reload(FastMathQ15::COS1_Q15_ID,mgr);
  61. output.create(ref.nbSamples(),FastMathQ15::OUT_Q15_ID,mgr);
  62. }
  63. break;
  64. case FastMathQ15::TEST_SIN_Q15_2:
  65. {
  66. input.reload(FastMathQ15::ANGLES1_Q15_ID,mgr);
  67. ref.reload(FastMathQ15::SIN1_Q15_ID,mgr);
  68. output.create(ref.nbSamples(),FastMathQ15::OUT_Q15_ID,mgr);
  69. }
  70. break;
  71. case FastMathQ15::TEST_SQRT_Q15_3:
  72. {
  73. input.reload(FastMathQ15::SQRTINPUT1_Q15_ID,mgr);
  74. ref.reload(FastMathQ15::SQRT1_Q15_ID,mgr);
  75. output.create(ref.nbSamples(),FastMathQ15::OUT_Q15_ID,mgr);
  76. }
  77. break;
  78. }
  79. }
  80. void FastMathQ15::tearDown(Testing::testID_t id,Client::PatternMgr *mgr)
  81. {
  82. output.dump(mgr);
  83. }