3 ms·
I ran into this problem with a codec chip. We had to run the output at 48 khz, and the input and output clock had to be the same. Well we didn't have enough CPU
by greesil 3y ago
I ran into this problem with a codec chip. We had to run the output at 48 khz, and the input and output clock had to be the same. Well we didn't have enough CPU to process the input at 48 khz, we only cared about 8 khz bandwidth for human speech. Boxcar averaging then decimating produced way too much aliasing, so much that the ML classifiers wouldn't work. The solution was putting a honking large FIR anti aliasing filter on the codec, like 100 taps, because -that- chip had oodles of CPU to spare as it turned out.
Why FIR? It had a super sharp cutoff and of course linear phase. If I'd known about Bessel filters at the time I'd have tried those out. Live and learn and ship it.
- anthomtb 3y agoTo clarify - you were able to run the FIR filter on the codec chip because the main CPU didn't have enough <somthing - clock rate?> to handle the 48kHz input? Nifty story, just wanted to validate my understanding.
- greesil 3y agoYep that's it. The main cpu was a Cortex M3 or something like this. It's been awhile so my recollection is a little hazy.
- rightbyte 3y agoDid you try a simple iir filter and then decimation?
- greesil 3y agoI could have done that and moved the cutoff frequency back to, oh let's say 4khz but then I'm adding attenuation at the higher end of the band and nonlinear group delay. That's maybe fine if that's how we processed the training data, but I don't want us to retrain the classifier every time I change the anti aliasing filter.