Commit fb836296 authored by valentin.emiya's avatar valentin.emiya
Browse files

update CI

parent d2ce9b95
Pipeline #5112 failed with stage
in 2 minutes and 8 seconds
......@@ -6,7 +6,8 @@ tests:
script:
- cd python
- pip3 install --no-deps ltfatpy madarrays yafe skpomade pandas
- pip3 install scipy -U
- pip3 install scipy=1.4.1 -U
- pip3 install matplotlib=3.1.2 -U
- pip3 install --no-deps .
- python3 tffpy/tests/ci_config.py
- pytest-3
......@@ -21,7 +22,8 @@ pages:
script:
- cd python
- pip3 install --no-deps ltfatpy madarrays yafe skpomade pandas
- pip3 install scipy -U
- pip3 install scipy=1.4.1 -U
- pip3 install matplotlib=3.1.2 -U
- pip3 install --no-deps .
- python3 setup.py build_sphinx
- python3 tffpy/tests/ci_config.py
......
......@@ -2,7 +2,7 @@
numpy>=1.13
scipy>=1.4.1
matplotlib
matplotlib>=3.1.2
pandas
xarray
ltfatpy
......
......@@ -13,11 +13,36 @@ from ltfatpy import plotdgtreal, dgtreal, idgtreal
def plot_mask(mask, hop, n_bins, fs):
"""
Plot time-frequency mask
Parameters
----------
mask : nd-array
Time-frequency mask
hop : int
Hop size
n_bins : int
Number of frequency bins
fs : int
Sampling frequency
"""
plotdgtreal(coef=mask.astype(float), a=hop, M=n_bins, fs=fs,
normalization='lin')
def plot_win(win, fs, label=None):
"""
Plot window
Parameters
----------
win : nd-array
Window array
fs : int
Sampling frequency
label : str or None
If not None, label to be assigned to the curve.
"""
x_range = np.fft.fftshift(np.arange(win.size) / fs)
x_range[x_range > x_range[-1]] -= x_range.size / fs
if label is None:
......@@ -30,51 +55,177 @@ def plot_win(win, fs, label=None):
def plot_spectrogram(x, dgt_params, fs, dynrange=100, clim=None):
"""
Plot spectrogram of a signal
Parameters
----------
x : nd-array
Signal
dgt_params : dict
DGT parameters (see `tffpy.tf_tools.get_dgt_params`)
fs : int
Sampling frequency
dynrange : float
Dynamic range to be displayed.
clim : sequence
Min and max values for the colorbar. If both `clim` and `dynrange` are
specified, then clim takes precedence.
"""
tf_mat = dgt(x, dgt_params=dgt_params)
plotdgtreal(coef=tf_mat, a=dgt_params['hop'], M=dgt_params['n_bins'],
fs=fs, dynrange=dynrange, clim=clim)
def db(x):
"""
Linear to decibel (dB) conversion
Parameters
----------
x : scalar or nd-array
Values to be converted
Returns
-------
scalar or nd-array
Conversion of input `x` in dB.
"""
return 20 * np.log10(np.abs(x))
def sdr(x_ref, x_est):
"""
Signal to distortion ratio
Parameters
----------
x_ref : nd-array
Reference signal
x_est : nd-array
Estimation of the reference signal
Returns
-------
float
"""
return snr(x_signal=x_ref, x_noise=x_est - x_ref)
def snr(x_signal, x_noise):
"""
Signal to noise ratio
Parameters
----------
x_signal : nd-array
Signal of interest
x_noise : nd-array
Noise signal
Returns
-------
float
"""
return db(np.linalg.norm(x_signal)) - db(np.linalg.norm(x_noise))
def is_div_spectrum(x_ref, x_est):
"""
Itakura-Saito divergence computed via discrete Fourier transform
Parameters
----------
x_ref : nd-array
Reference signal
x_est : nd-array
Estimation of the reference signal
Returns
-------
float
"""
return is_div(x_ref=np.abs(np.fft.fft(x_ref)),
x_est=np.abs(np.fft.fft(x_est)))
def is_div(x_ref, x_est):
"""
Itakura-Saito divergence
Parameters
----------
x_ref : nd-array
Reference array
x_est : nd-array
Estimation of the reference array
Returns
-------
float
"""
x_ratio = x_ref / x_est
return np.sum(x_ratio - np.log(x_ratio)) - np.size(x_ratio)
def dgt(sig, dgt_params):
"""
Discrete Gabor transform of a signal
Parameters
----------
sig : nd-array
Input signal
dgt_params : dict
DGT parameters (see `tffpy.tf_tools.get_dgt_params`)
Returns
-------
nd-array
DGT coefficients
"""
return dgtreal(f=sig, g=dgt_params['win'], a=dgt_params['hop'],
M=dgt_params['n_bins'], L=sig.shape[0],
pt=dgt_params['phase_conv'])[0]
def idgt(tf_mat, dgt_params, sig_len):
"""
Inverse discrete Gabor transform
Parameters
----------
tf_mat : nd-array
DGT coefficients
dgt_params : dict
DGT parameters (see `tffpy.tf_tools.get_dgt_params`)
sig_len : int
Signal length
Returns
-------
nd-array
Reconstructed signal
"""
return idgtreal(coef=tf_mat, g=dgt_params['win'], a=dgt_params['hop'],
M=dgt_params['n_bins'], Ls=sig_len,
pt=dgt_params['phase_conv'])[0]
def get_config_file():
"""
User configuration file
Returns
-------
Path
"""
return Path(os.path.expanduser('~')) / '.config' / 'tffpy.conf'
def generate_config():
"""Generate an empty configuration file.
"""
Generate an empty configuration file.
"""
config = ConfigParser(allow_no_value=True)
......@@ -90,6 +241,13 @@ def generate_config():
def get_data_path():
"""
Read data folder from user configuration file.
Returns
-------
Path
"""
config_file = get_config_file()
if not config_file.exists():
raise Exception('Configuration file does not exists. To create it, '
......
Supports Markdown
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