Commit 3f89b7ce authored by Jason Lian's avatar Jason Lian
Browse files

Remove numpy support in transforms.py and functional.py

parent 00efbe61
import numpy as np import math
import torch import torch
...@@ -245,15 +245,15 @@ def create_dct(n_mfcc, n_mels, norm): ...@@ -245,15 +245,15 @@ def create_dct(n_mfcc, n_mels, norm):
outdim = n_mfcc outdim = n_mfcc
dim = n_mels dim = n_mels
# http://en.wikipedia.org/wiki/Discrete_cosine_transform#DCT-II # http://en.wikipedia.org/wiki/Discrete_cosine_transform#DCT-II
n = np.arange(dim) n = torch.arange(dim, dtype=torch.float32)
k = np.arange(outdim)[:, np.newaxis] k = torch.arange(outdim, dtype=torch.float32)[:, None]
dct = np.cos(np.pi / dim * (n + 0.5) * k) dct = torch.cos(math.pi / dim * (n + 0.5) * k)
if norm == 'ortho': if norm == 'ortho':
dct[0] *= 1.0 / np.sqrt(2) dct[0] *= 1.0 / math.sqrt(2.0)
dct *= np.sqrt(2.0 / dim) dct *= math.sqrt(2.0 / dim)
else: else:
dct *= 2 dct *= 2
return torch.Tensor(dct.T) return dct.t()
def MFCC(sig, mel_spect, log_mels, s2db, dct_mat): def MFCC(sig, mel_spect, log_mels, s2db, dct_mat):
...@@ -302,7 +302,7 @@ def BLC2CBL(tensor): ...@@ -302,7 +302,7 @@ def BLC2CBL(tensor):
def mu_law_encoding(x, qc): def mu_law_encoding(x, qc):
# type: (Tensor/ndarray, int) -> Tensor/ndarray # type: (Tensor, int) -> Tensor
"""Encode signal based on mu-law companding. For more info see the """Encode signal based on mu-law companding. For more info see the
`Wikipedia Entry <https://en.wikipedia.org/wiki/%CE%9C-law_algorithm>`_ `Wikipedia Entry <https://en.wikipedia.org/wiki/%CE%9C-law_algorithm>`_
...@@ -317,21 +317,17 @@ def mu_law_encoding(x, qc): ...@@ -317,21 +317,17 @@ def mu_law_encoding(x, qc):
Tensor: Input after mu-law companding Tensor: Input after mu-law companding
""" """
mu = qc - 1. mu = qc - 1.
if isinstance(x, np.ndarray): if not x.dtype.is_floating_point:
x_mu = np.sign(x) * np.log1p(mu * np.abs(x)) / np.log1p(mu) x = x.to(torch.float)
x_mu = ((x_mu + 1) / 2 * mu + 0.5).astype(int) mu = torch.tensor(mu, dtype=x.dtype)
elif isinstance(x, torch.Tensor): x_mu = torch.sign(x) * torch.log1p(mu *
if not x.dtype.is_floating_point: torch.abs(x)) / torch.log1p(mu)
x = x.to(torch.float) x_mu = ((x_mu + 1) / 2 * mu + 0.5).long()
mu = torch.tensor(mu, dtype=x.dtype)
x_mu = torch.sign(x) * torch.log1p(mu *
torch.abs(x)) / torch.log1p(mu)
x_mu = ((x_mu + 1) / 2 * mu + 0.5).long()
return x_mu return x_mu
def mu_law_expanding(x_mu, qc): def mu_law_expanding(x_mu, qc):
# type: (Tensor/ndarray, int) -> Tensor/ndarray # type: (Tensor, int) -> Tensor
"""Decode mu-law encoded signal. For more info see the """Decode mu-law encoded signal. For more info see the
`Wikipedia Entry <https://en.wikipedia.org/wiki/%CE%9C-law_algorithm>`_ `Wikipedia Entry <https://en.wikipedia.org/wiki/%CE%9C-law_algorithm>`_
...@@ -346,13 +342,9 @@ def mu_law_expanding(x_mu, qc): ...@@ -346,13 +342,9 @@ def mu_law_expanding(x_mu, qc):
Tensor: Input after decoding Tensor: Input after decoding
""" """
mu = qc - 1. mu = qc - 1.
if isinstance(x_mu, np.ndarray): if not x_mu.dtype.is_floating_point:
x = ((x_mu) / mu) * 2 - 1. x_mu = x_mu.to(torch.float)
x = np.sign(x) * (np.exp(np.abs(x) * np.log1p(mu)) - 1.) / mu mu = torch.tensor(mu, dtype=x_mu.dtype)
elif isinstance(x_mu, torch.Tensor): x = ((x_mu) / mu) * 2 - 1.
if not x_mu.dtype.is_floating_point: x = torch.sign(x) * (torch.exp(torch.abs(x) * torch.log1p(mu)) - 1.) / mu
x_mu = x_mu.to(torch.float)
mu = torch.tensor(mu, dtype=x_mu.dtype)
x = ((x_mu) / mu) * 2 - 1.
x = torch.sign(x) * (torch.exp(torch.abs(x) * torch.log1p(mu)) - 1.) / mu
return x return x
from __future__ import division, print_function from __future__ import division, print_function
from warnings import warn from warnings import warn
import math
import torch import torch
import numpy as np
from . import functional as F from . import functional as F
...@@ -234,7 +234,7 @@ class SpectrogramToDB(object): ...@@ -234,7 +234,7 @@ class SpectrogramToDB(object):
self.multiplier = 10. if stype == "power" else 20. self.multiplier = 10. if stype == "power" else 20.
self.amin = 1e-10 self.amin = 1e-10
self.ref_value = 1. self.ref_value = 1.
self.db_multiplier = np.log10(np.maximum(self.amin, self.ref_value)) self.db_multiplier = math.log10(max(self.amin, self.ref_value))
def __call__(self, spec): def __call__(self, spec):
# numerically stable implementation from librosa # numerically stable implementation from librosa
...@@ -403,10 +403,10 @@ class MuLawEncoding(object): ...@@ -403,10 +403,10 @@ class MuLawEncoding(object):
""" """
Args: Args:
x (FloatTensor/LongTensor or ndarray) x (FloatTensor/LongTensor)
Returns: Returns:
x_mu (LongTensor or ndarray) x_mu (LongTensor)
""" """
return F.mu_law_encoding(x, self.qc) return F.mu_law_encoding(x, self.qc)
...@@ -434,10 +434,10 @@ class MuLawExpanding(object): ...@@ -434,10 +434,10 @@ class MuLawExpanding(object):
""" """
Args: Args:
x_mu (FloatTensor/LongTensor or ndarray) x_mu (FloatTensor/LongTensor)
Returns: Returns:
x (FloatTensor or ndarray) x (FloatTensor)
""" """
return F.mu_law_expanding(x_mu, self.qc) return F.mu_law_expanding(x_mu, self.qc)
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment