| /* |
| Interface for the f2c translation of fftpack as found on http://www.netlib.org/fftpack/ |
| |
| FFTPACK license: |
| |
| http://www.cisl.ucar.edu/css/software/fftpack5/ftpk.html |
| |
| Copyright (c) 2004 the University Corporation for Atmospheric |
| Research ("UCAR"). All rights reserved. Developed by NCAR's |
| Computational and Information Systems Laboratory, UCAR, |
| www.cisl.ucar.edu. |
| |
| Redistribution and use of the Software in source and binary forms, |
| with or without modification, is permitted provided that the |
| following conditions are met: |
| |
| - Neither the names of NCAR's Computational and Information Systems |
| Laboratory, the University Corporation for Atmospheric Research, |
| nor the names of its sponsors or contributors may be used to |
| endorse or promote products derived from this Software without |
| specific prior written permission. |
| |
| - Redistributions of source code must retain the above copyright |
| notices, this list of conditions, and the disclaimer below. |
| |
| - Redistributions in binary form must reproduce the above copyright |
| notice, this list of conditions, and the disclaimer below in the |
| documentation and/or other materials provided with the |
| distribution. |
| |
| THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, |
| EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF |
| MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND |
| NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT |
| HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL, |
| EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN |
| ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN |
| CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE |
| SOFTWARE. |
| |
| ChangeLog: |
| 2011/10/02: this is my first release of this file. |
| */ |
| |
| #ifndef FFTPACK_H |
| #define FFTPACK_H |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| /* just define FFTPACK_DOUBLE_PRECISION if you want to build it as a double precision fft */ |
| |
| #ifndef FFTPACK_DOUBLE_PRECISION |
| typedef float fftpack_real; |
| typedef int fftpack_int; |
| #else |
| typedef double fftpack_real; |
| typedef int fftpack_int; |
| #endif |
| |
| void cffti(fftpack_int n, fftpack_real *wsave); |
| |
| void cfftf(fftpack_int n, fftpack_real *c, fftpack_real *wsave); |
| |
| void cfftb(fftpack_int n, fftpack_real *c, fftpack_real *wsave); |
| |
| void rffti(fftpack_int n, fftpack_real *wsave); |
| void rfftf(fftpack_int n, fftpack_real *r, fftpack_real *wsave); |
| void rfftb(fftpack_int n, fftpack_real *r, fftpack_real *wsave); |
| |
| void cosqi(fftpack_int n, fftpack_real *wsave); |
| void cosqf(fftpack_int n, fftpack_real *x, fftpack_real *wsave); |
| void cosqb(fftpack_int n, fftpack_real *x, fftpack_real *wsave); |
| |
| void costi(fftpack_int n, fftpack_real *wsave); |
| void cost(fftpack_int n, fftpack_real *x, fftpack_real *wsave); |
| |
| void sinqi(fftpack_int n, fftpack_real *wsave); |
| void sinqb(fftpack_int n, fftpack_real *x, fftpack_real *wsave); |
| void sinqf(fftpack_int n, fftpack_real *x, fftpack_real *wsave); |
| |
| void sinti(fftpack_int n, fftpack_real *wsave); |
| void sint(fftpack_int n, fftpack_real *x, fftpack_real *wsave); |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| #endif /* FFTPACK_H */ |
| |
| /* |
| |
| FFTPACK |
| |
| * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * |
| |
| version 4 april 1985 |
| |
| a package of fortran subprograms for the fast fourier |
| transform of periodic and other symmetric sequences |
| |
| by |
| |
| paul n swarztrauber |
| |
| national center for atmospheric research boulder,colorado 80307 |
| |
| which is sponsored by the national science foundation |
| |
| * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * |
| |
| |
| this package consists of programs which perform fast fourier |
| transforms for both complex and real periodic sequences and |
| certain other symmetric sequences that are listed below. |
| |
| 1. rffti initialize rfftf and rfftb |
| 2. rfftf forward transform of a real periodic sequence |
| 3. rfftb backward transform of a real coefficient array |
| |
| 4. ezffti initialize ezfftf and ezfftb |
| 5. ezfftf a simplified real periodic forward transform |
| 6. ezfftb a simplified real periodic backward transform |
| |
| 7. sinti initialize sint |
| 8. sint sine transform of a real odd sequence |
| |
| 9. costi initialize cost |
| 10. cost cosine transform of a real even sequence |
| |
| 11. sinqi initialize sinqf and sinqb |
| 12. sinqf forward sine transform with odd wave numbers |
| 13. sinqb unnormalized inverse of sinqf |
| |
| 14. cosqi initialize cosqf and cosqb |
| 15. cosqf forward cosine transform with odd wave numbers |
| 16. cosqb unnormalized inverse of cosqf |
| |
| 17. cffti initialize cfftf and cfftb |
| 18. cfftf forward transform of a complex periodic sequence |
| 19. cfftb unnormalized inverse of cfftf |
| |
| |
| ****************************************************************** |
| |
| subroutine rffti(n,wsave) |
| |
| **************************************************************** |
| |
| subroutine rffti initializes the array wsave which is used in |
| both rfftf and rfftb. the prime factorization of n together with |
| a tabulation of the trigonometric functions are computed and |
| stored in wsave. |
| |
| input parameter |
| |
| n the length of the sequence to be transformed. |
| |
| output parameter |
| |
| wsave a work array which must be dimensioned at least 2*n+15. |
| the same work array can be used for both rfftf and rfftb |
| as long as n remains unchanged. different wsave arrays |
| are required for different values of n. the contents of |
| wsave must not be changed between calls of rfftf or rfftb. |
| |
| ****************************************************************** |
| |
| subroutine rfftf(n,r,wsave) |
| |
| ****************************************************************** |
| |
| subroutine rfftf computes the fourier coefficients of a real |
| perodic sequence (fourier analysis). the transform is defined |
| below at output parameter r. |
| |
| input parameters |
| |
| n the length of the array r to be transformed. the method |
| is most efficient when n is a product of small primes. |
| n may change so long as different work arrays are provided |
| |
| r a real array of length n which contains the sequence |
| to be transformed |
| |
| wsave a work array which must be dimensioned at least 2*n+15. |
| in the program that calls rfftf. the wsave array must be |
| initialized by calling subroutine rffti(n,wsave) and a |
| different wsave array must be used for each different |
| value of n. this initialization does not have to be |
| repeated so long as n remains unchanged thus subsequent |
| transforms can be obtained faster than the first. |
| the same wsave array can be used by rfftf and rfftb. |
| |
| |
| output parameters |
| |
| r r(1) = the sum from i=1 to i=n of r(i) |
| |
| if n is even set l =n/2 , if n is odd set l = (n+1)/2 |
| |
| then for k = 2,...,l |
| |
| r(2*k-2) = the sum from i = 1 to i = n of |
| |
| r(i)*cos((k-1)*(i-1)*2*pi/n) |
| |
| r(2*k-1) = the sum from i = 1 to i = n of |
| |
| -r(i)*sin((k-1)*(i-1)*2*pi/n) |
| |
| if n is even |
| |
| r(n) = the sum from i = 1 to i = n of |
| |
| (-1)**(i-1)*r(i) |
| |
| ***** note |
| this transform is unnormalized since a call of rfftf |
| followed by a call of rfftb will multiply the input |
| sequence by n. |
| |
| wsave contains results which must not be destroyed between |
| calls of rfftf or rfftb. |
| |
| |
| ****************************************************************** |
| |
| subroutine rfftb(n,r,wsave) |
| |
| ****************************************************************** |
| |
| subroutine rfftb computes the real perodic sequence from its |
| fourier coefficients (fourier synthesis). the transform is defined |
| below at output parameter r. |
| |
| input parameters |
| |
| n the length of the array r to be transformed. the method |
| is most efficient when n is a product of small primes. |
| n may change so long as different work arrays are provided |
| |
| r a real array of length n which contains the sequence |
| to be transformed |
| |
| wsave a work array which must be dimensioned at least 2*n+15. |
| in the program that calls rfftb. the wsave array must be |
| initialized by calling subroutine rffti(n,wsave) and a |
| different wsave array must be used for each different |
| value of n. this initialization does not have to be |
| repeated so long as n remains unchanged thus subsequent |
| transforms can be obtained faster than the first. |
| the same wsave array can be used by rfftf and rfftb. |
| |
| |
| output parameters |
| |
| r for n even and for i = 1,...,n |
| |
| r(i) = r(1)+(-1)**(i-1)*r(n) |
| |
| plus the sum from k=2 to k=n/2 of |
| |
| 2.*r(2*k-2)*cos((k-1)*(i-1)*2*pi/n) |
| |
| -2.*r(2*k-1)*sin((k-1)*(i-1)*2*pi/n) |
| |
| for n odd and for i = 1,...,n |
| |
| r(i) = r(1) plus the sum from k=2 to k=(n+1)/2 of |
| |
| 2.*r(2*k-2)*cos((k-1)*(i-1)*2*pi/n) |
| |
| -2.*r(2*k-1)*sin((k-1)*(i-1)*2*pi/n) |
| |
| ***** note |
| this transform is unnormalized since a call of rfftf |
| followed by a call of rfftb will multiply the input |
| sequence by n. |
| |
| wsave contains results which must not be destroyed between |
| calls of rfftb or rfftf. |
| |
| ****************************************************************** |
| |
| subroutine sinti(n,wsave) |
| |
| ****************************************************************** |
| |
| subroutine sinti initializes the array wsave which is used in |
| subroutine sint. the prime factorization of n together with |
| a tabulation of the trigonometric functions are computed and |
| stored in wsave. |
| |
| input parameter |
| |
| n the length of the sequence to be transformed. the method |
| is most efficient when n+1 is a product of small primes. |
| |
| output parameter |
| |
| wsave a work array with at least int(2.5*n+15) locations. |
| different wsave arrays are required for different values |
| of n. the contents of wsave must not be changed between |
| calls of sint. |
| |
| ****************************************************************** |
| |
| subroutine sint(n,x,wsave) |
| |
| ****************************************************************** |
| |
| subroutine sint computes the discrete fourier sine transform |
| of an odd sequence x(i). the transform is defined below at |
| output parameter x. |
| |
| sint is the unnormalized inverse of itself since a call of sint |
| followed by another call of sint will multiply the input sequence |
| x by 2*(n+1). |
| |
| the array wsave which is used by subroutine sint must be |
| initialized by calling subroutine sinti(n,wsave). |
| |
| input parameters |
| |
| n the length of the sequence to be transformed. the method |
| is most efficient when n+1 is the product of small primes. |
| |
| x an array which contains the sequence to be transformed |
| |
| |
| wsave a work array with dimension at least int(2.5*n+15) |
| in the program that calls sint. the wsave array must be |
| initialized by calling subroutine sinti(n,wsave) and a |
| different wsave array must be used for each different |
| value of n. this initialization does not have to be |
| repeated so long as n remains unchanged thus subsequent |
| transforms can be obtained faster than the first. |
| |
| output parameters |
| |
| x for i=1,...,n |
| |
| x(i)= the sum from k=1 to k=n |
| |
| 2*x(k)*sin(k*i*pi/(n+1)) |
| |
| a call of sint followed by another call of |
| sint will multiply the sequence x by 2*(n+1). |
| hence sint is the unnormalized inverse |
| of itself. |
| |
| wsave contains initialization calculations which must not be |
| destroyed between calls of sint. |
| |
| ****************************************************************** |
| |
| subroutine costi(n,wsave) |
| |
| ****************************************************************** |
| |
| subroutine costi initializes the array wsave which is used in |
| subroutine cost. the prime factorization of n together with |
| a tabulation of the trigonometric functions are computed and |
| stored in wsave. |
| |
| input parameter |
| |
| n the length of the sequence to be transformed. the method |
| is most efficient when n-1 is a product of small primes. |
| |
| output parameter |
| |
| wsave a work array which must be dimensioned at least 3*n+15. |
| different wsave arrays are required for different values |
| of n. the contents of wsave must not be changed between |
| calls of cost. |
| |
| ****************************************************************** |
| |
| subroutine cost(n,x,wsave) |
| |
| ****************************************************************** |
| |
| subroutine cost computes the discrete fourier cosine transform |
| of an even sequence x(i). the transform is defined below at output |
| parameter x. |
| |
| cost is the unnormalized inverse of itself since a call of cost |
| followed by another call of cost will multiply the input sequence |
| x by 2*(n-1). the transform is defined below at output parameter x |
| |
| the array wsave which is used by subroutine cost must be |
| initialized by calling subroutine costi(n,wsave). |
| |
| input parameters |
| |
| n the length of the sequence x. n must be greater than 1. |
| the method is most efficient when n-1 is a product of |
| small primes. |
| |
| x an array which contains the sequence to be transformed |
| |
| wsave a work array which must be dimensioned at least 3*n+15 |
| in the program that calls cost. the wsave array must be |
| initialized by calling subroutine costi(n,wsave) and a |
| different wsave array must be used for each different |
| value of n. this initialization does not have to be |
| repeated so long as n remains unchanged thus subsequent |
| transforms can be obtained faster than the first. |
| |
| output parameters |
| |
| x for i=1,...,n |
| |
| x(i) = x(1)+(-1)**(i-1)*x(n) |
| |
| + the sum from k=2 to k=n-1 |
| |
| 2*x(k)*cos((k-1)*(i-1)*pi/(n-1)) |
| |
| a call of cost followed by another call of |
| cost will multiply the sequence x by 2*(n-1) |
| hence cost is the unnormalized inverse |
| of itself. |
| |
| wsave contains initialization calculations which must not be |
| destroyed between calls of cost. |
| |
| ****************************************************************** |
| |
| subroutine sinqi(n,wsave) |
| |
| ****************************************************************** |
| |
| subroutine sinqi initializes the array wsave which is used in |
| both sinqf and sinqb. the prime factorization of n together with |
| a tabulation of the trigonometric functions are computed and |
| stored in wsave. |
| |
| input parameter |
| |
| n the length of the sequence to be transformed. the method |
| is most efficient when n is a product of small primes. |
| |
| output parameter |
| |
| wsave a work array which must be dimensioned at least 3*n+15. |
| the same work array can be used for both sinqf and sinqb |
| as long as n remains unchanged. different wsave arrays |
| are required for different values of n. the contents of |
| wsave must not be changed between calls of sinqf or sinqb. |
| |
| ****************************************************************** |
| |
| subroutine sinqf(n,x,wsave) |
| |
| ****************************************************************** |
| |
| subroutine sinqf computes the fast fourier transform of quarter |
| wave data. that is , sinqf computes the coefficients in a sine |
| series representation with only odd wave numbers. the transform |
| is defined below at output parameter x. |
| |
| sinqb is the unnormalized inverse of sinqf since a call of sinqf |
| followed by a call of sinqb will multiply the input sequence x |
| by 4*n. |
| |
| the array wsave which is used by subroutine sinqf must be |
| initialized by calling subroutine sinqi(n,wsave). |
| |
| |
| input parameters |
| |
| n the length of the array x to be transformed. the method |
| is most efficient when n is a product of small primes. |
| |
| x an array which contains the sequence to be transformed |
| |
| wsave a work array which must be dimensioned at least 3*n+15. |
| in the program that calls sinqf. the wsave array must be |
| initialized by calling subroutine sinqi(n,wsave) and a |
| different wsave array must be used for each different |
| value of n. this initialization does not have to be |
| repeated so long as n remains unchanged thus subsequent |
| transforms can be obtained faster than the first. |
| |
| output parameters |
| |
| x for i=1,...,n |
| |
| x(i) = (-1)**(i-1)*x(n) |
| |
| + the sum from k=1 to k=n-1 of |
| |
| 2*x(k)*sin((2*i-1)*k*pi/(2*n)) |
| |
| a call of sinqf followed by a call of |
| sinqb will multiply the sequence x by 4*n. |
| therefore sinqb is the unnormalized inverse |
| of sinqf. |
| |
| wsave contains initialization calculations which must not |
| be destroyed between calls of sinqf or sinqb. |
| |
| ****************************************************************** |
| |
| subroutine sinqb(n,x,wsave) |
| |
| ****************************************************************** |
| |
| subroutine sinqb computes the fast fourier transform of quarter |
| wave data. that is , sinqb computes a sequence from its |
| representation in terms of a sine series with odd wave numbers. |
| the transform is defined below at output parameter x. |
| |
| sinqf is the unnormalized inverse of sinqb since a call of sinqb |
| followed by a call of sinqf will multiply the input sequence x |
| by 4*n. |
| |
| the array wsave which is used by subroutine sinqb must be |
| initialized by calling subroutine sinqi(n,wsave). |
| |
| |
| input parameters |
| |
| n the length of the array x to be transformed. the method |
| is most efficient when n is a product of small primes. |
| |
| x an array which contains the sequence to be transformed |
| |
| wsave a work array which must be dimensioned at least 3*n+15. |
| in the program that calls sinqb. the wsave array must be |
| initialized by calling subroutine sinqi(n,wsave) and a |
| different wsave array must be used for each different |
| value of n. this initialization does not have to be |
| repeated so long as n remains unchanged thus subsequent |
| transforms can be obtained faster than the first. |
| |
| output parameters |
| |
| x for i=1,...,n |
| |
| x(i)= the sum from k=1 to k=n of |
| |
| 4*x(k)*sin((2k-1)*i*pi/(2*n)) |
| |
| a call of sinqb followed by a call of |
| sinqf will multiply the sequence x by 4*n. |
| therefore sinqf is the unnormalized inverse |
| of sinqb. |
| |
| wsave contains initialization calculations which must not |
| be destroyed between calls of sinqb or sinqf. |
| |
| ****************************************************************** |
| |
| subroutine cosqi(n,wsave) |
| |
| ****************************************************************** |
| |
| subroutine cosqi initializes the array wsave which is used in |
| both cosqf and cosqb. the prime factorization of n together with |
| a tabulation of the trigonometric functions are computed and |
| stored in wsave. |
| |
| input parameter |
| |
| n the length of the array to be transformed. the method |
| is most efficient when n is a product of small primes. |
| |
| output parameter |
| |
| wsave a work array which must be dimensioned at least 3*n+15. |
| the same work array can be used for both cosqf and cosqb |
| as long as n remains unchanged. different wsave arrays |
| are required for different values of n. the contents of |
| wsave must not be changed between calls of cosqf or cosqb. |
| |
| ****************************************************************** |
| |
| subroutine cosqf(n,x,wsave) |
| |
| ****************************************************************** |
| |
| subroutine cosqf computes the fast fourier transform of quarter |
| wave data. that is , cosqf computes the coefficients in a cosine |
| series representation with only odd wave numbers. the transform |
| is defined below at output parameter x |
| |
| cosqf is the unnormalized inverse of cosqb since a call of cosqf |
| followed by a call of cosqb will multiply the input sequence x |
| by 4*n. |
| |
| the array wsave which is used by subroutine cosqf must be |
| initialized by calling subroutine cosqi(n,wsave). |
| |
| |
| input parameters |
| |
| n the length of the array x to be transformed. the method |
| is most efficient when n is a product of small primes. |
| |
| x an array which contains the sequence to be transformed |
| |
| wsave a work array which must be dimensioned at least 3*n+15 |
| in the program that calls cosqf. the wsave array must be |
| initialized by calling subroutine cosqi(n,wsave) and a |
| different wsave array must be used for each different |
| value of n. this initialization does not have to be |
| repeated so long as n remains unchanged thus subsequent |
| transforms can be obtained faster than the first. |
| |
| output parameters |
| |
| x for i=1,...,n |
| |
| x(i) = x(1) plus the sum from k=2 to k=n of |
| |
| 2*x(k)*cos((2*i-1)*(k-1)*pi/(2*n)) |
| |
| a call of cosqf followed by a call of |
| cosqb will multiply the sequence x by 4*n. |
| therefore cosqb is the unnormalized inverse |
| of cosqf. |
| |
| wsave contains initialization calculations which must not |
| be destroyed between calls of cosqf or cosqb. |
| |
| ****************************************************************** |
| |
| subroutine cosqb(n,x,wsave) |
| |
| ****************************************************************** |
| |
| subroutine cosqb computes the fast fourier transform of quarter |
| wave data. that is , cosqb computes a sequence from its |
| representation in terms of a cosine series with odd wave numbers. |
| the transform is defined below at output parameter x. |
| |
| cosqb is the unnormalized inverse of cosqf since a call of cosqb |
| followed by a call of cosqf will multiply the input sequence x |
| by 4*n. |
| |
| the array wsave which is used by subroutine cosqb must be |
| initialized by calling subroutine cosqi(n,wsave). |
| |
| |
| input parameters |
| |
| n the length of the array x to be transformed. the method |
| is most efficient when n is a product of small primes. |
| |
| x an array which contains the sequence to be transformed |
| |
| wsave a work array that must be dimensioned at least 3*n+15 |
| in the program that calls cosqb. the wsave array must be |
| initialized by calling subroutine cosqi(n,wsave) and a |
| different wsave array must be used for each different |
| value of n. this initialization does not have to be |
| repeated so long as n remains unchanged thus subsequent |
| transforms can be obtained faster than the first. |
| |
| output parameters |
| |
| x for i=1,...,n |
| |
| x(i)= the sum from k=1 to k=n of |
| |
| 4*x(k)*cos((2*k-1)*(i-1)*pi/(2*n)) |
| |
| a call of cosqb followed by a call of |
| cosqf will multiply the sequence x by 4*n. |
| therefore cosqf is the unnormalized inverse |
| of cosqb. |
| |
| wsave contains initialization calculations which must not |
| be destroyed between calls of cosqb or cosqf. |
| |
| ****************************************************************** |
| |
| subroutine cffti(n,wsave) |
| |
| ****************************************************************** |
| |
| subroutine cffti initializes the array wsave which is used in |
| both cfftf and cfftb. the prime factorization of n together with |
| a tabulation of the trigonometric functions are computed and |
| stored in wsave. |
| |
| input parameter |
| |
| n the length of the sequence to be transformed |
| |
| output parameter |
| |
| wsave a work array which must be dimensioned at least 4*n+15 |
| the same work array can be used for both cfftf and cfftb |
| as long as n remains unchanged. different wsave arrays |
| are required for different values of n. the contents of |
| wsave must not be changed between calls of cfftf or cfftb. |
| |
| ****************************************************************** |
| |
| subroutine cfftf(n,c,wsave) |
| |
| ****************************************************************** |
| |
| subroutine cfftf computes the forward complex discrete fourier |
| transform (the fourier analysis). equivalently , cfftf computes |
| the fourier coefficients of a complex periodic sequence. |
| the transform is defined below at output parameter c. |
| |
| the transform is not normalized. to obtain a normalized transform |
| the output must be divided by n. otherwise a call of cfftf |
| followed by a call of cfftb will multiply the sequence by n. |
| |
| the array wsave which is used by subroutine cfftf must be |
| initialized by calling subroutine cffti(n,wsave). |
| |
| input parameters |
| |
| |
| n the length of the complex sequence c. the method is |
| more efficient when n is the product of small primes. n |
| |
| c a complex array of length n which contains the sequence |
| |
| wsave a real work array which must be dimensioned at least 4n+15 |
| in the program that calls cfftf. the wsave array must be |
| initialized by calling subroutine cffti(n,wsave) and a |
| different wsave array must be used for each different |
| value of n. this initialization does not have to be |
| repeated so long as n remains unchanged thus subsequent |
| transforms can be obtained faster than the first. |
| the same wsave array can be used by cfftf and cfftb. |
| |
| output parameters |
| |
| c for j=1,...,n |
| |
| c(j)=the sum from k=1,...,n of |
| |
| c(k)*exp(-i*(j-1)*(k-1)*2*pi/n) |
| |
| where i=sqrt(-1) |
| |
| wsave contains initialization calculations which must not be |
| destroyed between calls of subroutine cfftf or cfftb |
| |
| ****************************************************************** |
| |
| subroutine cfftb(n,c,wsave) |
| |
| ****************************************************************** |
| |
| subroutine cfftb computes the backward complex discrete fourier |
| transform (the fourier synthesis). equivalently , cfftb computes |
| a complex periodic sequence from its fourier coefficients. |
| the transform is defined below at output parameter c. |
| |
| a call of cfftf followed by a call of cfftb will multiply the |
| sequence by n. |
| |
| the array wsave which is used by subroutine cfftb must be |
| initialized by calling subroutine cffti(n,wsave). |
| |
| input parameters |
| |
| |
| n the length of the complex sequence c. the method is |
| more efficient when n is the product of small primes. |
| |
| c a complex array of length n which contains the sequence |
| |
| wsave a real work array which must be dimensioned at least 4n+15 |
| in the program that calls cfftb. the wsave array must be |
| initialized by calling subroutine cffti(n,wsave) and a |
| different wsave array must be used for each different |
| value of n. this initialization does not have to be |
| repeated so long as n remains unchanged thus subsequent |
| transforms can be obtained faster than the first. |
| the same wsave array can be used by cfftf and cfftb. |
| |
| output parameters |
| |
| c for j=1,...,n |
| |
| c(j)=the sum from k=1,...,n of |
| |
| c(k)*exp(i*(j-1)*(k-1)*2*pi/n) |
| |
| where i=sqrt(-1) |
| |
| wsave contains initialization calculations which must not be |
| destroyed between calls of subroutine cfftf or cfftb |
| |
| */ |