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

Wiener filter

thorsan
Beginner
240 Views
Hi,

I am using the IPPS library.

I want to compute a wiener filter without having to conjpack/conjperm the data from the fourier transform. I see that there are functions for computing the multplication of two vector in the perm/pack formats but I need to do a division as well. Anyone who has done this or have an idea on how it can be implemented?

Say I have X and Y from the FFT and I want to compute

H = X/Y. X/Y

which is equal to

H = X*conj(Y)/|Y|2

X*conj(Y) can be computed using the functions provided.
The divisor is c2+d2 if Y = c+i*d, so using the standard mul functions c^2 and d^2 can be computed quite easily. But do be able to divide the packed/permed vector X*conj(Y) by c^2+d^2, I have to sum element 0 and 1, 2 and 3 and so on and put the sum of 0 and 1 into place 0 and 1 and the sum of 2 and 3 into place 2 and 3 and so on. Then I can use the normal div function to do the division.

Am I correct in my thinking here? Anyone who knows a simple way of doing this without having to run a for loop.


Thanks,
Thor Andreas
0 Kudos
2 Replies
thorsan
Beginner
240 Views
Hi,

I think I found the answer to my question:

As long as I am in the CCS format I can just cast the Ipp32f pointer I have to a Ipp32fc pointer and use the standard functions and when I want to do the IFFT i just cast back to Ipp32f. Would this work?

Is there a speed difference between the formats for FFT?

Thanks,
Thor Andreas
0 Kudos
Vladimir_Dudnik
Employee
240 Views
Hello,

you can compare performance of different IPP functions with IPP performance system available in IPP install package, please take a look at IPPtoolsperfsys folder

Regards,
Vladimir
0 Kudos
Reply