IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Feb 8, 2007, 2:45:51 PM (19 years ago)
Author:
Paul Price
Message:

Fixing allocation problem.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/psLib/src/fft/psVectorFFT.c

    r11704 r11719  
    66 *  @author Robert DeSonia, MHPCC
    77 *
    8  *  @version $Revision: 1.38 $ $Name: not supported by cvs2svn $
    9  *  @date $Date: 2007-02-08 04:23:57 $
     8 *  @version $Revision: 1.39 $ $Name: not supported by cvs2svn $
     9 *  @date $Date: 2007-02-09 00:45:51 $
    1010 *
    1111 *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
     
    4949
    5050    // Do the FFT
    51     fftwf_complex *out = fftwf_malloc(num * sizeof(fftwf_complex)); // Output data
     51    fftwf_complex *out = fftwf_malloc((num/2 + 1) * sizeof(fftwf_complex)); // Output data
    5252    fftwf_plan plan = fftwf_plan_dft_r2c_1d(num, in->data.F32, out, FFTW_PLAN_RIGOR);
    5353    fftwf_execute(plan);
     
    5555
    5656    // 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);
    5960    for (int i = 0; i < num; i++) {
    6061#if !defined(FFTW_NO_Complex) && defined(_Complex_I) && defined(complex) && defined(I)
     
    105106
    106107    // 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);
    109110    fftwf_execute(plan);
    110111    fftwf_destroy_plan(plan);
     
    173174    for (int i = 0; i < num; i++) {
    174175        // (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] -
    176177            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] +
    178179            in1Real->data.F32[i] * in2Imag->data.F32[i];
     180
     181        (*outReal)->data.F32[i] = real;
     182        (*outImag)->data.F32[i] = imag;
    179183    }
    180184
Note: See TracChangeset for help on using the changeset viewer.