Community
cancel
Showing results for 
Search instead for 
Did you mean: 
lkeene
Beginner
108 Views

Packed vs extended complex format?

Hello, I have a quick question regarding the RCPack2D format and extended complex format. I'd like to normalize the result of an FFT by dividing it by its magnitude. Here's what I'm doing:

1) Compute forward FFT via "ippiFFTFwd_RToPack_32f_C1R". Store in "Result1_complexPacked".

2) Compute magnitude of above result via "ippiMagnitudePack_32f_C1R". Store in "Result2_real".

3) Normalize "Result1_complexPacked" by computing (Result1_complexPacked / Result2_real). To do this:

3a) Unpack "Result1_complexPacked" via "ippiPackToCplxExtend_32f32fc_C1R". Store in "Result1_unpacked".

3b) Loop through and normalize in-place:

for(int a = 0; a < Height; a++)

{

int denominatorRowOffset = (a * Width);

int numeratorRowOffset = (a * 2) * Width;

for(b = 0; b < Width; b++)

{

float denominator = *(Result2_real + denominatorRowOffset + b);

*(Result1_unpacked + numeratorRowOffset + (b * 2)) =*(Result1_unpacked + numeratorRowOffset + (b * 2)) / denominator; // Real component.

*(Result1_unpacked + numeratorRowOffset + (b * 2) + 1) =*(Result1_unpacked + numeratorRowOffset + (b * 2) + 1) / denominator; // Imaginary component.

}

}

3c) Repack "Result1_unpacked" for inverse FFT via "ippiCplxExtendToPack_32fc32f_C1R".

Is my understanding/usage of the Packed->Unpacked->Packed operations as illustrated above correct? It's the output ordering I'm unclear on.

-L

0 Kudos
1 Reply
Chao_Y_Intel
Employee
108 Views

Hello,

This code looks fine. For step 3 ( 3a - 3c), possbilly it has some more efficient way:

It can divide the RCPack2D data by its magnitude according to RCPack2D format description in the manual. It does not need to convert to CplxExtend format, and then convert back.

Thanks,

Chao

Reply