Spaces:
Build error
Build error
| # Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved | |
| import math | |
| import torch | |
| from torch import nn | |
| from torch.nn import functional as F | |
| def kaiser_attenuation(n_taps, f_h, sr): | |
| df = (2 * f_h) / (sr / 2) | |
| return 2.285 * (n_taps - 1) * math.pi * df + 7.95 | |
| def kaiser_beta(n_taps, f_h, sr): | |
| atten = kaiser_attenuation(n_taps, f_h, sr) | |
| if atten > 50: | |
| return 0.1102 * (atten - 8.7) | |
| elif 50 >= atten >= 21: | |
| return 0.5842 * (atten - 21) ** 0.4 + 0.07886 * (atten - 21) | |
| else: | |
| return 0.0 | |
| def sinc(x, eps=1e-10): | |
| y = torch.sin(math.pi * x) / (math.pi * x + eps) | |
| y = y.masked_fill(x.eq(0), 1.0) | |
| return y | |
| def kaiser_window(n_taps, f_h, sr): | |
| beta = kaiser_beta(n_taps, f_h, sr) | |
| ind = torch.arange(n_taps) - (n_taps - 1) / 2 | |
| return torch.i0(beta * torch.sqrt(1 - ((2 * ind) / (n_taps - 1)) ** 2)) / torch.i0( | |
| torch.tensor(beta) | |
| ) | |
| def lowpass_filter(n_taps, cutoff, band_half, sr): | |
| window = kaiser_window(n_taps, band_half, sr) | |
| ind = torch.arange(n_taps) - (n_taps - 1) / 2 | |
| lowpass = 2 * cutoff / sr * sinc(2 * cutoff / sr * ind) * window | |
| return lowpass | |
| def filter_parameters( | |
| n_layer, | |
| n_critical, | |
| sr_max, | |
| cutoff_0, | |
| cutoff_n, | |
| stopband_0, | |
| stopband_n | |
| ): | |
| cutoffs = [] | |
| stopbands = [] | |
| srs = [] | |
| band_halfs = [] | |
| for i in range(n_layer): | |
| f_c = cutoff_0 * (cutoff_n / cutoff_0) ** min(i / (n_layer - n_critical), 1) | |
| f_t = stopband_0 * (stopband_n / stopband_0) ** min( | |
| i / (n_layer - n_critical), 1 | |
| ) | |
| s_i = 2 ** math.ceil(math.log(min(2 * f_t, sr_max), 2)) | |
| f_h = max(f_t, s_i / 2) - f_c | |
| cutoffs.append(f_c) | |
| stopbands.append(f_t) | |
| srs.append(s_i) | |
| band_halfs.append(f_h) | |
| return { | |
| "cutoffs": cutoffs, | |
| "stopbands": stopbands, | |
| "srs": srs, | |
| "band_halfs": band_halfs, | |
| } | |