1 // -*- mode: c++ -*- 2 #ifndef UTILS_H 3 #define UTILS_H 4 5 #include "real.h" 6 #include "config.h" 7 #include "sbsms.h" 8 9 namespace _sbsms_ { 10 11 #define ONEOVERTWOPI 0.15915494309189533576888376337251f 12 #define PI 3.1415926535897932384626433832795f 13 #define TWOPI 6.28318530717958647692528676655900576f 14 c2even(audio * eo,audio * even,int N)15inline void c2even(audio *eo, audio *even, int N) 16 { 17 int Nover2 = N/2; 18 even[0][0] = eo[0][0]; 19 even[0][1] = 0.0f; 20 for(int k=1;k<=Nover2;k++) { 21 int Nk = N-k; 22 even[k][0] = 0.5f*(eo[k][0] + eo[Nk][0]); 23 even[k][1] = 0.5f*(eo[k][1] - eo[Nk][1]); 24 } 25 } 26 c2odd(audio * eo,audio * odd,int N)27inline void c2odd(audio *eo, audio *odd, int N) 28 { 29 int Nover2 = N/2; 30 odd[0][0] = eo[0][1]; 31 odd[0][1] = 0.0f; 32 for(int k=1;k<=Nover2;k++) { 33 int Nk = N-k; 34 odd[k][0] = 0.5f*(eo[k][1] + eo[Nk][1]); 35 odd[k][1] = 0.5f*(eo[Nk][0] - eo[k][0]); 36 } 37 } 38 canonPI(float ph)39inline float canonPI(float ph) 40 { 41 ph -= TWOPI * lrintf(ph * ONEOVERTWOPI); 42 if(ph < -PI) ph += TWOPI; 43 else if(ph >= PI) ph -= TWOPI; 44 return ph; 45 } 46 canon2PI(float ph)47inline float canon2PI(float ph) 48 { 49 ph -= TWOPI * lrintf(ph * ONEOVERTWOPI); 50 if(ph < 0.0f) ph += TWOPI; 51 if(ph >= TWOPI) ph -= TWOPI; 52 return ph; 53 } 54 square(float x)55inline float square(float x) 56 { 57 return x*x; 58 } 59 norm2(t_fft x)60inline float norm2(t_fft x) 61 { 62 return square(x[0]) + square(x[1]); 63 } 64 65 } 66 67 #endif 68