diff _peck_fft_guts.h @ 6:fee54f1878f7

kill FIXED_POINT stuff, simplify
author Peter Meerwald <p.meerwald@bct-electronic.com>
date Fri, 16 Sep 2011 15:18:28 +0200
parents 2d6c49fcafcb
children 655dc5c14169
line wrap: on
line diff
--- a/_peck_fft_guts.h	Fri Sep 16 15:08:29 2011 +0200
+++ b/_peck_fft_guts.h	Fri Sep 16 15:18:28 2011 +0200
@@ -33,102 +33,46 @@
 };
 
 /*
-  Explanation of macros dealing with complex math:
-
-   C_MUL(m,a,b)         : m = a*b
-   C_FIXDIV( c , div )  : if a fixed point impl., c /= div. noop otherwise
-   C_SUB( res, a,b)     : res = a - b
-   C_SUBFROM( res , a)  : res -= a
-   C_ADDTO( res , a)    : res += a
- * */
-#ifdef FIXED_POINT
-#if (FIXED_POINT==32)
-# define FRACBITS 31
-# define SAMPPROD int64_t
-#define SAMP_MAX 2147483647
-#else
-# define FRACBITS 15
-# define SAMPPROD int32_t 
-#define SAMP_MAX 32767
-#endif
-
-#define SAMP_MIN -SAMP_MAX
-
-#if defined(CHECK_OVERFLOW)
-#  define CHECK_OVERFLOW_OP(a,op,b)  \
-	if ( (SAMPPROD)(a) op (SAMPPROD)(b) > SAMP_MAX || (SAMPPROD)(a) op (SAMPPROD)(b) < SAMP_MIN ) { \
-		fprintf(stderr,"WARNING:overflow @ " __FILE__ "(%d): (%d " #op" %d) = %ld\n",__LINE__,(a),(b),(SAMPPROD)(a) op (SAMPPROD)(b) );  }
-#endif
-
-
-#   define smul(a,b) ( (SAMPPROD)(a)*(b) )
-#   define sround( x )  (peck_fft_scalar)( ( (x) + (1<<(FRACBITS-1)) ) >> FRACBITS )
-
-#   define S_MUL(a,b) sround( smul(a,b) )
-
-#   define C_MUL(m,a,b) \
-      do{ (m).r = sround( smul((a).r,(b).r) - smul((a).i,(b).i) ); \
-          (m).i = sround( smul((a).r,(b).i) + smul((a).i,(b).r) ); }while(0)
-
-#   define DIVSCALAR(x,k) \
-	(x) = sround( smul(  x, SAMP_MAX/k ) )
-
-#   define C_FIXDIV(c,div) \
-	do {    DIVSCALAR( (c).r , div);  \
-		DIVSCALAR( (c).i  , div); }while (0)
-
-#   define C_MULBYSCALAR( c, s ) \
-    do{ (c).r =  sround( smul( (c).r , s ) ) ;\
-        (c).i =  sround( smul( (c).i , s ) ) ; }while(0)
+ * Explanation of macros dealing with complex math:
+ *   C_MUL(m,a,b)         : m = a*b
+ *   C_SUB( res, a,b)     : res = a - b
+ *   C_SUBFROM( res , a)  : res -= a
+ *   C_ADDTO( res , a)    : res += a
+ */
 
-#else  /* not FIXED_POINT*/
-
-#   define S_MUL(a,b) ( (a)*(b) )
-#define C_MUL(m,a,b) \
-    do{ (m).r = (a).r*(b).r - (a).i*(b).i;\
-        (m).i = (a).r*(b).i + (a).i*(b).r; }while(0)
-#   define C_FIXDIV(c,div) /* NOOP */
-#   define C_MULBYSCALAR( c, s ) \
-    do{ (c).r *= (s);\
-        (c).i *= (s); }while(0)
-#endif
-
-#ifndef CHECK_OVERFLOW_OP
-#  define CHECK_OVERFLOW_OP(a,op,b) /* noop */
-#endif
-
-#define  C_ADD( res, a,b)\
+#define S_MUL(a, b) ((a) * (b))
+#define C_MUL(m, a, b) \
     do { \
-	    CHECK_OVERFLOW_OP((a).r,+,(b).r)\
-	    CHECK_OVERFLOW_OP((a).i,+,(b).i)\
-	    (res).r=(a).r+(b).r;  (res).i=(a).i+(b).i; \
-    }while(0)
-#define  C_SUB( res, a,b)\
+        (m).r = (a).r*(b).r - (a).i*(b).i; \
+        (m).i = (a).r*(b).i + (a).i*(b).r; \
+    } while(0)
+#define C_MULBYSCALAR(c, s ) \
+    do { \
+        (c).r *= (s); \
+        (c).i *= (s); \
+    } while(0)
+#define  C_ADD(res, a, b) \
     do { \
-	    CHECK_OVERFLOW_OP((a).r,-,(b).r)\
-	    CHECK_OVERFLOW_OP((a).i,-,(b).i)\
-	    (res).r=(a).r-(b).r;  (res).i=(a).i-(b).i; \
-    }while(0)
-#define C_ADDTO( res , a)\
+	    (res).r = (a).r + (b).r; \
+	    (res).i = (a).i + (b).i; \
+    } while(0)
+#define  C_SUB(res, a, b) \
     do { \
-	    CHECK_OVERFLOW_OP((res).r,+,(a).r)\
-	    CHECK_OVERFLOW_OP((res).i,+,(a).i)\
-	    (res).r += (a).r;  (res).i += (a).i;\
-    }while(0)
+	    (res).r = (a).r - (b).r; \
+	    (res).i = (a).i - (b).i; \
+    } while(0)
+#define C_ADDTO(res, a) \
+    do { \
+	    (res).r += (a).r; \
+	    (res).i += (a).i; \
+    } while(0)
+#define C_SUBFROM(res, a) \
+    do { \
+	    (res).r -= (a).r; \
+	    (res).i -= (a).i; \
+    } while(0)
 
-#define C_SUBFROM( res , a)\
-    do {\
-	    CHECK_OVERFLOW_OP((res).r,-,(a).r)\
-	    CHECK_OVERFLOW_OP((res).i,-,(a).i)\
-	    (res).r -= (a).r;  (res).i -= (a).i; \
-    }while(0)
-
-
-#ifdef FIXED_POINT
-    #define PECK_FFT_COS(phase) floorf(0.5f+SAMP_MAX * cosf(phase))
-    #define PECK_FFT_SIN(phase) floorf(0.5f+SAMP_MAX * sinf(phase))
-    #define HALF_OF(x) ((x)>>1)
-#elif USE_SIMD == SIMD_SSE2
+#if USE_SIMD == SIMD_SSE2
     #define PECK_FFT_COS(phase) _mm_set1_ps(cosf(phase))
     #define PECK_FFT_SIN(phase) _mm_set1_ps(sinf(phase))
     #define HALF_OF(x) ((x)*_mm_set1_ps(0.5f))
@@ -147,16 +91,10 @@
 #endif
 
 #define  kf_cexp(x,phase) \
-	do{ \
-		(x)->r = PECK_FFT_COS(phase);\
-		(x)->i = PECK_FFT_SIN(phase);\
-	}while(0)
-
-
-/* a debugging function */
-#define pcpx(c)\
-    fprintf(stderr,"%g + %gi\n",(double)((c)->r),(double)((c)->i) )
-
+	do { \
+		(x)->r = PECK_FFT_COS(phase); \
+		(x)->i = PECK_FFT_SIN(phase); \
+	} while(0)
 
 #ifdef PECK_FFT_USE_ALLOCA
 // define this to allow use of alloca instead of malloc for temporary buffers

Repositories maintained by Peter Meerwald, pmeerw@pmeerw.net.