fftw: adding some bindings to fftw3.
parent
e260edc32b
commit
a735761574
|
@ -0,0 +1 @@
|
|||
John Benediktsson
|
|
@ -0,0 +1,39 @@
|
|||
! Copyright (c) 2014 John Benediktsson
|
||||
! See http://factorcode.org/license.txt for BSD license.
|
||||
|
||||
USING: alien alien.c-types alien.destructors alien.libraries
|
||||
alien.libraries.finder alien.syntax kernel ;
|
||||
|
||||
IN: fftw.ffi
|
||||
|
||||
LIBRARY: fftw3
|
||||
|
||||
<< "fftw3" dup find-library cdecl add-library >>
|
||||
|
||||
TYPEDEF: double[2] fftw_complex
|
||||
|
||||
TYPEDEF: void* fftw_plan
|
||||
|
||||
CONSTANT: FFTW_FORWARD -1
|
||||
CONSTANT: FFTW_BACKWARD 1
|
||||
|
||||
CONSTANT: FFTW_MEASURE 0
|
||||
CONSTANT: FFTW_DESTROY_INPUT 1
|
||||
CONSTANT: FFTW_UNALIGNED 2
|
||||
CONSTANT: FFTW_CONSERVE_MEMORY 4
|
||||
CONSTANT: FFTW_EXHAUSTIVE 8
|
||||
CONSTANT: FFTW_PRESERVE_INPUT 16
|
||||
CONSTANT: FFTW_PATIENT 32
|
||||
CONSTANT: FFTW_ESTIMATE 64
|
||||
|
||||
FUNCTION: void* fftw_malloc ( size_t n ) ;
|
||||
|
||||
FUNCTION: fftw_plan fftw_plan_dft_1d ( int n, void* in, void* out, int sign, int flags ) ;
|
||||
|
||||
FUNCTION: void fftw_destroy_plan ( fftw_plan ) ;
|
||||
|
||||
FUNCTION: void fftw_execute ( fftw_plan ) ;
|
||||
|
||||
FUNCTION: void fftw_free ( void* ) ;
|
||||
|
||||
DESTRUCTOR: fftw_free
|
|
@ -0,0 +1,45 @@
|
|||
! Copyright (c) 2014 John Benediktsson
|
||||
! See http://factorcode.org/license.txt for BSD license.
|
||||
|
||||
USING: alien.c-types destructors fftw.ffi fry kernel locals math
|
||||
math.functions math.vectors sequences sequences.private
|
||||
specialized-arrays ;
|
||||
SPECIALIZED-ARRAY: double
|
||||
SPECIALIZED-ARRAY: fftw_complex
|
||||
|
||||
IN: fftw
|
||||
|
||||
<PRIVATE
|
||||
|
||||
: <fftw-array> ( length -- array )
|
||||
[ fftw_complex heap-size * fftw_malloc &fftw_free ] keep
|
||||
fftw_complex-array boa ;
|
||||
|
||||
: >fftw-array ( seq -- array )
|
||||
[ length <fftw-array> ] keep over '[
|
||||
[ >rect 0 1 ] [ _ nth ] bi*
|
||||
[ set-nth-unsafe ] curry bi-curry@ bi*
|
||||
] each-index ;
|
||||
|
||||
: fftw-array> ( array -- seq )
|
||||
[ first2 rect> ] { } map-as ;
|
||||
|
||||
:: (fft1d) ( seq sign -- seq' )
|
||||
seq length :> n
|
||||
[
|
||||
n
|
||||
seq >fftw-array
|
||||
n <fftw-array> [
|
||||
sign FFTW_ESTIMATE fftw_plan_dft_1d
|
||||
[ fftw_execute ] [ fftw_destroy_plan ] bi
|
||||
] keep fftw-array>
|
||||
] with-destructors ;
|
||||
|
||||
PRIVATE>
|
||||
|
||||
: fft1d ( seq -- seq' ) FFTW_FORWARD (fft1d) ;
|
||||
|
||||
: ifft1d ( seq -- seq' ) FFTW_BACKWARD (fft1d) ;
|
||||
|
||||
: correlate1d ( x y -- z )
|
||||
[ fft1d ] [ reverse fft1d ] bi* v* ifft1d ;
|
|
@ -0,0 +1 @@
|
|||
Bindings to FFTW3.
|
Loading…
Reference in New Issue