xref: /aosp_15_r20/external/libopus/dnn/training_tf2/ulaw.py (revision a58d3d2adb790c104798cd88c8a3aff4fa8b82cc)
1
2import numpy as np
3import math
4
5scale = 255.0/32768.0
6scale_1 = 32768.0/255.0
7def ulaw2lin(u):
8    u = u - 128
9    s = np.sign(u)
10    u = np.abs(u)
11    return s*scale_1*(np.exp(u/128.*math.log(256))-1)
12
13
14def lin2ulaw(x):
15    s = np.sign(x)
16    x = np.abs(x)
17    u = (s*(128*np.log(1+scale*x)/math.log(256)))
18    u = np.clip(128 + np.round(u), 0, 255)
19    return u.astype('int16')
20