diff --git a/fast-fourier-transforms/example.lisp b/fast-fourier-transforms/example.lisp index c7175987cbaa28486974d61484a8f937bea1af49..a77bc902b8d207e9a7dbfb5f3bf43b5eef87f531 100644 --- a/fast-fourier-transforms/example.lisp +++ b/fast-fourier-transforms/example.lisp @@ -50,10 +50,10 @@ (values))) ;; (make-urand-vector '(complex double-float) 5) -(defun make-urand-vector (element-type dimension) +(defun make-urand-vector (element-type dimension &key (stride 1)) "Make a vector with random elements." - (let ((vec (make-marray element-type :dimensions (list dimension)))) - (loop for i from 0 below dimension + (let ((vec (make-marray element-type :dimensions (list (* stride dimension))))) + (loop for i from 0 below (* stride dimension) by stride do (setf (maref vec i) (complex (urand)))) vec)) @@ -69,12 +69,14 @@ (realpart (maref complex-vector i)))) real-vector)) -(defun test-real-radix2 (element-type size) +(defun test-real-radix2 (element-type size &key (stride 1)) "Test for FFT; returns the DFT answer and the computed FFT answer. See test_real_radix2 in fft/test.mc." - (let ((random-vector (make-urand-vector (list 'complex element-type) size))) + (let ((random-vector (make-urand-vector (list 'complex element-type) size :stride stride))) (values - (forward-discrete-fourier-transform random-vector) + (forward-discrete-fourier-transform random-vector :stride stride) (unpack - (forward-fourier-transform (realpart-vector random-vector)) - :unpack-type 'complex)))) + (forward-fourier-transform (realpart-vector random-vector) :stride stride) + :unpack-type 'complex :stride stride)))) + +;;(test-real-radix2 'double-float 10 :stride 5) diff --git a/fast-fourier-transforms/unpack.lisp b/fast-fourier-transforms/unpack.lisp index e9a1852ecd74ecfc5702109b49aab7cd0c41d035..2d4786ccab91cd9fa187b51f034ec71f20afd07b 100644 --- a/fast-fourier-transforms/unpack.lisp +++ b/fast-fourier-transforms/unpack.lisp @@ -14,9 +14,9 @@ &key (stride 1) (output (eltcase single-float - (make-marray '(complex single-float) :dimensions (floor (size vector) stride)) + (make-marray '(complex single-float) :dimensions (size vector)) t - (make-marray '(complex double-float) :dimensions (floor (size vector) stride))))) + (make-marray '(complex double-float) :dimensions (size vector))))) ("gsl_fft_real" :type "_unpack") (((c-pointer vector) :pointer) ((c-pointer output) :pointer) @@ -38,9 +38,9 @@ &key (stride 1) (output (eltcase single-float - (make-marray '(complex single-float) :dimensions (floor (size vector) stride)) + (make-marray '(complex single-float) :dimensions (size vector)) t - (make-marray '(complex double-float) :dimensions (floor (size vector) stride))))) + (make-marray '(complex double-float) :dimensions (size vector))))) ("gsl_fft_halfcomplex" :type "_radix2_unpack") (((c-pointer vector) :pointer) ((c-pointer output) :pointer) @@ -61,9 +61,9 @@ &key (stride 1) (output (eltcase single-float - (make-marray '(complex single-float) :dimensions (floor (size vector) stride)) + (make-marray '(complex single-float) :dimensions (size vector)) t - (make-marray '(complex double-float) :dimensions (floor (size vector) stride))))) + (make-marray '(complex double-float) :dimensions (size vector))))) ("gsl_fft_halfcomplex" :type "_unpack") (((c-pointer vector) :pointer) ((c-pointer output) :pointer)