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

ippsFIR_Direct

Chris_T_3
Beginner
635 Views

I'm looking at using IPP to optimize a 1024 point FIR filter.  For my application I need to update the coefficients every sample, so that the coefficients are smoothly interpolated between different coefficient sets.  The function ippsFIR_Direct_32f seems to do what I need, but it's deprecated in IPP v8, so I'd rather user something else if there is a better option.

The other FIR functions, such as ippsFIRSR_32f, look like they require a seperate intitalization of the coefficient buffers (using ippsFIRSRInit), which I don't think will work for me since I need to update the coefficients within audio processing interrupt, so I can't have any memory allocation or costly copying of data.

Any suggestions?

Thanks.

0 Kudos
6 Replies
Jeffrey_M_Intel1
Employee
635 Views

First, for deprecations, we are still gathering input and no removal decisions have been made.  As we get closer to removals we hope to post more information but for now you can keep using the direct functions if they work for you.

You are correct that IppsFIRSR_32f requires an initialization phase where the taps array location is specified.  It may not be a full solution, but tap values can be changed without re-initializing the spec.  It's very understandable that you don't want performance regressions, or to re-validate a solution when switching to a replacement for the direct implementation though.

We hope to provide more information on full replacements for the direct functions.  This is still a work in progress but the goal is to do this well in advance of removals.  For now, your best answer may be to continue using what you have until replacement info is published.

0 Kudos
Chris_T_3
Beginner
635 Views

I haven't actually implemented anything yet, so I don't have any legacy code to contend with in this case.  So it sounds like you are saying that I can use ippsFIRGetTaps_32f to get a pointer to the tap coefficients, and then modify them as needed?  I think that will work for me.

Thanks,

Chris

0 Kudos
Jeffrey_M_Intel1
Employee
635 Views

No need to use a GetTaps function.  You have full access to the taps already, and can change them without calling init or GetTaps.

0 Kudos
Igor_A_Intel
Employee
635 Views

Hi Chris,

if you need to update taps for every sample - you should not use FIR in any form - it is too expensive, FIR is optimized in supposition that taps are const for rather long (~2-100K) input vectors. Please use ippsDotProd_xx function - it's the most suitable in your case.

regards, Igor

0 Kudos
Igor_A_Intel
Employee
635 Views

one more thought - if you use taps adaptation after each sample - maybe you should take a look at ippsFIRLMS function? It performs Taps adaptation at each sample to match desired signal...

regards, Igor

0 Kudos
Chris_T_3
Beginner
635 Views

Thanks for the help.  I could probably get away with updating the taps every 4 samples, if that will help make the processing more significantly more efficient when using ippsFIRSR.  

0 Kudos
Reply