gsll:976eac7baeca4828bbcf5200f01d4b0637754d36 commitshttps://gitlab.common-lisp.net/ssimsek/gsll/-/commits/976eac7baeca4828bbcf5200f01d4b0637754d362009-11-27T00:25:20+01:00https://gitlab.common-lisp.net/ssimsek/gsll/-/commit/976eac7baeca4828bbcf5200f01d4b0637754d36Added some extra functions for use with FFTs2009-11-27T00:25:20+01:00Sumant Oemrawsinghsoemraws@xs4all.nl
fft-frequency-vector can be used to make a vector that contains the actual
sample frequencies (so you don't have to guess or write your own).
fft-shift and fft-inverse-shift shift the zero frequency to the center (for
easy plotting), and the inverse (for proper inverse FFT).
These functions are comparable to fftfreq, fftshift and ifftshift in numpy (if
anyone cares...).https://gitlab.common-lisp.net/ssimsek/gsll/-/commit/7a78c8632740e96fbe6f8e784f1ca6f418de497cInitial test constructor for FFT tests2009-11-19T23:27:00-05:00Liam Healyliam@thinkpad.local
Two new functions to write tests in
fast-fourier-transforms/example.lisp, #'make-real-noise-fft-test and
#'generate-fft-tests. The first one generates, given a size and
stride, a pair of forward and inverse real tests, together with the
answers. The second one loops over a range of sizes and strides,
collecting the sets, and wrapping with a lisp-unit:define-test. Since
they rely on #'make-test in test-unit/generate-tests.lisp, they won't
normally be compiled. No test file generated yet.https://gitlab.common-lisp.net/ssimsek/gsll/-/commit/e024b6bb3ed410f79314d17c39d5d27d77ab4017Simplify FFT test code, handle GSL version <1.122009-11-18T23:05:23-05:00Liam Healyliam@thinkpad.local
The expanded FFT tests with inverse and backward transformations have
simplified code. Since the backward and inverse cases must be divided
by the length, the complex test will not work in GSL versions prior to
1.12, nor if FSBV is missing. In these cases, the vector is computed
by converting to a CL array, dividing by the length, and then
converting back.https://gitlab.common-lisp.net/ssimsek/gsll/-/commit/acad7ba5902b9cb3c34fb973ac817aa6a5ba1cf3Scalar addition/multiplication to complex marrays use complex scalars2009-11-18T10:49:44-05:00Liam M. Healylnp@healy.washington.dc.us
The functions elt* and elt+ which used with a scalar use complex, not
double, scalars; GSL functions are gsl_vector_complex_scale,
gsl_vector_complex_add_constant, gsl_vector_complex_float_scale,
gsl_vector_complex_float_add_constant.https://gitlab.common-lisp.net/ssimsek/gsll/-/commit/ea298b71cda1ca98496c180649c9389db39dadceAdded backward and inverse tests to noise test2009-11-18T01:02:36+01:00Sumant Oemrawsinghsoemraws@xs4all.nl
The backward FFT test for complex numbers doesn't work properly now because of
some corruption that happens with elt/. But the forms should be correct.https://gitlab.common-lisp.net/ssimsek/gsll/-/commit/999255fef53f5946c117148a6d813bc22aedbf01Split fft-noise test into FFT and DFT; test generation with supplied answer2009-11-16T23:15:36-05:00Liam Healyliam@thinkpad.local
The FFT noise test test-fft-noise calls a new split-out function
forward-fft-rc as well as the DFT "answer". In preparation for the
generation of the test files, several functions in generate-tests.lisp
have been modified to accept a known answer, in lieu of evaluating the
form and saving that as the reference.https://gitlab.common-lisp.net/ssimsek/gsll/-/commit/e635d8e7c6a8a1181afd4d03b8eb9f3c76bd9972Initial test function complex case now works.2009-11-17T01:39:30+01:00Sumant Oemrawsinghsoemraws@xs4all.nl
The reason why the complex case didn't work in example.lisp, is that the FFTs
(not DFTs) work in-place. for reals it worked because the random (source)
vector was copied (or at least, only the real part) before FFT-ing. Now, it's
also copied in the complex case.https://gitlab.common-lisp.net/ssimsek/gsll/-/commit/7663933a89f1e5ebce97829b5659671973b0c85eEliminate obsolete code2009-11-16T17:00:00-05:00Liam M. Healylnp@healy.washington.dc.us
Eliminate defparameter *pass-complex-scalar-as-two-reals* and
associate comments which predate FSBV.https://gitlab.common-lisp.net/ssimsek/gsll/-/commit/b6d847b1c53cb6872fd3a327127e3a4946c37367Define noise tests for all element types2009-11-15T23:38:15-05:00Liam Healyliam@thinkpad.local
The noise generator make-urand-vector and the noise test, now called
test-fft-noise, now work for all four element types, double-float,
single-float, (complex double-float), (complex single-float). These
are meant to emulate the noise parts of GSL's test_complex_radix2,
test_real_radix2, test_complex_float_radix2, test_real_float_radix2,
test_complex_float_func, test_complex_func, test_real_float_func, and
test_real_func. The real tests pass and the complex tests currently
fail.https://gitlab.common-lisp.net/ssimsek/gsll/-/commit/d14dc37230a575b6c47d0bf02844621c8adf7f89Completed additions for stride2009-11-15T04:09:30+01:00Sumant Oemrawsinghsoemraws@xs4all.nl
Unpack functions were still not properly handling strides. This is now fixed.
The test-real-radix2 function (from GSL's original test_real_radix2) now also
works with strides. The function is not yet complete, though, as it does not
yet test backward/inverse functions, and also doesn't actually perform
comparisons yet.https://gitlab.common-lisp.net/ssimsek/gsll/-/commit/520e168e7525ce9646f416cbfa8d7c8fe4379cc1Merge branch 'master' of ssh://repo.or.cz/srv/git/gsll2009-11-15T03:49:41+01:00Sumant Oemrawsinghsoemraws@xs4all.nlhttps://gitlab.common-lisp.net/ssimsek/gsll/-/commit/360080b1b2dd12904c9ebfd107819db5c3435cbbExport symbols, eliminate dead code, add tridiagonal example2009-11-14T11:04:42-05:00Liam Healyliam@thinkpad.local
A few overlooked function symbols have been exported and some unused
function definitions eliminated. Added an example
solve-tridiagonal-example thanks to Mirko Vukovic.https://gitlab.common-lisp.net/ssimsek/gsll/-/commit/a6225f09a0dc9bbd070db5198a6e6376fe8142f5Fix typo in docstring2009-11-12T19:33:41-05:00Liam Healylnp@healy.washington.dc.ushttps://gitlab.common-lisp.net/ssimsek/gsll/-/commit/7eb2b9cf5bf0d073f67bb349c0b1cca9ef9d2eb1Clean up spline examples; default :acceleration argument2009-11-11T23:25:26-05:00Liam Healyliam@thinkpad.local
Clean up spline examples with simpler code and same results.
Functions in interpolation/evaluation.lisp with key argument
:acceleration defaults to (make-acceleration). Test for
evaluate-integral-example added.https://gitlab.common-lisp.net/ssimsek/gsll/-/commit/4a3c7442e8ddb72e26211d2c604b365e527cef93Added clisp dependency in evaluate-integral-example2009-11-11T22:35:18-05:00TTCA Vukovic977315@WTEHDZYYN71.us.tel.comhttps://gitlab.common-lisp.net/ssimsek/gsll/-/commit/d87c9b66e6d84e2c034210a3a8a188b09ef0057cAdded example of `evaluate-integral'2009-11-11T22:34:34-05:00TTCA Vukovic977315@WTEHDZYYN71.us.tel.comhttps://gitlab.common-lisp.net/ssimsek/gsll/-/commit/b4af2289ff55e6a0d950880f3f30448635a54757Change incorrect clauses in make-fft-wavetable2009-11-11T19:03:47-05:00Liam Healyliam@thinkpad.local
For the case (eql element-type 'double-float) in make-fft-wavetable,
the clauses of the if were reversed; now fixed. This fixes erroneous
output from (test-real-radix2 'double-float 6).https://gitlab.common-lisp.net/ssimsek/gsll/-/commit/b966b76d5d63ea60c9b29b1a323d924cc5b05f3dUnpack now also uses stride in determining the size.2009-11-10T23:45:07+01:00Sumant Oemrawsinghsoemraws@xs4all.nlhttps://gitlab.common-lisp.net/ssimsek/gsll/-/commit/3c6a2d2ea332e151a895a3a247dc98e4ead2cc7aVector size passed to GSL functions now take stride into account.2009-11-10T23:15:55+01:00Sumant Oemrawsinghsoemraws@xs4all.nl
For the FFT functions in GSLL, the vector sizes cannot be supplied by the
caller, but the stride can. The vector size passed to GSL is not the actual
vector size, but rather the size of the vector taking the stride into account:
(floor (size vector) stride). This is now fixed.https://gitlab.common-lisp.net/ssimsek/gsll/-/commit/a25477a545a9b1436c15252aabf1d089ef50950aRewrite test-real-radix2 for clarity2009-11-09T22:32:53-05:00Liam Healyliam@thinkpad.local
New function realpart-vector makes a real vector with the real part of
the complex vector passed as an argument; was part of
test-real-radix2. The computations being performed in
test-real-radix2 are now much clearer.https://gitlab.common-lisp.net/ssimsek/gsll/-/commit/af3cb9e65852bae73128765ca736ed2fc6bcf2f3Default wavetable/workspace; remove unused constant in GSL 1.13; fix dependency2009-11-09T16:44:55-05:00Liam M. Healylnp@healy.washington.dc.us
In FFT, the default wavetable and workspace arguments to functions now
all use #'make-fft-wavetable and make-fft-workspace. Removed
definition of +cgsm-gauss+ because evidently GSL_CONST_CGSM_GAUSS is
no longer in GSL as of 1.13. Added dependency on init for
physical-consants. Trivial change to names of systems in asd files to
be more standard.https://gitlab.common-lisp.net/ssimsek/gsll/-/commit/e2771a1b1ef4c0934f402b97eb5b8ae7ec4c59c4GSL test test-real-radix2 create correct size real array2009-11-08T22:44:41-05:00Liam Healyliam@thinkpad.local
The real array for test-real-radix2 was being made twice as long as it
should have been; fixed. Also now load discrete.lisp in gsll.asd so
that the tests can be called.https://gitlab.common-lisp.net/ssimsek/gsll/-/commit/1477c1a49291d7a9670c3d3f8858f3a9c62ab796GSL test test-real-radix2 working2009-11-08T21:16:05-05:00Liam Healyliam@thinkpad.local
The first of the GSL tests has been ported to GSLL as
test-real-radix2. Currently it doesn't do a comparison, just returns
both the answer from the DFT and from the FFT. Also, stride=1 here.https://gitlab.common-lisp.net/ssimsek/gsll/-/commit/1dc7b6ca41e9c11925da5c9c53bf5078657d2aceAdd discrete Fourier transforms2009-11-08T17:35:16-05:00Liam Healyliam@thinkpad.local
Interface to discrete Fourier transforms defined in GSL but not
documented, apparently used for tests of FFT only.https://gitlab.common-lisp.net/ssimsek/gsll/-/commit/db6d865f395167987e5f00376ea5993121ce126dGeneric unpack function didn't pass on vector2009-11-08T23:26:21+01:00Sumant Oemrawsinghsoemraws@xs4all.nl
The generic unpack function called the specific unpack functions without
passing on the vector, causing you to land in the debugger.https://gitlab.common-lisp.net/ssimsek/gsll/-/commit/503e5186473dc123a123dbd1487324cfd83fd9daUse make-fft-wavetable and make-fft-workspace to make FFT objects2009-11-07T11:36:53-05:00Liam Healyliam@thinkpad.local
Use make-fft-wavetable and make-fft-workspace to make the FFT objects.
The specific FFT wavetable and workspace mobjects are not exported,
which is now possible to specify in defmobject with :export nil.https://gitlab.common-lisp.net/ssimsek/gsll/-/commit/ce3177addc4cfb9175afca642d064f189406d9e0Fast Fourier transform complete2009-11-07T11:01:04-05:00Liam Healyliam@thinkpad.local
The fast Fourier transform port now complete except for the tests.
The backward, inverse, and selectable direction transforms are now
unified in their respective files, a new file has been created for the
wavetable and workspace mobjects. The output of the example functions
looks plausible.https://gitlab.common-lisp.net/ssimsek/gsll/-/commit/7192e225e2a209ee8d9de8c35746b634aece309eFFT Unpack2009-11-03T23:24:48-05:00Liam Healyliam@thinkpad.local
Function #'unpack will switch between the various unpacking generic
functions, depending on the specified unpack type and whether the
vector length is a power of 2. New file unpack.lisp has all the
unpacking functions.https://gitlab.common-lisp.net/ssimsek/gsll/-/commit/39c888a4ed4c043de692a05ff2f1061d2bf5f124Decimation-in-frequency added to forward FFT2009-11-03T22:25:00-05:00Liam Healyliam@thinkpad.local
The function forward-fourier-transform now has an argument
:decimation-in-frequency that will call the generic function
forward-fourier-transform-dif-radix2 if non-NIL and the length of the
vector is a power of 2. This is not tested yet.https://gitlab.common-lisp.net/ssimsek/gsll/-/commit/b4f09c286dd0077238c1195bcf3b476ffa3dda82Unify forward FFT into new file and function2009-11-01T23:05:30-05:00Liam Healyliam@thinkpad.local
The function #'forward-fourier-transform selects among the 12 GSL
forward FFT functions, depending on whether the length of the vector
is a power of 2, whether the :half-complex flag is set, and the type
of the vector. This exported function, along with its supporting
internal functions, are in the file forward.lisp. The dimension
argument for fft-pulse-test is now mandatory. All mobjects have been
renamed so that they end with either -single-float or -double-float,
consistent with the naming scheme in the rest of GSLL. Eliminated
(evidently) obsolete example file fft-example.lisp.https://gitlab.common-lisp.net/ssimsek/gsll/-/commit/9d22c8608b51471b67cc7c312c44e4860860eeb8Unify radix2 forward transforms over real and complex types2009-11-01T15:11:07-05:00Liam Healyliam@thinkpad.local
The individual real and complex defmfuns for forward transforms have
been removed from fft-real.lisp and fft-complex.lisp and unified in
fft-interface.lisp as forward-fourier-transform-radix2 and
forward-fourier-transform-nonradix2. This is untested and is meant to
experiment with unification of the functions; if successful, the other
functions should be changed as similarly, and radix2/non-radix2 switch
incorporated if possible.https://gitlab.common-lisp.net/ssimsek/gsll/-/commit/0e3f8c2a030d3907e8eea165f8ccaca56803b9b2Updated documentation for FFT2009-11-01T13:12:01-05:00Liam Healyliam@thinkpad.local
Added FFT to the list of features in index.html and removed from
missing-features.text; also updated other things in
missing-features.text.https://gitlab.common-lisp.net/ssimsek/gsll/-/commit/dcc05d7fd50cf08deda3dbc389b024f9243f1e98Added attempt to clean FFT interface2009-11-01T04:28:57+01:00Sumant Oemrawsinghsoemraws@xs4all.nl
A hopefully nicer interface to the FFT functions are given, where the precise
FFT function is deduced from the supplied vector. While the interface is
nicer, the code is ugly, hacky and not fool proof yet. Cleanup required.https://gitlab.common-lisp.net/ssimsek/gsll/-/commit/48f7e66a20c831649bd65a8712f2bdde4079104cSome clean-up of real/half-complex FFT2009-11-01T04:15:25+01:00Sumant Oemrawsinghsoemraws@xs4all.nl
Half-complex FFT functions were split off into their own file.
Wavetable and workspace names now have an fft- prepended to their name, for
clarity.https://gitlab.common-lisp.net/ssimsek/gsll/-/commit/a4e52ac32dea8059b3a2296157e678b3802afbf5GSLL system now contains real FFTs and examples.2009-10-31T16:55:05+01:00Sumant Oemrawsinghsoemraws@xs4all.nlhttps://gitlab.common-lisp.net/ssimsek/gsll/-/commit/46df352f76dcb9bcb5db82cf42ddfc86c727679bExamples for fft added2009-10-31T16:18:32+01:00Sumant Oemrawsinghsoemraws@xs4all.nl
The example shows real, complex, radix-2 and mixed-radix FFTs. It can be used
in the unit-test framework, but is not properly generated yet.https://gitlab.common-lisp.net/ssimsek/gsll/-/commit/1d49be888092865ba71eb5945d3df3bf1b4d1addTypo in gsll.asd fixed2009-10-31T14:32:31+01:00Sumant Oemrawsinghsoemraws@xs4all.nl
I screwed up the fft module in gsll.asd with a typo and forgot to test before
commit. This is now fixed.https://gitlab.common-lisp.net/ssimsek/gsll/-/commit/e65992e2454fde38601a5c4eef15aa3773ef41bfReal FFTs have been added.2009-10-31T14:30:03+01:00Sumant Oemrawsinghsoemraws@xs4all.nl
All the real and "half-complex" FFT functions have been added. See GSL docs on
how a half-complex array works.
Some old obsolete comments from fft-complex.lisp were removed.
TODO: add tests and examples.https://gitlab.common-lisp.net/ssimsek/gsll/-/commit/f321a5918c24607a4b21b5bbddfdfbf5d376c500Mixed radix complex float FFTs implemented2009-10-25T20:11:30+01:00Sumant Oemrawsinghsoemraws@xs4all.nl
The mixed radix complex single-float and double-floats now seem to work
correctly. This would mean that all the complex FFTs are working, and only
need a nicer interface (e.g. automatic determination of whether to use a
radix-2 or mixed-radix algorithm).https://gitlab.common-lisp.net/ssimsek/gsll/-/commit/68d8dee78259c38202e4a349bd2ddbb6731f41b2Preliminary FFT functionality2009-10-25T13:17:51+01:00Sumant Oemrawsinghsoemraws@xs4all.nl
Only complex fast fourier transforms have been added. The radix-2 versions
have been tested and found to work. The decimation-in-frequency versions have
been added, but not tested. The mixed-radix versions only work for complex
double-float at the moment.