Community
cancel
Showing results for
Did you mean: Beginner
96 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 Employee
96 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 