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.

79 lines
2.2KB

  1. #include "HilbertFilterDesigner.h"
  2. #include "AudioMath.h"
  3. #include "BiquadParams.h"
  4. #include "BiquadFilter.h"
  5. #include "BiquadState.h"
  6. #include <cmath>
  7. #include <algorithm>
  8. #include <assert.h>
  9. // test that we can hook it up
  10. template<typename T>
  11. void test0()
  12. {
  13. BiquadParams<T, 3> paramsSin;
  14. BiquadParams<T, 3> paramsCos;
  15. HilbertFilterDesigner<T>::design(44100, paramsSin, paramsCos);
  16. }
  17. // test that filter designer does something (more than just generate zero
  18. template<typename T>
  19. void test1()
  20. {
  21. BiquadParams<T, 3> paramsSin;
  22. BiquadParams<T, 3> paramsCos;
  23. HilbertFilterDesigner<T>::design(44100, paramsSin, paramsCos);
  24. const double delta = .00001;
  25. for (int i = 0; i < 3; ++i) {
  26. assert(!AudioMath::closeTo(0, (paramsSin.A1(i)), delta));
  27. assert(!AudioMath::closeTo(0, (paramsSin.A2(i)), delta));
  28. assert(!AudioMath::closeTo(0, (paramsSin.B0(i)), delta));
  29. assert(!AudioMath::closeTo(0, (paramsSin.B1(i)), delta));
  30. assert(!AudioMath::closeTo(0, (paramsSin.B2(i)), delta));
  31. assert(!AudioMath::closeTo(0, (paramsCos.A1(i)), delta));
  32. assert(!AudioMath::closeTo(0, (paramsCos.A2(i)), delta));
  33. assert(!AudioMath::closeTo(0, (paramsCos.B0(i)), delta));
  34. assert(!AudioMath::closeTo(0, (paramsCos.B1(i)), delta));
  35. assert(!AudioMath::closeTo(0, (paramsCos.B2(i)), delta));
  36. }
  37. }
  38. // see if it passes audio
  39. template <typename T>
  40. void test2()
  41. {
  42. BiquadParams<T, 3> paramsSin;
  43. BiquadParams<T, 3> paramsCos;
  44. BiquadState<T, 3> stateSin;
  45. BiquadState<T, 3> stateCos;
  46. HilbertFilterDesigner<T>::design(44100, paramsSin, paramsCos);
  47. // const T hilbertSin = BiquadFilter<T>::run(input, hilbertFilterStateSin, hilbertFilterParamsSin);
  48. T input = 1;
  49. // T t = BiquadFilter<T>::run(input, state, paramsSin);
  50. for (int i = 0; i < 10; ++i) {
  51. T ts = BiquadFilter<T>::run(input, stateSin, paramsSin);
  52. T tc = BiquadFilter<T>::run(input, stateCos, paramsCos);
  53. assert(!AudioMath::closeTo(ts, 0, .00001));
  54. assert(!AudioMath::closeTo(tc, 0, .00001));
  55. }
  56. }
  57. template<typename T>
  58. void test()
  59. {
  60. test0<T>();
  61. test1<T>();
  62. test2<T>();
  63. }
  64. void testHilbert()
  65. {
  66. test<double>();
  67. test<float>();
  68. }