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?


7 posts / 0 new
Last post
For more complete information about compiler optimizations, see our Optimization Notice.

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.

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.



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

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

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

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.  

Leave a Comment

Please sign in to add a comment. Not a member? Join today