2016-10-20 2 views
0

Я следил за примером (https://github.com/ContinuumIO/numbapro-examples/blob/master/convolution/fftconvolve.py), который дал fftconvolve с изображением и ядром, оба представляют собой 2D-массивы. В моем случае использования я хотел бы сделать fftconvolve с двумя 1D массивами, чтобы искать возможное совпадение и задержку между ними. Я попытался преобразовать пример в 1D, но получил несколько ошибок Invalid type combination. Может ли быть лучшим примером для 1-мерного массива fftconvolve с использованием CUDA через numbapro? спасибо1 dimanceal fftconvolve с numbapro cuda

ответ

2

Выполнение свертки в одном домене эквивалентно выполнению fft в домене Фурье. Это одна из основ обработки сигналов.

Поэтому, чтобы выполнить свертку векторов1 и vector2, вы можете просто применить fft (1D) к vector1 и vector2 и умножить два комплексных преобразования вместе (фильтрацию), а затем инвертировать fft продукт обратно в исходный домен.

В CUDA, это должно быть что-то вроде этого:

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 

Теперь ваша работа сделана. Существует также пример под названием «simpleCUFFT» в инструменте cuda, который вы можете найти в C: \ ProgramData \ NVIDIA Corporation \ CUDA Образцы

Смежные вопросы