I put in a chain of 4 half-bands for both interpolation and decimation by up to 1,2,4,8,or 16. Its not ideal:
Every filter in the chain is identical (11 taps, clock rate/2), but we could save resources by allowing filters closer to baseband to work at lower rates, or have more taps for a better roll-off.
The baseband samples could be scaled to compensate for filter gain/loss
For a quick cheat to deal with output scaling, each filter's output is shifted up by 1. This factor of 2x matches the loss very closely, but large values could "clip" in a messy way.
I put in a chain of 4 half-bands for both interpolation and decimation by up to 1,2,4,8,or 16. Its not ideal: