AnsweredAssumed Answered

convolution of real data using clAmdFft

Question asked by cipoint on Feb 26, 2013
Latest reply on Feb 27, 2013 by bragadeesh



I want to perform a convolution with the clAmdFft library (by the way: good work!). The input data and the convolution kernel are both real.

The general procedure is:

transform input A

transform kernel B

multiply the results componentwise

transform back the product

in words: A o B = iFT[FT[A] * FT[B]]


I've implemented it with complex-to-complex (C2C) transformations only and it works fine. The resulting convolution is real data only. Because I have also other operations (kernels) dealing with the input data, I have to expand the buffer A from real to complex then convolve it and then reduce the results from complex to real. This looks somewhat unnecessary for me ...


Here's the question: Do I have to perform a complex-to-complex FFT in the convolution algorithm? Or might it be sufficient to use real-to-complex (R2C) transformation for A and B, gaining hermitian data and then use complex-to-real (C2R) for inverse transforming the componentwise product? I.e.:

A o B = iC2R_FT[R2C_FT[A] * R2C_FT[B]]