Take a sinewave normalized to 1 in 16 bits. By the way, this is how a sinewave looks like in Q15 format.
Assume the signal is passed through an amplifier has a gain of 2. The resulting numbers would overflow and alias.
That would be totally wrong in terms of signal amplification since it no longer has any resemblance of the original wave. That is where saturation arithmetic comes.
Saturation arithmetic simply clips the positive values to 32767 (largest value in 16bits) and negative values to 32768 (minimum value in 32768). Multiplying each value in the original sinewave by 2 gives the following result:
The last waveform was generated by Python. The others may generated by commenting and modifying the code as appropriate.
import numpy as np
import matplotlib.pyplot as plot
time = np.arange(0, 10, 0.01);
amplitude = 65536*np.sin(time)
clipped = np.clip(amplitude, 32768, 32767)
#aliased = np.where(amplitude>32767,amplitude65536,amplitude)
#aliased2 = np.where(aliased<32768,aliased+65536,aliased)
print (clipped)
# Plot a sine wave using time and amplitude obtained for the sine wave
plot.plot(time, clipped)
plot.grid(True, which='both')
plot.axhline(y=0, color='k')
plot.show()
