You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

99 lines
2.1KB

  1. #include <functional>
  2. #include <time.h>
  3. #include <cmath>
  4. #include <limits>
  5. #include "HilbertFilterDesigner.h"
  6. #include "AudioMath.h"
  7. #include "BiquadParams.h"
  8. #include "BiquadFilter.h"
  9. #include "BiquadState.h"
  10. #include "FrequencyShifter.h"
  11. #include "TestComposite.h"
  12. using Shifter = FrequencyShifter<TestComposite>;
  13. #include "MeasureTime.h"
  14. static void test1()
  15. {
  16. double d = .1;
  17. srand(57);
  18. const double scale = 1.0 / RAND_MAX;
  19. MeasureTime<float>::run("test1 null", [&d, scale]() {
  20. return TestBuffers<float>::get();
  21. }, 1);
  22. MeasureTime<float>::run("test1 sin", []() {
  23. float x = std::sin(TestBuffers<float>::get());
  24. return x;
  25. }, 1);
  26. MeasureTime<double>::run("test1 sin double", []() {
  27. float x = std::sin(TestBuffers<float>::get());
  28. return x;
  29. }, 1);
  30. MeasureTime<float>::run("test1 sinx2", []() {
  31. float x = std::sin(TestBuffers<float>::get());
  32. x = std::sin(x);
  33. return x;
  34. }, 1);
  35. MeasureTime<float>::run("mult", []() {
  36. float x = TestBuffers<float>::get();
  37. float y = TestBuffers<float>::get();
  38. return x * y;
  39. }, 1);
  40. MeasureTime<float>::run("div", []() {
  41. float x = TestBuffers<float>::get();
  42. float y = TestBuffers<float>::get();
  43. return x / y;
  44. }, 1);
  45. }
  46. template <typename T>
  47. static void testHilbert()
  48. {
  49. BiquadParams<T, 3> paramsSin;
  50. BiquadParams<T, 3> paramsCos;
  51. BiquadState<T, 3> state;
  52. HilbertFilterDesigner<T>::design(44100, paramsSin, paramsCos);
  53. MeasureTime<T>::run("hilbert", [&state, &paramsSin]() {
  54. T d = BiquadFilter<T>::run(TestBuffers<T>::get(), state, paramsSin);
  55. return d;
  56. }, 1);
  57. }
  58. void testShifter()
  59. {
  60. Shifter fs;
  61. fs.setSampleRate(44100);
  62. fs.init();
  63. fs.inputs[Shifter::AUDIO_INPUT].value = 0;
  64. MeasureTime<float>::run("shifter", [&fs]() {
  65. fs.inputs[Shifter::AUDIO_INPUT].value = TestBuffers<float>::get();
  66. fs.step();
  67. return fs.outputs[Shifter::SIN_OUTPUT].value;
  68. }, 1);
  69. }
  70. void perfTest()
  71. {
  72. test1();
  73. testHilbert<float>();
  74. testHilbert<double>();
  75. testShifter();
  76. }