import math def quant16(x,liminf,limsup): p = 1.0/pow(2,16) * (limsup - liminf) x_quant = int(round(x/p)) return x_quant def quantN(x,liminf,limsup,N): p = 1.0/pow(2,N) * (limsup - liminf) x_quant = int(round(x/p)) return x_quant def trunc16(x): if x > (pow(2,15) - 1): z = pow(2,15) - 1 z = int(z) return z if x < (-1 * pow(2,15)): z = -1 * pow(2,15) z = int(z) return z return x def truncN(x,N,signed = 0): if signed == 0: if x > (pow(2,N)): z = pow(2,N) - 1 z = int(z) return z if x < 0: z = 0 return z return x if signed == 1: if x > (pow(2,N-1) - 1): z = pow(2,N-1) - 1 z = int(z) return z if x < (-1 * pow(2,N-1)): z = -1 * pow(2,N-1) z = int(z) return z return x def add16(x,y): z = x + y z = trunc16(z) return z def prod16(x,y): z = x * y z = trunc16(z) return z def div16(x,y): z = x/y z = trunc16(z) return z