Provided by: libmath-gsl-perl_0.39-1build2_amd64 bug

NAME

       Math::GSL::FFT - Fast Fourier Transforms (FFT)

SYNOPSIS

           use Math::GSL::FFT qw /:all/;
           # alternating elements are real/imaginary part, hence 256 element array
           my $data = [ (1) x 10, (0) x 236, (1) x 10 ];

           # use every element of the array
           my $stride = 1;

           # But it contains 128 complex numbers
           my ($status, $fft) = gsl_fft_complex_radix2_forward ($data, $stride, 128);

DESCRIPTION

       This module and this documentation is still in a very early state. Danger Will Robinson!
       An OO interface will evolve soon.

       •   "gsl_fft_complex_radix2_forward($data, $stride, $n) "

           This function computes the forward FFTs of length $n with stride $stride, on the array
           reference $data using an in-place radix-2 decimation-in-time algorithm. The length of
           the transform $n is restricted to powers of two. For the transform version of the
           function the sign argument can be either forward (-1) or backward (+1). The functions
           return a value of $GSL_SUCCESS if no errors were detected, or $GSL_EDOM if the length
           of the data $n is not a power of two. The complex functions of the FFT module are not
           yet fully implemented.

       •   "gsl_fft_complex_radix2_backward "

       •   "gsl_fft_complex_radix2_inverse "

       •   "gsl_fft_complex_radix2_transform "

       •   "gsl_fft_complex_radix2_dif_forward "

       •   "gsl_fft_complex_radix2_dif_backward "

       •   "gsl_fft_complex_radix2_dif_inverse "

       •   "gsl_fft_complex_radix2_dif_transform "

       •   "gsl_fft_complex_wavetable_alloc($n)"

           This function prepares a trigonometric lookup table for a complex FFT of length $n.
           The function returns a pointer to the newly allocated gsl_fft_complex_wavetable if no
           errors were detected, and a null pointer in the case of error. The length $n is
           factorized into a product of subtransforms, and the factors and their trigonometric
           coefficients are stored in the wavetable.  The trigonometric coefficients are computed
           using direct calls to sin and cos, for accuracy. Recursion relations could be used to
           compute the lookup table faster, but if an application performs many FFTs of the same
           length then this computation is a one-off overhead which does not affect the final
           throughput.  The wavetable structure can be used repeatedly for any transform of the
           same length. The table is not modified by calls to any of the other FFT functions.
           The same wavetable can be used for both forward and backward (or inverse) transforms
           of a given length.

       •   "gsl_fft_complex_wavetable_free($wavetable)"

           This function frees the memory associated with the wavetable $wavetable. The wavetable
           can be freed if no further FFTs of the same length will be needed.

       •   "gsl_fft_complex_workspace_alloc($n)"

           This function allocates a workspace for a complex transform of length $n.

       •   "gsl_fft_complex_workspace_free($workspace) "

           This function frees the memory associated with the workspace $workspace. The workspace
           can be freed if no further FFTs of the same length will be needed.

       •   "gsl_fft_complex_memcpy "

       •   "gsl_fft_complex_forward "

       •   "gsl_fft_complex_backward "

       •   "gsl_fft_complex_inverse "

       •   "gsl_fft_complex_transform "

       •   "gsl_fft_halfcomplex_radix2_backward($data, $stride, $n)"

           This function computes the backwards in-place radix-2 FFT of length $n and stride
           $stride on the half-complex sequence data stored according the output scheme used by
           gsl_fft_real_radix2. The result is a real array stored in natural order.

       •   "gsl_fft_halfcomplex_radix2_inverse($data, $stride, $n)"

           This function computes the inverse in-place radix-2 FFT of length $n and stride
           $stride on the half-complex sequence data stored according the output scheme used by
           gsl_fft_real_radix2. The result is a real array stored in natural order.

       •   "gsl_fft_halfcomplex_radix2_transform"

       •   "gsl_fft_halfcomplex_wavetable_alloc($n)"

           This function prepares trigonometric lookup tables for an FFT of size $n real
           elements. The functions return a pointer to the newly allocated struct if no errors
           were detected, and a null pointer in the case of error. The length $n is factorized
           into a product of subtransforms, and the factors and their trigonometric coefficients
           are stored in the wavetable. The trigonometric coefficients are computed using direct
           calls to sin and cos, for accuracy.  Recursion relations could be used to compute the
           lookup table faster, but if an application performs many FFTs of the same length then
           computing the wavetable is a one-off overhead which does not affect the final
           throughput.  The wavetable structure can be used repeatedly for any transform of the
           same length. The table is not modified by calls to any of the other FFT functions.
           The appropriate type of wavetable must be used for forward real or inverse half-
           complex transforms.

       •   "gsl_fft_halfcomplex_wavetable_free($wavetable)"

           This function frees the memory associated with the wavetable $wavetable. The wavetable
           can be freed if no further FFTs of the same length will be needed.

       •   "gsl_fft_halfcomplex_backward "

       •   "gsl_fft_halfcomplex_inverse "

       •   "gsl_fft_halfcomplex_transform "

       •   "gsl_fft_halfcomplex_unpack "

       •   "gsl_fft_halfcomplex_radix2_unpack "

       •   "gsl_fft_real_radix2_transform($data, $stride, $n) "

           This function computes an in-place radix-2 FFT of length $n and stride $stride on the
           real array reference $data. The output is a half-complex sequence, which is stored in-
           place. The arrangement of the half-complex terms uses the following scheme: for k <
           N/2 the real part of the k-th term is stored in location k, and the corresponding
           imaginary part is stored in location N-k.  Terms with k > N/2 can be reconstructed
           using the symmetry z_k = z^*_{N-k}. The terms for k=0 and k=N/2 are both purely real,
           and count as a special case.  Their real parts are stored in locations 0 and N/2
           respectively, while their imaginary parts which are zero are not stored. The following
           table shows the correspondence between the output data and the equivalent results
           obtained by considering the input data as a complex sequence with zero imaginary part,

                     complex[0].real    =    data[0]
                     complex[0].imag    =    0
                     complex[1].real    =    data[1]
                     complex[1].imag    =    data[N-1]
                     ...............         ................
                     complex[k].real    =    data[k]
                     complex[k].imag    =    data[N-k]
                     ...............         ................
                     complex[N/2].real  =    data[N/2]
                     complex[N/2].imag  =    0
                     ...............         ................
                     complex[k'].real   =    data[k]        k' = N - k
                     complex[k'].imag   =   -data[N-k]
                     ...............         ................
                     complex[N-1].real  =    data[1]
                     complex[N-1].imag  =   -data[N-1]

           Note that the output data can be converted into the full complex sequence using the
           function gsl_fft_halfcomplex_unpack.

       •   "gsl_fft_real_wavetable_alloc($n)"

           This function prepares trigonometric lookup tables for an FFT of size $n real
           elements. The functions return a pointer to the newly allocated struct if no errors
           were detected, and a null pointer in the case of error. The length $n is factorized
           into a product of subtransforms, and the factors and their trigonometric coefficients
           are stored in the wavetable. The trigonometric coefficients are computed using direct
           calls to sin and cos, for accuracy.  Recursion relations could be used to compute the
           lookup table faster, but if an application performs many FFTs of the same length then
           computing the wavetable is a one-off overhead which does not affect the final
           throughput.  The wavetable structure can be used repeatedly for any transform of the
           same length. The table is not modified by calls to any of the other FFT functions.
           The appropriate type of wavetable must be used for forward real or inverse half-
           complex transforms.

       •   "gsl_fft_real_wavetable_free($wavetable)"

           This function frees the memory associated with the wavetable $wavetable. The wavetable
           can be freed if no further FFTs of the same length will be needed.

       •   "gsl_fft_real_workspace_alloc($n)"

           This function allocates a workspace for a real transform of length $n. The same
           workspace can be used for both forward real and inverse halfcomplex transforms.

       •   "gsl_fft_real_workspace_free($workspace)"

           This function frees the memory associated with the workspace $workspace. The workspace
           can be freed if no further FFTs of the same length will be needed.

       •   "gsl_fft_real_transform "

       •   "gsl_fft_real_unpack "

       This module also includes the following constants :

       •   $gsl_fft_forward

       •   $gsl_fft_backward

       For more information on the functions, we refer you to the GSL offcial documentation:
       <http://www.gnu.org/software/gsl/manual/html_node/>

AUTHORS

       Jonathan "Duke" Leto <jonathan@leto.net> and Thierry Moisan <thierry.moisan@gmail.com>

COPYRIGHT AND LICENSE

       Copyright (C) 2008-2011 Jonathan "Duke" Leto and Thierry Moisan

       This program is free software; you can redistribute it and/or modify it under the same
       terms as Perl itself.