ref: 35ee397e060283d30c098ae5e17836316bbec08b
dir: /dnn/torch/lpcnet/utils/ulaw.py/
import math as m import torch def ulaw2lin(u): scale_1 = 32768.0 / 255.0 u = u - 128 s = torch.sign(u) u = torch.abs(u) return s * scale_1 * (torch.exp(u / 128. * m.log(256)) - 1) def lin2ulawq(x): scale = 255.0 / 32768.0 s = torch.sign(x) x = torch.abs(x) u = s * (128 * torch.log(1 + scale * x) / m.log(256)) u = torch.clip(128 + torch.round(u), 0, 255) return u def lin2ulaw(x): scale = 255.0 / 32768.0 s = torch.sign(x) x = torch.abs(x) u = s * (128 * torch.log(1 + scale * x) / torch.log(256)) u = torch.clip(128 + u, 0, 255) return u