libcm is a C development framework with an emphasis on audio signal processing applications.
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.

cmComplexTypes.h 3.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. //| Copyright: (C) 2009-2020 Kevin Larke <contact AT larke DOT org>
  2. //| License: GNU GPL version 3.0 or above. See the accompanying LICENSE file.
  3. #ifndef cmComplexTypes_h
  4. #define cmComplexTypes_h
  5. #ifdef __cplusplus
  6. extern "C" {
  7. #endif
  8. #include <complex.h>
  9. #include <fftw3.h>
  10. //( { file_desc: "Constants and functions used for working with complex values." kw:[base math] }
  11. #if CM_FLOAT_SMP == 1
  12. #define cmCabsS cabsf
  13. #define cmCatanS catanf
  14. #define cmCrealS crealf
  15. #define cmCimagS cimagf
  16. #define cmCargS cargf
  17. #define cmCconjS conjf
  18. #define cmFftPlanAllocS fftwf_plan_dft_r2c_1d
  19. #define cmFft1dPlanAllocS fftwf_plan_dft_1d
  20. #define cmIFftPlanAllocS fftwf_plan_dft_c2r_1d
  21. #define cmFftPlanFreeS fftwf_destroy_plan
  22. #define cmFftMallocS fftwf_malloc
  23. #define cmFftFreeMemS fftwf_free
  24. #define cmFftExecuteS fftwf_execute
  25. typedef fftwf_plan cmFftPlanS_t;
  26. #else
  27. #define cmCabsS cabs
  28. #define cmCatanS catan
  29. #define cmCrealS creal
  30. #define cmCimagS cimag
  31. #define cmCargS carg
  32. #define cmCconjS conj
  33. #define cmFftPlanAllocS fftw_plan_dft_r2c_1d
  34. #define cmFft1dPlanAllocS fftw_plan_dft_1d
  35. #define cmIFftPlanAllocS fftw_plan_dft_c2r_1d
  36. #define cmFftPlanFreeS fftw_destroy_plan
  37. #define cmFftMallocS fftw_malloc
  38. #define cmFftFreeMemS fftw_free
  39. #define cmFftExecuteS fftw_execute
  40. typedef fftw_plan cmFftPlanS_t;
  41. #endif
  42. //-----------------------------------------------------------------
  43. //-----------------------------------------------------------------
  44. //-----------------------------------------------------------------
  45. #if CM_FLOAT_REAL == 1
  46. #define cmCabsR cabsf
  47. #define cmCatanR catanf
  48. #define cmCrealR crealf
  49. #define cmCimagR cimagf
  50. #define cmCargR cargf
  51. #define cmCconjR conjf
  52. #define cmFftPlanAllocR fftwf_plan_dft_r2c_1d
  53. #define cmFft1dPlanAllocR fftwf_plan_dft_1d
  54. #define cmIFftPlanAllocR fftwf_plan_dft_c2r_1d
  55. #define cmFftPlanFreeR fftwf_destroy_plan
  56. #define cmFftMallocR fftwf_malloc
  57. #define cmFftFreeMemR fftwf_free
  58. #define cmFftExecuteR fftwf_execute
  59. typedef fftwf_plan cmFftPlanR_t;
  60. #else
  61. #define cmCabsR cabs
  62. #define cmCatanR catan
  63. #define cmCrealR creal
  64. #define cmCimagR cimag
  65. #define cmCargR carg
  66. #define cmCconjR conj
  67. #define cmFftPlanAllocR fftw_plan_dft_r2c_1d
  68. #define cmFft1dPlanAllocR fftw_plan_dft_1d
  69. #define cmIFftPlanAllocR fftw_plan_dft_c2r_1d
  70. #define cmFftPlanFreeR fftw_destroy_plan
  71. #define cmFftMallocR fftw_malloc
  72. #define cmFftFreeMemR fftw_free
  73. #define cmFftExecuteR fftw_execute
  74. typedef fftw_plan cmFftPlanR_t;
  75. #endif
  76. void cmVOCR_MultVVV( cmComplexR_t* y, const cmComplexS_t* x0, const cmComplexR_t* x1, unsigned n );
  77. void cmVOCR_MultVFV( cmComplexR_t* y, const float* x, unsigned n );
  78. void cmVOCR_DivVFV( cmComplexR_t* y, const float_t* x, unsigned n );
  79. void cmVOCR_Abs( cmSample_t* y, const cmComplexR_t* x, unsigned n );
  80. void cmVOCR_MultVS( cmComplexR_t* y, cmReal_t v, unsigned n );
  81. void cmVOCR_DivVS( cmComplexR_t* y, cmReal_t v, unsigned n );
  82. //)
  83. #ifdef __cplusplus
  84. }
  85. #endif
  86. #endif