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