map float to fixed point
Fixed point processing is not for the faint of heart. It typically requires managing scaling factors, clipping point, signal to noise ratios, underflow, limit cycles, rounding behavior at each single point of your processing chain.
Your best shot at dealing with different data ranges is to rigorously use the Q-number format for each data, state and coefficient in your processing (see https://en.wikipedia.org/wiki/Q_(number_format)) and do the correct multiply &amp; shift  &amp; round/truncate at each operation. This may require statistical or worst case analysis to determine the clipping points and best Qs for each variable.
In order of complexity, you can consider

Convert your fixed point data to floating point, run the algorithm in floating point, and then only limit and convert back to fixed point as the last step.
Same as item one but if you can't do float consider using 24-bit or 32-bit fixed point data instead. This creates a extra margin and headroom and makes life A LOT easier
Stick with 16-bit all around. That means you have to fight for every single dB of signal to noise ratio at every step of your processing. Depending on what you are doing you may consider selectively using double precision for critical state variables or operations.