Intel® Integrated Performance Primitives
Deliberate problems developing high-performance vision, signal, security, and storage applications.

Question about ippiFFTFwd

mickeyhah
Beginner
730 Views

Hallo,

I have one more question, actually I want to perform FFT 3D for my image, but IPP haven't supported yet, so I tried to perform FFT 2D for x,ydimensions using ippiFFT and then FFT 1Dusing ippsFFT for all over vectors inz dimension. Now I use the function belowto perform FFT 2D, and as I understood, parameter dstin this function is a two-dimensional array. How can I convert it to one-dimensional array so that I can use "ippsFFTFwd_RToPack_32f" for FFT 1D.

status2D = ippiFFTFwd_RToPack_8u32s_C3RSfs(src, NX*sizeof(Ipp32u), dst, NY*sizeof(Ipp32u), spec, 18, 0);

Thank you for your attention and your help

Anh

0 Kudos
3 Replies
levicki
Valued Contributor I
730 Views

Someone please correct me if I am wrong, but I think that 3D FFT can only be done by calculating 1D FFT in each of the three dimensions. Either that or by using a function which does 3D transform natively.

Pay close attention to packing and scaling of the results too.

0 Kudos
Vladimir_Dudnik
Employee
730 Views

Hello,

our expert has added comment on this:

For example we need 3D FFT from 4x4x4 cube.

It consists of 4 2D planes for instance:

aaaa bbbb cccc dddd
aaaa bbbb cccc dddd
aaaa bbbb cccc dddd
aaaa bbbb cccc dddd

So we can use 2D FFT for the first stage and perform 4 2D transforms:

A

AAA BBBB CCCC DDDD
AAAA BBBB CCCC DDDD
AAAA BBBB CCCC DDDD
AAAA BBBB CCCC DDDD

Then in order to have 3D transform it is required to perform 1D transform through z axis, so we need to prepare 16 1D vectors

ABCD and to call 1D FFT for each of them. There is no any special transform from 2D matrixes to 1D in z direction you should use a simple by-element copy loop.

Regards,
Vladimir

0 Kudos
mickeyhah
Beginner
730 Views

Hi Vladimir,

Thank you for your helping. According to your answer I think that I am on the right direction. But nowbesides performing FFT3D,I want to perform also FFT3D inverse.

So the question is: for FFT3D inverse, do I have to do the invert steps?. That means in your examples, first I have to perform FFT1D for 16 1D vectors and then FFT2D for 4 planes ??? Is that correct?

Thanks in advance

Regards

Anh

0 Kudos
Reply