基于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与我联系

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Android:应用程序崩溃发送putExtra的意图   JNI错误:尝试传递java实例。字符串作为参数   JavaJMockit与静态初始化   java@products@消费意义。。。JSON或者它只是一个字符串   java如何解决在命令提示符中找不到或加载主类错误?   java使用JavaMail API发送带有内联图像的电子邮件   java为什么我不能与Twitter共享内容   jspservlet正在显示java。木卫一。FileNotFoundException:?E:\guru99\test。txt(文件名、目录名或卷标语法不正确)   java如何在单击另一页上的按钮时向表视图添加数据?   java在提交表单数据之后,它显示了以下问题   java Spring启动通知/严重错误后重启   java从数组列表中删除元素   java Spring引导批处理:如何使用CompositeWriter和自定义ItemWriter实现多线程步骤   Spring java代码表单post和重定向到其他服务器