基于Torch的librosa STFT/FBANK/MFCC实现
torch-mfcc的Python项目详细描述
Pythorch的Librosa STFT/Fbank/MFCC
作者:张世民
一个librosa STFT/Fbank/mfcc特征提取,使用1D卷积在PyTorch中编写。在
安装
使用pip:pip install torch_mfcc
轻松安装或下载此repo,python setup.py install
。在
使用
如果您想要与kaldi相同的时间步长,请确保:
- 窗口长度、窗口跳长和fft长度相同。在
- 设置enframed_mode(str)=“break”,默认为“continue”。在
- 设置中心(bool)=假。默认为True。在
importtorchasthimporttorch.nn.functionalastfimportscipyfromtorch_mfccimportSTFT,FBANK,MFCCimportnumpyasnpimportlibrosadefCalMfcc(signal,sr,fft_len,win_hop,win_len,n_mfcc=13,center=True,dct_type=2,norm='ortho'):spec_amp,n_fft=librosa.spectrum._spectrogram(signal,n_fft=fft_len,hop_length=win_hop,win_length=win_len,center=center,power=2.0,window='hann')mel_basis=librosa.filters.mel(sr,n_fft)S=np.dot(mel_basis,spec_amp)fbank=librosa.core.power_to_db(S,top_db=None)mfcc_spec=scipy.fftpack.dct(fbank,axis=0,type=dct_type,norm=norm)[:n_mfcc]returnspec_amp,fbank,mfcc_specsig=librosa.load(librosa.util.example_audio_file(),duration=10.0,offset=30)[0]device='cpu'sig_th=th.from_numpy(sig)[None,:].float().to(device)fft_len=1024win_hop=256win_len=1024window='hann'n_mel=128n_mfcc=13dct_type=4norm='ortho'center=Falsesr=22050spec_amp,fbank_spec,mfcc_spec=CalMfcc(signal=sig,sr=sr,fft_len=fft_len,win_hop=win_hop,win_len=win_len,n_mfcc=n_mfcc,center=center,dct_type=dct_type,norm=norm)# librosa STFT VS conv_stft# see more test at :https://github.com/echocatzh/conv-stft/blob/master/tests/test_stft.pystft=STFT(win_len=win_len,win_hop=win_hop,fft_len=fft_len,pad_center=center,win_type=window).to(device)real,imag=stft.transform(sig_th,return_type='realimag')spectrum_th=th.square(real)+th.square(imag)print(tf.mse_loss(th.FloatTensor(spec_amp).to(device),spectrum_th.squeeze(0)))# 8.4275e-10# librosa fbank VS torch_fbankfbank=FBANK(win_len,win_hop,fft_len,sr,win_type=window,top_db=None,center=center,n_mel=n_mel).to(device)fbank_spec_th=fbank(sig_th)print(tf.mse_loss(th.FloatTensor(fbank_spec).to(device),fbank_spec_th.transpose(1,2).squeeze(0)))# 1.4462e-09# librosa mfcc VS torch_mfccmfcc=MFCC(win_len,win_hop,fft_len,sr,win_type=window,top_db=None,dct_type=dct_type,norm=norm,center=center,n_mfcc=n_mfcc,n_mel=n_mel).to(device)mfcc_spec_th=mfcc(sig_th)print(tf.mse_loss(th.FloatTensor(mfcc_spec).to(device),mfcc_spec_th.transpose(1,2).squeeze(0)))# 7.2581e-10
联系人
如果您有任何问题,欢迎致电shmzhang@npu-aslp.org与我联系
- 项目
标签: