I've used some Matlab code to generate filter taps for creating an A-weighting filter at 44.1kHz. The taps are:
B = 0.2279, -0.4559, -0.2279, 0.9117, -0.2279, -0.4559, 0.2279 A = 1, -4.0196, 6.1894, -4.4352, 1.4208, -0.1418, 0.0044
I've then tried to use the ipps IIR methods to filter some audio using this filter design, first using ippsIIRInitAlloc_32f to specify the filter taps and order, then ippsIIR_32f_I to do the filtering.
The resulting audio output is just a click! Any ideas what the problem might be? Are the filter taps for the IIR methods specified in the same way as the 'filter' method in Matlab?
In the mean time, I've tried making an approximation to an A-weighting filter by using ippsIIRGenHighpass_64f to create a highpass filter with a cutoff at 500Hz far a sample rate of 44100Hz:
result = ippsIIRGenHighpass_64f(500/44100, 0, 7, taps, ippButterworth)
I've then used these filter taps with ippsIIRInitAlloc_32f, then ippsIIR_32f_I to do the filtering. Once again it doesn't work! The resulting array gradually increments up to infinity until it hits NaN. Any ideas?!
Has anyone else had any problems/successes using the IIR functions?
Might want to try working with a low-pass filter, first.
I'm speculating, but if you are generating a high-pass filter, you may be susceptible to numerical rounding errors that are causing your filter output do drift as you describe. No filter can sample at an infinite rate, so you can never truly build an open-ended high-pass filter; you might need to create a band-pass filter instead.