FIR Half-band filter - Speed

FIR Half-band filter - Speed

Hi,

I use FIR half-band filters a lot with 64-bit complex data. As there are a lot of zero coefficients, I'm wondering if there's a way of saving CPU cycles when using ippsFIR_64fc?

FWIW my coefficients are:

0.0003570668537809367,
0,
-0.0036789397980313754,
0,
0.01890553702015162,
0,
-0.069463173729395228,
0,
0.30387951429555071,
0.5,
0.30387951429555071,
0,
-0.069463173729395228,
0,
0.01890553702015162,
0,
-0.0036789397980313754,
0,
0.0003570668537809367,

6 Beiträge / 0 neu
Letzter Beitrag
Nähere Informationen zur Compiler-Optimierung finden Sie in unserem Optimierungshinweis.

Hi Simon,

for ippsFIR_64fc you should provide taps of 64fc type. The taps you've provided are not 64fc. Could you be more specific on what you want to do? We don't provide special support for half-band and symmetrical filters - general case only.

regards, Igor

Quote:

Igor Astakhov (Intel) wrote:

Hi Simon,

for ippsFIR_64fc you should provide taps of 64fc type. The taps you've provided are not 64fc. Could you be more specific on what you want to do? We don't provide special support for half-band and symmetrical filters - general case only.

regards, Igor

Igor,

 

I actually use 64fc taps, this is just some sample stuff indicating the zeros :) .

I was just wondering that as I have coefficients with lots of zeros maybe I could save some cycles using IPP functions I had not come across / found etc., if 50% of the coefficients are zero then 50% of my multiplications are a bit of a waste.

It's not a big problem at all, for the heavy-duty CPU work I have I'll use CUDA (FIR, FFT) but I *really* like IPP, it's the next best thing after Visual Studio :) .

Simon,

IPP FIRs have internally 3 different code branches: so called "vertical" unrolling, than "horizontal" and finally, for rather big orders - FFT-based. For 64fc data type a criterion for switching to FFT-based algorithm is FIR order=32 (tapsLen). So if you use FIR orders greater than 32 - it doesn't matter if your filter is half-band. If less - yes, you may expect up to 1.5-2x speedup (but in this case FFT-criterion may be shifted up to the order~=64...). We'll consider half-band FIR implementation for some of the next IPP releases. You are not the first who've asked for such functionality.

regards, Igor.

Best Reply

Quote:

Igor Astakhov (Intel) wrote:

Simon,

IPP FIRs have internally 3 different code branches: so called "vertical" unrolling, than "horizontal" and finally, for rather big orders - FFT-based. For 64fc data type a criterion for switching to FFT-based algorithm is FIR order=32 (tapsLen). So if you use FIR orders greater than 32 - it doesn't matter if your filter is half-band. If less - yes, you may expect up to 1.5-2x speedup (but in this case FFT-criterion may be shifted up to the order~=64...). We'll consider half-band FIR implementation for some of the next IPP releases. You are not the first who've asked for such functionality.

regards, Igor.

 

Igor,

 

This would be great. My interest at the moment is with half-bandwidth filters where half the coefficients are NULL, format 32fc and 64fc. I can use multi-threading for now, but my data sources are delivering steadily increasing bandwidth, data sources such as hackRF, bladeRF and Ettus B200.

I envisage in the future bandwidths of 100 MSPS or more...

Quote:

Igor Astakhov (Intel) wrote:

Hi Simon,

for ippsFIR_64fc you should provide taps of 64fc type. The taps you've provided are not 64fc. Could you be more specific on what you want to do? We don't provide special support for half-band and symmetrical filters - general case only.

regards, Igor

Igor,

Stupid question - is ippsFIR_32fc faster than ippsFIR_64fc with AVX or AVX2? I'm using fc64 but could use 32fc.

Melden Sie sich an, um einen Kommentar zu hinterlassen.