I went with Corlett's original suggestions for now. I've tried various things, for example:
f = (((filtervalue & 0xFF) | 0x100) * (filtervalue>>8)) >> 1
but this doesn't do enough filtering.
Looking at the graphs in AICA docs, the sensible filter values (cutoff > 100Hz) start at 0x1400 anyway. So maybe it really is shifted like that.
As for q, I just shift it 8 bits left to make all coefficients 13-bit.