librosa能量_librosa与python_speech_features
在語(yǔ)音識(shí)別領(lǐng)域,比較常用的兩個(gè)模塊就是librosa和python_speech_features了。
最近也是在做音樂方向的項(xiàng)目,借此做一下筆記,并記錄一些兩者的差別。下面是兩模塊的官方文檔
LibROSA - librosa 0.6.3 documentation?librosa.github.ioWelcome to python_speech_features’s documentation!?python-speech-features.readthedocs.io直接對(duì)比兩文檔就可以看出librosa功能十分強(qiáng)大,涉及到了音頻的特征提取、譜圖分解、譜圖顯示、順序建模、創(chuàng)建音頻等功能,而python_speech_features只涉及了音頻特征提取。就特征提取的實(shí)現(xiàn)方法和種類來看,兩者也有所不同。
python_speech_features的特征
支持的特征:
- python_speech_features.mfcc() - 梅爾倒譜系數(shù)
- python_speech_features.fbank() - 濾波器組能量
- python_speech_features.logfbank() - 對(duì)數(shù)濾波器組能量
- python_speech_features.ssc() - 子帶頻譜質(zhì)心特征
提取mfcc、logfbank特征的方法
from python_speech_features import mfcc from python_speech_features import logfbank import scipy.io.wavfile as wav(rate,sig) = wav.read("file.wav") # 返回信號(hào)的采樣率以及信號(hào)數(shù)組ndarray mfcc_feat = mfcc(sig,rate) # 返回一個(gè)二維ndarray數(shù)組 fbank_feat = logfbank(sig,rate) # 返回一個(gè)二維ndarray數(shù)組print(fbank_feat[1:3,:])python_speech_features的比較好用的地方就是自帶預(yù)加重參數(shù),只需要設(shè)定preemph的值,就可以對(duì)語(yǔ)音信號(hào)進(jìn)行預(yù)加重,增強(qiáng)高頻信號(hào)。
python_speech_features模塊提供的函數(shù)
python_speech_features.base.mfcc(signal, samplerate=16000, winlen=0.025, winstep=0.01, numcep=13, nfilt=26, nfft=512, lowfreq=0, highfreq=None, preemph=0.97, ceplifter=22, appendEnergy=True, winfunc=<function <lambda>>)
計(jì)算一個(gè)音頻信號(hào)的MFCC特征
返回: 一個(gè)大小為numcep的numpy數(shù)組,包含著特征,每一行都包含一個(gè)特征向量。
參數(shù):
signal - 需要用來計(jì)算特征的音頻信號(hào),應(yīng)該是一個(gè)N*1的數(shù)組
samplerate - 我們用來工作的信號(hào)的采樣率
winlen - 分析窗口的長(zhǎng)度,按秒計(jì),默認(rèn)0.025s(25ms)
winstep - 連續(xù)窗口之間的步長(zhǎng),按秒計(jì),默認(rèn)0.01s(10ms)
numcep - 倒頻譜返回的數(shù)量,默認(rèn)13
nfilt - 濾波器組的濾波器數(shù)量,默認(rèn)26
nfft - FFT的大小,默認(rèn)512
lowfreq - 梅爾濾波器的最低邊緣,單位赫茲,默認(rèn)為0
highfreq - 梅爾濾波器的最高邊緣,單位赫茲,默認(rèn)為采樣率/2
preemph - 應(yīng)用預(yù)加重過濾器和預(yù)加重過濾器的系數(shù),0表示沒有過濾器,默認(rèn)0.97
ceplifter - 將升降器應(yīng)用于最終的倒譜系數(shù)。 0沒有升降機(jī)。默認(rèn)值為22。
appendEnergy - 如果是true,則將第0個(gè)倒譜系數(shù)替換為總幀能量的對(duì)數(shù)。
winfunc - 分析窗口應(yīng)用于每個(gè)框架。 默認(rèn)情況下不應(yīng)用任何窗口。 你可以在這里使用numpy窗口函數(shù) 例如:winfunc=numpy.hamming
python_speech_features.base.fbank(signal, samplerate=16000, winlen=0.025, winstep=0.01, nfilt=26, nfft=512, lowfreq=0, highfreq=None, preemph=0.97, winfunc=<function <lambda>>)
從一個(gè)音頻信號(hào)中計(jì)算梅爾濾波器能量特征
返回:2個(gè)值。第一個(gè)是一個(gè)包含著特征的大小為nfilt的numpy數(shù)組,每一行都有一個(gè)特征向量。第二個(gè)返回值是每一幀的能量
python_speech_features.base.logfbank(signal, samplerate=16000, winlen=0.025, winstep=0.01, nfilt=26, nfft=512, lowfreq=0, highfreq=None, preemph=0.97)
從一個(gè)音頻信號(hào)中計(jì)算梅爾濾波器能量特征的對(duì)數(shù)
返回: 一個(gè)包含特征的大小為nfilt的numpy數(shù)組,每一行都有一個(gè)特征向量
python_speech_features.base.ssc(signal, samplerate=16000, winlen=0.025, winstep=0.01, nfilt=26, nfft=512, lowfreq=0, highfreq=None, preemph=0.97, winfunc=<function <lambda>>)
從一個(gè)音頻信號(hào)中計(jì)算子帶頻譜質(zhì)心特征
返回:一個(gè)包含特征的大小為nfilt的numpy數(shù)組,每一行都有一個(gè)特征向量
librosa的特征提取
librosa的可以提取的特征種類十分豐富
篇幅原因不多介紹
librosa.features.mfcc(y=None,sr=22050,S=None,n_mfcc=20,dct_type=2,norm='ortho',**kwargs)
y, sr = librosa.load('test.wav',offset=30, duration=5) librosa.feature.mfcc(y=y, sr=sr, n_mfcc=40) # 返回shape=(n_mfcc, timestep)的二維矩陣librosa.feature.spectral_centroid(y=None,sr=22050,S=None,n_fft=2048,hop_length=512,freq=None)
計(jì)算頻譜質(zhì)心
藍(lán)調(diào)音樂的頻譜質(zhì)心在頻譜偏中心的位置,金屬音樂在靠后的位置
librosa.feature.zero_crossing_rate(y,frame_length=2048,hop_length=512,center=True,**kwargs)
計(jì)算過零率
>>> y, sr = librosa.load('test.wav') >>> librosa.feature.zero_crossing_rate(y) array([[ 0.134, 0.139, ..., 0.387, 0.322]])相對(duì)于python_speech_features來說,librosa沒有預(yù)加重的處理。或者說librosa提供自定義預(yù)加重功能。
預(yù)加重的一般傳遞函數(shù)為
差分方程實(shí)現(xiàn)預(yù)加重的方程為
總結(jié)
以上是生活随笔為你收集整理的librosa能量_librosa与python_speech_features的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 实验7 寻址方式在结构化数据访问总的应用
- 下一篇: dataframe类型数据的遍历_Pyt