- Timestamp:
- Oct 15, 1999, 2:05:15 PM (26 years ago)
- Location:
- trunk/SophyaLib/NTools
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/SophyaLib/NTools/fftserver.cc
r459 r467 23 23 sz_cfft = 0; 24 24 ws_cfft = NULL; 25 sz_cdfft = 0; 26 ws_cdfft = NULL; 25 27 } 26 28 … … 29 31 if (ws_rfft) delete[] ws_rfft; 30 32 if (ws_cfft) delete[] ws_cfft; 33 if (ws_cdfft) delete[] ws_cdfft; 31 34 } 32 35 … … 75 78 checkint_rfft(l); 76 79 rfftf_(&l, inout, ws_rfft); 80 for (int k= 2;k<=(l+1)/2;k++) inout[2*k-2]=-inout[2*k-2]; 77 81 } 78 82 … … 81 85 checkint_dfft(l); 82 86 dfftf_(&l, inout, ws_dfft); 87 for (int k= 2;k<=(l+1)/2;k++) inout[2*k-2]=-inout[2*k-2]; 83 88 } 84 89 … … 92 97 } 93 98 cfftf_(&l, foo, ws_cfft); 94 for (int i=0;i<l;i++) inout[i]= complex<float> (foo[2*i], foo[2*i+1]); 99 inout[0]=complex<float> (foo[0],foo[1]); 100 for (int i=1;i<l;i++) inout[l-i]= complex<float> (foo[2*i], foo[2*i+1]); 95 101 delete[] foo; 96 102 } … … 99 105 { 100 106 checkint_cdfft(l); 101 double* foo =new double[2*l];107 double* foo=new double[2*l]; 102 108 for (int i=0;i<l;i++){ 103 109 foo[2*i]=inout[i].real(); … … 105 111 } 106 112 cdfftf_(&l, foo, ws_cdfft); 107 for (int i=0;i<l;i++) inout[i]= complex<double> (foo[2*i],foo[2*i+1]); 113 inout[0]=complex<double> (foo[0],foo[1]); 114 for (int i=1;i<l;i++) { 115 inout[l-i]= complex<double> (foo[2*i],foo[2*i+1]); 116 } 108 117 delete[] foo; 109 118 } … … 112 121 { 113 122 checkint_rfft(l); 114 rfft b_(&l, inout, ws_rfft);123 rfftf_(&l, inout, ws_rfft); 115 124 } 116 125 … … 118 127 { 119 128 checkint_dfft(l); 120 dfft b_(&l, inout, ws_dfft);129 dfftf_(&l, inout, ws_dfft); 121 130 } 122 131 … … 129 138 foo[2*i+1]=inout[i].imag(); 130 139 } 131 cfft b_(&l, foo, ws_cfft);140 cfftf_(&l, foo, ws_cfft); 132 141 for (int i=0;i<l;i++) inout[i]=complex<float> (foo[2*i],foo[2*i+1]); 133 142 delete[] foo; … … 142 151 foo[2*i+1]=inout[i].imag(); 143 152 } 144 cdfft b_(&l, foo, ws_cdfft);153 cdfftf_(&l, foo, ws_cdfft); 145 154 for (int i=0;i<l;i++) inout[i]=complex<double> (foo[2*i],foo[2*i+1]); 146 155 delete[] foo; -
trunk/SophyaLib/NTools/fftserver.h
r459 r467 39 39 }; 40 40 #endif 41 42 /*! \class FFTServer 43 \brief An FFT server 44 45 A class that calculates Fourier transforms forwards and backwards. 46 47 The class calls the c library ``fftpack'', which is accessible and documented 48 at http://www.netlib.org/fftpack/. However, the class functions do not 49 necessarily correspond with the equivalent fftpack function. For example, 50 fftpack "forward" transformations are in fact inverse fourier transformations. 51 Otherwise, the output is in the fftpack format. 52 53 Complex input must be entered using the <complex> template. Otherwise, 54 all input is assumed to be real. 55 56 Due to the way that fftpack manages 57 its work arrays, an object can run faster if the length of the input arrays 58 does not change. For example, if you need to do a series of FFT's 59 of differing length, it may be more efficient to create an fftserver object 60 for each length. 61 */ 62 63 /*! \fn virtual void FFTServer::fftf(int l, float* inout) 64 \param l length of array 65 \param inout input array /output forward FFT (original array destroyed) 66 */ 67 /*! \fn virtual void FFTServer::fftb(int l, float* inout) 68 \param l length of array 69 \param inout input array /output backward FFT (original array destroyed) 70 */ 71 /*! \fn virtual void FFTServer::fftf(int l, double* inout) 72 \param l length of array 73 \param inout input array /output forward FFT (original array destroyed) 74 \param inout input/output array (original array destroyed) 75 */ 76 /*! \fn virtual void FFTServer::fftb(int l, double* inout) 77 \param l length of array 78 \param inout input array /output backward FFT(original array destroyed) 79 */ 80 /*!\fn virtual void FFTServer::fftf(int l, complex<float>* inout) 81 \param l length of array 82 \param inout input array /output forward FFT (original array destroyed) 83 */ 84 /*! \fn virtual void FFTServer::fftb(int l, complex<float>* inout) 85 \param l length of array 86 \param inout input array /output backward FFT (original array destroyed) 87 */ 88 /*! \fn virtual void FFTServer::fftf(int l, complex<double>* inout) 89 \param l length of array 90 \param inout input array /output forward FFT (original array destroyed) 91 */ 92 /*! \fn virtual void FFTServer::fftb(int l, complex<double>* inout) 93 \param l length of array 94 \param inout input array /output backward FFT(original array destroyed) 95 */ 96 /*!\fn virtual void FFTServer::fftf(Vector& in, Vector& out) 97 \param in input array 98 \param out forward FFT 99 */ 100 /*! \fn virtual void FFTServer::fftb(Vector& in, Vector& out) 101 \param in input array 102 \param out backward FFT 103 */
Note:
See TracChangeset
for help on using the changeset viewer.