pytorch求STFT


最近在看一个开源代码,发现求信号的STFT的时候,使用的是torchaudio_contrib.audio_nn.STFT函数,而有些人用pytorch自带的stft函数,即调用torch.stft,而在librosa里也有stft函数,这几种函数输出结果相同吗?和MATLAB的XXXX函数相比较有什么差别?为什么不先在librosa里做完stft再讲结果转为tensor?

为什么要用pytorch上实现STFT和ISTFT?

  神经网络需要用GPU加速实现,那么网络和数据的运算都需要能在GPU实现,如果函数计算在CPU中,那么必然涉及数据在CPU和GPU上来回搬动,耗时耗力,所以torch自带了stft和istft.

pytorch官方自带的stft和istft

import os
import torch

wav_data1 = torch.tensor(np.arange(0, 100, 0.1))
a1 = torch.stft(wav_data1, n_fft=512, hop_length=100, win_length = 200)
aa1 = torch.istft(a1, n_fft=512, hop_length=100, win_length = 200)
rea = a1[:, :, 0]#实部
imag = a1[:, :, 1]#虚部
mag = torch.abs(torch.sqrt(torch.pow(rea, 2) + torch.pow(imag, 2)))
pha = torch.atan2(imag.data, rea.data)

对比,wav_data1和aa1相同。

torchaudio

也是调用了torch自带的stft和istft.

参考来源

如何使用支持GPU的STFT和iSTFT

Guess you like

Origin blog.csdn.net/u011913417/article/details/109119478