Changeset 11719 for trunk/psLib/src/fft/psVectorFFT.c
- Timestamp:
- Feb 8, 2007, 2:45:51 PM (19 years ago)
- File:
-
- 1 edited
-
trunk/psLib/src/fft/psVectorFFT.c (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psLib/src/fft/psVectorFFT.c
r11704 r11719 6 6 * @author Robert DeSonia, MHPCC 7 7 * 8 * @version $Revision: 1.3 8$ $Name: not supported by cvs2svn $9 * @date $Date: 2007-02-0 8 04:23:57$8 * @version $Revision: 1.39 $ $Name: not supported by cvs2svn $ 9 * @date $Date: 2007-02-09 00:45:51 $ 10 10 * 11 11 * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii … … 49 49 50 50 // Do the FFT 51 fftwf_complex *out = fftwf_malloc( num* sizeof(fftwf_complex)); // Output data51 fftwf_complex *out = fftwf_malloc((num/2 + 1) * sizeof(fftwf_complex)); // Output data 52 52 fftwf_plan plan = fftwf_plan_dft_r2c_1d(num, in->data.F32, out, FFTW_PLAN_RIGOR); 53 53 fftwf_execute(plan); … … 55 55 56 56 // Pull the real and imaginary parts out 57 *real = psVectorRecycle(*real, num/2 + 1, PS_TYPE_F32); 58 *imag = psVectorRecycle(*imag, num/2 + 1, PS_TYPE_F32); 57 num = num/2 + 1; 58 *real = psVectorRecycle(*real, num, PS_TYPE_F32); 59 *imag = psVectorRecycle(*imag, num, PS_TYPE_F32); 59 60 for (int i = 0; i < num; i++) { 60 61 #if !defined(FFTW_NO_Complex) && defined(_Complex_I) && defined(complex) && defined(I) … … 105 106 106 107 // Do the FFT 107 *out = psVectorRecycle(*out, 2 * num, PS_TYPE_F32);108 fftwf_plan plan = fftwf_plan_dft_c2r_1d( 2 * num, in, (*out)->data.F32, FFTW_PLAN_RIGOR);108 *out = psVectorRecycle(*out, origNum, PS_TYPE_F32); 109 fftwf_plan plan = fftwf_plan_dft_c2r_1d(origNum, in, (*out)->data.F32, FFTW_PLAN_RIGOR); 109 110 fftwf_execute(plan); 110 111 fftwf_destroy_plan(plan); … … 173 174 for (int i = 0; i < num; i++) { 174 175 // (a + bi) * (c + di) = (ac - bd) + (bc + ad)i 175 (*outReal)->data.F32[i]= in1Real->data.F32[i] * in2Real->data.F32[i] -176 float real = in1Real->data.F32[i] * in2Real->data.F32[i] - 176 177 in1Imag->data.F32[i] * in2Imag->data.F32[i]; 177 (*outImag)->data.F32[i]= in1Imag->data.F32[i] * in2Real->data.F32[i] +178 float imag = in1Imag->data.F32[i] * in2Real->data.F32[i] + 178 179 in1Real->data.F32[i] * in2Imag->data.F32[i]; 180 181 (*outReal)->data.F32[i] = real; 182 (*outImag)->data.F32[i] = imag; 179 183 } 180 184
Note:
See TracChangeset
for help on using the changeset viewer.
