JohnRoberts said:
So in short you are saying the chip makers (mostly) do it right, the DAW software guys mostly don't...
That would be an extremely rude judgement...
Decimation in a converter chip (not an SRC chip) is done by taking one sample every 64, 128, 256,...clock ticks (depending on the masterclock and desired output rate). It's easy to do, and the filters are fixed so they can be fully optimized.
In a DAW, that's a different story; the basic downsampling is already done in hardware. SRC in a DAW is converting from one base SR to another, very often with a ratio that is not a power of two.
Well, in fact, two stories:
One for file processing, which is a non-real time process, and provides SRC between mathematically fixed SR's. The algorithms used there are based on upsampling to the Least Common multiple and then downsampling to the target SR. [aside] (That's similar to pre-scaling, which involves shifting bits to the right, which is much easier than applying attenuation via the ALU). [/aside] Obviously the filters can be optimized, even more than in a chip, because there are no real-time constraints and the processing power is much larger than whatever's in the chip (although, due the the dedicated architecture, Mips are well optimized).
The second story is teal-time SRC, which involves two more or less fluctuating clocks and a permanent calculation of the real instant ratio, which is a very complex operation. Basically there are two solutions.
One is the polynomial SRC, which can be assimilated to a frequency detector delivering the instant value of the ratio, and the filters may or may not follow; most often they don't, they are fixed and the designer has to give them some slack.
The other is the system Lavry uses; I'm not sure he invented it. Basically, the converter assumes that both frequencies don't drift and operates the conversion. Obviously, after some time, one of the buffers (the input buffer that receives the incoming data and an output buffer that feeds the output when the WC tells it to) is bound to overflow, so the system will change the ratio in order to compensate.
Basically, if you consider the clock variations as two more or less parallel curved lines, the first method continuously adjusts the ratio to follow the median line, the second method does it with a succession of straight lines.
The claimed advantage of the second method is that it produces extremely low levels of jitter, because the frequency is fixed for a period of time, but from time to time, there is a large discontinuity, when the system has to change gears.
Now, in addition to that, there is a compromise, because the anti-alias filter cannot be perfect. The number of taps cannot be infinite, because of physical limitations, but also because the more taps, the longer the latency (256 taps at 44.1k is about 6ms). So the designers make their choices. Some privilege transient response at the expense of out-of-band attenuation or HF extension, some privilege roll-off at the risk of being criticized for the harshness of cymbals, some offer the choice of several optimizations (Reaper, Izotope, Samplitude,...).
Check
http://src.infinitewave.ca/