| 6 | |
| 7 | |
| 8 | def init_kernels(win_len, win_inc, fft_len, win_type=None, invers=False): |
| 9 | if win_type == 'None' or win_type is None: |
| 10 | window = np.ones(win_len) |
| 11 | else: |
| 12 | window = get_window(win_type, win_len, fftbins=True)#**0.5 |
| 13 | |
| 14 | N = fft_len |
| 15 | fourier_basis = np.fft.rfft(np.eye(N))[:win_len] |
| 16 | real_kernel = np.real(fourier_basis) |
| 17 | imag_kernel = np.imag(fourier_basis) |
| 18 | kernel = np.concatenate([real_kernel, imag_kernel], 1).T |
| 19 | |
| 20 | if invers : |
| 21 | kernel = np.linalg.pinv(kernel).T |
| 22 | |
| 23 | kernel = kernel*window |
| 24 | kernel = kernel[:, None, :] |
| 25 | return torch.from_numpy(kernel.astype(np.float32)), torch.from_numpy(window[None,:,None].astype(np.float32)) |
| 26 | |
| 27 | |
| 28 | class ConvSTFT(nn.Module): |