[Scipy-svn] r5346 - trunk/scipy/fftpack/src
scipy-svn at scipy.org
scipy-svn at scipy.org
Wed Jan 7 09:45:00 EST 2009
Author: cdavid
Date: 2009-01-07 08:44:46 -0600 (Wed, 07 Jan 2009)
New Revision: 5346
Added:
trunk/scipy/fftpack/src/rfft_fftpack.c
Modified:
trunk/scipy/fftpack/src/drfft.c
Log:
Add single prec backend for real fft.
Modified: trunk/scipy/fftpack/src/drfft.c
===================================================================
--- trunk/scipy/fftpack/src/drfft.c 2009-01-07 14:44:18 UTC (rev 5345)
+++ trunk/scipy/fftpack/src/drfft.c 2009-01-07 14:44:46 UTC (rev 5346)
@@ -18,7 +18,19 @@
int direction, int howmany, int normalize)\
{\
drfft_##name(inout, n, direction, howmany, normalize);\
+}\
+void destroy_rfft_cache(void)\
+{\
+ destroy_r##name##_caches();\
+}\
+\
+void rfft(float *inout, int n, \
+ int direction, int howmany, int normalize)\
+{\
+ rfft_##name(inout, n, direction, howmany, normalize);\
}
+
#include "drfft_fftpack.c"
+#include "rfft_fftpack.c"
GEN_PUBLIC_API(fftpack)
Added: trunk/scipy/fftpack/src/rfft_fftpack.c
===================================================================
--- trunk/scipy/fftpack/src/rfft_fftpack.c 2009-01-07 14:44:18 UTC (rev 5345)
+++ trunk/scipy/fftpack/src/rfft_fftpack.c 2009-01-07 14:44:46 UTC (rev 5346)
@@ -0,0 +1,54 @@
+/*
+ * Last Change: Wed Aug 01 07:00 PM 2007 J
+ *
+ * FFTPACK implementation
+ *
+ * Original code by Pearu Peterson.
+ */
+
+extern void F_FUNC(rfftf, RFFTF) (int *, float *, float *);
+extern void F_FUNC(rfftb, RFFTB) (int *, float *, float *);
+extern void F_FUNC(rffti, RFFTI) (int *, float *);
+GEN_CACHE(rfftpack, (int n)
+ , float *wsave;
+ , (caches_rfftpack[i].n == n)
+ , caches_rfftpack[id].wsave =
+ (float *) malloc(sizeof(float) * (2 * n + 15));
+ F_FUNC(rffti, RFFTI) (&n, caches_rfftpack[id].wsave);
+ , free(caches_rfftpack[id].wsave);
+ , 10)
+
+static void rfft_fftpack(float *inout, int n, int direction, int howmany,
+ int normalize)
+{
+ int i;
+ float *ptr = inout;
+ float *wsave = NULL;
+ wsave = caches_rfftpack[get_cache_id_rfftpack(n)].wsave;
+
+
+ switch (direction) {
+ case 1:
+ for (i = 0; i < howmany; ++i, ptr += n) {
+ rfftf_(&n, ptr, wsave);
+ }
+ break;
+
+ case -1:
+ for (i = 0; i < howmany; ++i, ptr += n) {
+ rfftb_(&n, ptr, wsave);
+ }
+ break;
+
+ default:
+ fprintf(stderr, "rfft: invalid direction=%d\n", direction);
+ }
+
+ if (normalize) {
+ float d = 1.0 / n;
+ ptr = inout;
+ for (i = n * howmany - 1; i >= 0; --i) {
+ (*(ptr++)) *= d;
+ }
+ }
+}
More information about the Scipy-svn
mailing list