基于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如何使用bouncycastle从pkcs7文件获取证书?   java是向字符串数字添加零的有效方法吗?   Android在外部播放器中播放视频url   如何在Java代码中调用Wildfly事务管理器?   java为什么在使用键盘完成选择时不触发选择事件?   java xpath错误:jaxb外部绑定文件上为null   java如何避免在活动之间切换时出现白屏   Hadoop安装程序中的java“unknown.prolexic.com:未知错误”   要用作out参数的java自定义数字类   java如何向spring控制器的http请求添加属性?   for循环中的java静态值   java为图像编辑器快速、可靠地保存/加载文档状态   java数组越界和空指针异常   java如何在列表<Object>对象包含对象的对象上检查null?   java从URL下载文件到tomcat服务器   GlassFish“ogs3.1.2.2windows.exe”和“ogs3.1.2.2windowsml.exe”文件之间的java差异   无MathLab的Java Gabor图像处理   包含CSV中不存在的其他字段的java mongoimport