A Conv-STFT/iSTFT implement based on Torch
Project description
Conv-STFT/iSTFT in PyTorch
Author: Shimin Zhang
The code refers to the following repo:
An STFT/iSTFT written up in PyTorch(py3) using 1D Convolutions. There are two window logic, break
and continue
.
break
- a kaldi-like framing method
When the parameters win_len
and fft_len
are different, padding fft_len
-win_len
zero points after each frame( len(frame) = win_len
), and the window ( len(window) = win_len
) always wise-multiply with frame before padding.
continue
- a librosa-like framing method.
When the parameters win_len
and fft_len
are different, framing the signal using win_len
=fft_len
, and zero padding on both sides of window ( len(window) = win_len
), which is len(center_pad(window))=fft_len
Installation
Install easily with pip:pip install conv_stft
or download this repo, python setup.py install
.
Usage
import torch
from conv_stft import STFT
import numpy as np
import librosa
import matplotlib.pyplot as plt
audio = librosa.load(librosa.util.example_audio_file(), duration=10.0, offset=30)[0]
device = 'cpu'
fft_len = 1024
win_hop = 256
win_len = 1024
window = 'hann'
audio = torch.FloatTensor(audio)
audio = audio.unsqueeze(0)
audio = audio.to(device)
stft = STFT(
fft_len=fft_len,
win_hop=win_hop,
win_len=win_len,
win_type=window,
).to(device)
magnitude, phase = stft.transform(audio, return_type='magphase') # 'magphase' or 'realimag'
output = stft.inverse(magnitude, phase, input_type='magphase') # 'magphase' or 'realimag'
output = output.cpu().data.numpy()[..., :]
audio = audio.cpu().data.numpy()[..., :]
print(np.mean((output - audio) ** 2)) # on order of 1e-15
Output of compare_stft.py
:
Tests
Test it by just cloning this repo and running
pip install -r requirements.txt
python -m pytest .
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distribution
File details
Details for the file conv_stft-0.2.0-py3.6.egg
.
File metadata
- Download URL: conv_stft-0.2.0-py3.6.egg
- Upload date:
- Size: 8.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.1 importlib_metadata/4.5.0 pkginfo/1.7.0 requests/2.23.0 requests-toolbelt/0.9.1 tqdm/4.46.1 CPython/3.6.10
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | f5599f703149581d4b169025f5a9db9b2501d741ac3d75a0068181a24e242865 |
|
MD5 | 303d0c72db4fb0f31b60bc051677dea1 |
|
BLAKE2b-256 | 8a674cf0e02ac64c5916ecc10a6d2f8f00ac622cfac392a6522624e92e90a7d1 |