Math::GSL::FFT(3pm)
π NAME π
Math::GSL::FFT β Fast Fourier Transforms (FFT), bestie. That's the whole vibe. π
β¨ SYNOPSIS β¨
okay so here's the tea, copy-paste core, exactly as it lives in the docs:
use Math::GSL::FFT qw /:all/;
my $input1 = [ 0 .. 7 ];
my $N1 = @$input1;
my ($status1, $output1) = gsl_fft_real_radix2_transform ($input, 1, $N1);
my ($status2, $output2) = gsl_fft_halfcomplex_radix2_inverse($output2, 1, $N1);
# $input1 == $output2
my $input2 = [ 0 .. 6 ];
my $N2 = @$input;
my $workspace1 = gsl_fft_real_workspace_alloc($N2);
my $wavetable1 = gsl_fft_real_wavetable_alloc($N2);
my ($status3,$output3) = gsl_fft_real_transform ($input, 1, $N2, $wavetable1, $workspace1);
my $wavetable4 = gsl_fft_halfcomplex_wavetable_alloc($N2);
my $workspace4 = gsl_fft_real_workspace_alloc($N2);
my ($status4,$output4) = gsl_fft_halfcomplex_inverse($output, 1, $N2, $wavetable4, $workspace4);
# $input2 == $output4
forward transform, inverse transform, and boom, you're back where you started. that's the glowy little round-trip moment and we are obsessed with it π
π¦ DESCRIPTION π¦
πΈ the functions, one by one, no skips πΈ
gsl_fft_complex_radix2_forward($data, $stride, $n)β this one computes the forward FFTs of length$nwith stride$stride, on the array reference$data, using an in-place radix-2 decimation-in-time algorithm. heads up though: the length of the transform,$n, is restricted to powers of two β no exceptions, she's picky like that. for the transform version of the function the sign argument can be either forward (-1) or backward (+1). these functions return a value of$GSL_SUCCESSif no errors were detected, or$GSL_EDOMif the length of the data$nis not a power of two. πgsl_fft_complex_radix2_backwardgsl_fft_complex_radix2_inversegsl_fft_complex_radix2_transformgsl_fft_complex_radix2_dif_forwardgsl_fft_complex_radix2_dif_backwardgsl_fft_complex_radix2_dif_inversegsl_fft_complex_radix2_dif_transformgsl_fft_complex_wavetable_alloc($n)β this function prepares a trigonometric lookup table for a complex FFT of length$n. it returns a pointer to the newly allocatedgsl_fft_complex_wavetableif no errors were detected, and a null pointer in the case of error. the length$nis 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 tosinandcos, 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. reusable, she contains multitudes π«Ά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. let her rest, periodt.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_memcpygsl_fft_complex_forwardgsl_fft_complex_backwardgsl_fft_complex_inversegsl_fft_complex_transformgsl_fft_halfcomplex_radix2_backward($data, $stride, $n)β this function computes the backwards in-place radix-2 FFT of length$nand stride$strideon the half-complex sequence data stored according the output scheme used bygsl_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$nand stride$strideon the half-complex sequence data stored according the output scheme used bygsl_fft_real_radix2. the result is a real array stored in natural order.gsl_fft_halfcomplex_radix2_transformgsl_fft_halfcomplex_wavetable_alloc($n)β this function prepares trigonometric lookup tables for an FFT of size$nreal 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$nis 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 tosinandcos, 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. important, bestie: 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_backwardgsl_fft_halfcomplex_inversegsl_fft_halfcomplex_transformgsl_fft_halfcomplex_unpackgsl_fft_halfcomplex_radix2_unpackgsl_fft_real_radix2_transform($data, $stride, $n)β this function computes an in-place radix-2 FFT of length$nand stride$strideon 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: fork < N/2the real part of the k-th term is stored in locationk, and the corresponding imaginary part is stored in locationN-k. terms withk > N/2can be reconstructed using the symmetryz_k = z^*_{N-k}. the terms fork=0andk=N/2are both purely real, and count as a special case. their real parts are stored in locations0andN/2respectively, 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. iykyk π
gsl_fft_real_wavetable_alloc($n)β this function prepares trigonometric lookup tables for an FFT of size$nreal 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$nis 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 tosinandcos, 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. do not mix them up fr frgsl_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. glow-up detail: 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_transformgsl_fft_real_unpack
β the constants β
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 official documentation: <http://www.gnu.org/software/gsl/manual/html_node/> π
π AUTHORS π
Jonathan "Duke" Leto <jonathan@leto.net> and Thierry Moisan <thierry.moisan@gmail.com> β legends, honestly. π«Ά
π COPYRIGHT AND LICENSE π
Copyright (C) 2008-2024 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.
and that's the whole page, bestie β this was Math::GSL::FFT(3pm), from perl v5.42.3, dated 2026-08-20. slay, stay transformed, and always free your wavetables π β¨
π¦ where this page comes from
- ubuntu stonking: libmath-gsl-perl 0.49-1build1 Β· Artistic-1.0-Perl OR GPL-1.0-or-later
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms