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

Help with FFTInv_CCSToR and FFTInv_CToC

thales_oliver
Beginner
220 Views

Hello all,

I'd like to use the Noise Reduction implementation provided by Intel on a PCA architecture.

First, it seems that, despite what the implementation and the PCA manual say, the "ippsFFTFwd_RToCSS_32s16s_Sfs" and "ippsFFTInv_CCSToR_32s16s_Sfs" functions are only available on PC, not on PCA.

I have tried to get around that problem by using the only FFT functions that I have found to be available: "ippsFFT*_CToC_16s_Sfs". Of course, this requires me to do some type conversion. It works just fine for the forward transform, however I can't seem to get the inverse transform to work.

I have implemented the following on PC:

Code:
ippsFFTInv_CCSToR_32s16s_Sfs((Ipp32s*)pNRState->pFilterOutput, pNewTimeFilterOutput16s,
pNRState->pFFTR, 0, pNRState->pBuffer); ippsFFTInv_CToC_16sc_Sfs(pInputFFT, pOutputFFT,
pNRState->pFFTR2, 0, pNRState->pBuffer2);

pInputFFT is a Ipp16sc array, pNRState->pFilterOutput is a Ipp32sc array. They contain exactly the same values (no overflow).

After execution, pNewTimeFilterOutput16s (Ipp16s array) contains the correct values. What I want is to get those values in pOutputFFT (Ipp16sc array).

The problem is that pOutputFFT's elements have non-null imaginary parts. I've tried discarding the imaginary parts, computing the norm, etc. but each time I get wrong values.

Is there something I'm doing wrong? Any help would be greatly appreciated.

Oliver

0 Kudos
1 Reply
Vladimir_Dudnik
Employee
220 Views
Hi,
some difference is possible in imaginary part of signal if you use complex function FFTInvCToC instead of real function FFTInvCCSToR. If your input data is reasonable, this difference should be small enough.
The question is are your input 32s data can be placed into 16s type?
Which order of FFT did you use?
Which IPP library did you use?
Regards,
Vladimir
0 Kudos
Reply