2017-06-25 2 views
0

Je dois convertir cette ligne (Matlab) à CUDA:Comment faire symétrique inverse fft avec CUFFT

picTimeFiltered = ifft((picFFT_filt), size(I,3), 3 ,'symmetric'); 

Mon implémentation actuelle est de cette ligne (sans drapeau 'symétrique'):

picTimeFiltered = ifft((picFFT_filt), size(I,3), 3); 

Ceci est ma mise en œuvre de CUDA:

void ifftDouble_many(cuDoubleComplex*& input, cuDoubleComplex*& outputMatrixAfterIFFT, const int width, const int height, const int depth) 
{ 
    const int NX = depth; 
    const int NY = width * height; 

    // Allocate and set the CUDA Input 
    cuDoubleComplex *d_input; 
    cudaMalloc(&d_input, NX*NY * sizeof(cuDoubleComplex)); 
    cudaMemcpy(d_input, input, NX * NY * sizeof(cuDoubleComplex), cudaMemcpyHostToDevice); 

    // Allocate the CUDA output 
    cufftDoubleComplex* d_output = nullptr; 
    cudaMalloc((void**)&d_output, sizeof(cuDoubleComplex)*NX*NY); 

    // CUDA FFT 
    cufftHandle plan; 
    int n[1] = { NX }; 
    int inembed[] = { NY, NX }; 
    int onembed[] = { NY, NX }; 
    cufftPlanMany(&plan, 1, n, inembed, 1, NX, onembed, 1, NX, CUFFT_Z2Z, NY); 
    cufftExecZ2Z(plan, d_input, d_output, CUFFT_INVERSE); 

    // Devide the results by depth 
    devideCufftDoubleComplexArrayByScalar_CUDA(d_output, NX * NY, depth); 

    cudaMemcpy(outputMatrixAfterIFFT, d_output, NY*NX * sizeof(cuDoubleComplex), cudaMemcpyDeviceToHost); 

    /* Destroy the CUFFT plan. */ 
    cufftDestroy(plan); 
    cudaFree(d_input); 
    cudaFree(d_output); 
} 

S'il vous plaît conseiller - comment faire symétrique inverse fft via CUDA?

+0

R @ Paul S'il vous plaît conseiller –

+0

:) S'il vous plaît conseiller quoi? Avez-vous une question réelle? Est-ce que le code que vous avez posté ne fonctionne pas? Si oui, de quelle manière cela ne fonctionne-t-il pas? – talonmies

+0

Salut @talonmise. Mon code fonctionne et inverse fft MAIS PAS symétrique. J'ai besoin d'ifft symétrique comme matlab. Voir jusqu'à s'il vous plaît –

Répondre