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.

cmVectOps.h 3.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  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 cmVectOps_h
  4. #define cmVectOps_h
  5. #ifdef OS_OSX
  6. #include <Accelerate/Accelerate.h>
  7. typedef __CLPK_integer int_lap_t;
  8. #else
  9. #ifdef __cplusplus
  10. extern "C" {
  11. #endif
  12. typedef int int_lap_t;
  13. extern int ilaenv_(int*, char *, char *, int*, int*, int*, int*, int, int );
  14. extern void dgetrf_( int*, int*, double*, int*, int*, int* );
  15. extern void dgetri_( int* arn, double* a, int* lda, int* ipiv, double* w, int* wn, int* info );
  16. extern void sgetrf_( int*, int*, float*, int*, int*, int* );
  17. extern void sgetri_( int* arn, float* a, int* lda, int* ipiv, float* w, int* wn, int* info );
  18. extern void dgesv_( int*, int*, double*, int*, int*, double*, int*, int* );
  19. extern void sgesv_( int*, int*, float*, int*, int*, float*, int*, int* );
  20. extern void dpotrf_(char*, int*, double*, int*, int* );
  21. extern void spotrf_(char*, int*, float*, int*, int* );
  22. #ifdef __cplusplus
  23. }
  24. #endif
  25. #endif
  26. #ifdef __cplusplus
  27. extern "C" {
  28. #endif
  29. // Constants for use with cmVOX_LPSinc()
  30. enum { kNoLpSincFlags=0, kHighPass_LPSincFl=0x01, kNormalize_LPSincFl=0x02 };
  31. // Constants for use with cmVOX_MelMask()
  32. enum{ kNoMelFlags=0, kShiftMelFl=0x01, kNormalizeMelFl=0x02 };
  33. // Constants for use with cmVOX_TerhardtThresholdMask()
  34. enum { kNoTtmFlags=0, kModifiedTtmFl=0x01 };
  35. // Constants for cmVOX_MultMMM1() and cmVOX_MultMMM2()
  36. enum { kTransposeM0Fl=0x01, kTransposeM1Fl=0x02 };
  37. #define kDefaultMelBandCnt (36)
  38. #define kDefaultBarkBandCnt (24)
  39. #include "cmVectOpsTemplateMain.h"
  40. #define cmDefaultFieldWidth (10)
  41. #define cmDefaultDecPlCnt (4)
  42. // Flags for extended print control
  43. #define cmPrintNoColLabelsFl (0)
  44. #define cmPrintMatlabLabelsFl (1)
  45. #define cmPrintShortLabelsFl (2)
  46. void cmVOI_Print( cmRpt_t* rpt, unsigned rn, unsigned cn, const int* sp );
  47. void cmVOU_Print( cmRpt_t* rpt, unsigned rn, unsigned cn, const unsigned* sp );
  48. void cmVOI_PrintL( const char* label, cmRpt_t* rpt, unsigned rn, unsigned cn, const int* sp );
  49. void cmVOU_PrintL( const char* label, cmRpt_t* rpt, unsigned rn, unsigned cn, const unsigned* sp );
  50. unsigned* cmVOU_Mod( unsigned* dbp, unsigned dn, unsigned modVal );
  51. unsigned* cmVOU_Hist( unsigned* hbp, unsigned hn, const unsigned* sbp, unsigned sn );
  52. /// Fill vbp[vn] with random integer values between 0 and maxValue.
  53. unsigned* cmVOU_Random( unsigned* vbp, unsigned vn, unsigned maxValue );
  54. /// Fill vbp[vn] with vn unique random integer values between 0 and maxValue.
  55. /// Do not use this function to generate a reordering of a consecutive
  56. /// sequence of random values use cmVOU_RandomSeq instead.
  57. /// For best efficiency 'mavValue' should be large compared to 'vn'.
  58. unsigned* cmVOU_UniqueRandom( unsigned* vbp, unsigned vn, unsigned maxValue );
  59. /// FIll vbp[vn] the sequence 0:vn-1 in randomized order.
  60. unsigned* cmVOU_RandomSeq( unsigned* vbp, unsigned vn );
  61. cmReal_t cmVOU_Mean( const unsigned* sp, unsigned sn );
  62. cmReal_t cmVOU_Variance(const unsigned* sp, unsigned sn, const cmReal_t* mean);
  63. cmReal_t cmVOI_Mean( const int* sp, unsigned sn );
  64. cmReal_t cmVOI_Variance(const int* sp, unsigned sn, const cmReal_t* mean);
  65. // Complex vector * matrix multiply
  66. // dbp[1,dn] = v[1,vn] * m[vn,dn]
  67. cmComplexR_t* cmVORC_MultVVM( cmComplexR_t* dbp, unsigned dn, const cmComplexR_t* vp, unsigned vn, const cmComplexR_t* m );
  68. unsigned _cmVOU_Abs(unsigned x );
  69. #define cmAbs(x) _Generic((x), double:fabs, float:fabsf, unsigned:_cmVOU_Abs, char:abs, int:abs, bool:_cmVOU_Abs )(x)
  70. #define cmIsClose(x0,x1,eps) _Generic((x0), double:cmIsCloseD, float:cmIsCloseF, int:cmIsCloseI, unsigned:cmIsCloseU, default:cmIsCloseD)(x0,x1,eps)
  71. #ifdef __cplusplus
  72. }
  73. #endif
  74. #endif