이미지와 커널로 fftconvolve를 수행하는 예제 (https://github.com/ContinuumIO/numbapro-examples/blob/master/convolution/fftconvolve.py)는 모두 2 차원 배열입니다. 필자는 두 개의 1D 배열을 사용하여 fftconvolve를 수행하여 가능한 매치와 지연을 찾으려고합니다. 예를 1D로 변환하려고 시도했지만 몇 가지 오류가 발생했습니다(). numbapro를 통해 CUDA를 사용하여 1 차원 어레이 fftconvolve를 수행하는 더 좋은 예가 있을까요? 덕분에numbapro cuda가있는 dimentional fftconvolve
0
A
답변
2
하나의 도메인에서 컨볼 루션을 수행하는 것은 푸리에 도메인에서 fft를 수행하는 것과 동일합니다. 이것은 신호 처리의 기본 요소 중 하나입니다.
따라서 vector1과 vector2의 컨볼 루션을 수행하려면 fft (1D)를 vector1과 vector2에 적용하고 두 개의 복소 변환을 함께 필터링 (필터링) 한 다음 원래의 도메인으로 다시 반전합니다.
cufftHandle _planKernel // you fft handle
cufftPlan1d(&_planKernel, _fftLen, CUFFT_C2C, 1); // create 1D fft handle
cufftComplex* VECTOR1, *VECTOR2, *PRODUCT;
MakeVector1Complex<<<blockSize, GridSize>>>() // simply set real part of the VECTOR1 = vector1, and set the imaginary part VECTOR to 0
MakeVector2Complex<<<blockSize, GridSize>>>() // simply set real part of the VECTOR2 = vector2, and set the imaginary part VECTOR to 0
cufftExecC2C(planKernel, VECTOR1, VECTOR1, CUFFT_FORWARD); // apply fft to VECTOR1
cufftExecC2C(planKernel, VECTOR2, VECTOR2, CUFFT_FORWARD); // apply fft to VECTOR2
ComplexMutiplication<<<blockSize, GridSize>>>(VECTOR1, VECTOR2) // complex multiplication of VECTOR1 and VECTOR2
cufftExecC2C(planKernel, PRODUCT, PRODUCT, CUFFT_INVERSE); // inverse fft on the product of VECTOR1 AND VECTOR2
MakeProductReal<<<blockSize, GridSize>>>(PRODUCT) // extract the real part of PRODUCT
가 이제 작업이
을 수행 : CUDA에서,이 같은해야한다. 당신이 C에서 찾을 수 CUDA 툴킷에 "simpleCUFFT"라는 예도 있습니다 : \ 경우 ProgramData 엔비디아 \ CUDA \ 샘플