Let's analyze your suggestion of using a FIR filter at f = 0.5/512 =
0.0009765625 for an interpolation filter for 512x oversampling.

Here's the frequency response of a FIR filter of length 1000:
http://morpheus.spectralhead.com/img/fir512_1000.png

Closeup of the frequency range between 0-0.01 (cutoff marked with black line):
http://morpheus.spectralhead.com/img/fir512_1000_closeup.png

Apparently that's a pretty crappy anti-alias filter, the transition
band is very wide.

So let's try a FIR filter of length 5000:
http://morpheus.spectralhead.com/img/fir512_5000_closeup.png

Better, but still quite a lot of aliasing above the cutoff freq.

FIR filter of length 20,000:
http://morpheus.spectralhead.com/img/fir512_20000_closeup.png

Now this starts to look like a proper-ish anti-alias filter.

The problem is - its length is 20,000 samples, so assuming 32-bit
float representation, the coefficients alone need about 80 KB of
memory... meaning that there's a high chance that it won't even fit
into the L1 cache, causing a lot of cache misses, so this filter will
be extra slow, since your CPU will be constantly waiting for the
coefficients to arrive from the L2 cache and/or RAM. Also consider how
much CPU power you need to do convolution with a 20,000 sample long
kernel at 512x oversampled rate... I bet you're not trying to do this
in realtime, are you?

So, that's not exactly the brightest way to do 512x oversampling,
unless you prefer to waste a lot of resources and spend a week on
upsampling. In that case, it is ideal.

-P
_______________________________________________
music-dsp mailing list
music-dsp@music.columbia.edu
https://lists.columbia.edu/mailman/listinfo/music-dsp

Reply via email to