最近學習語音情感識別,需要提取語音特徵,用到python_speech_features這個庫,順便把文檔翻譯一下,希望能幫到需要的人。英語水平不高,難免有錯,敬請指正
歡迎來到python_speech_features的文檔!
這個庫提供了一般的用於ASR(語音識別)的語音特徵,他包含了MFCCs(梅爾倒譜系數)和 filterbank energies(濾波器組能量?)。如果你還不知道什麼是MFCCs,並且想要更多的瞭解MFCC,這裏有一個教程:http://www.practicalcryptography.com/miscellaneous/machine-learning/guide-mel-frequency-cepstral-coefficients-mfccs/
你需要numpy和scipy來運行這個庫,這個項目的代碼保存在https://github.com/jameslyons/python_speech_features
支持的特徵:
python_speech_features.mfcc()
- 梅爾倒譜系數python_speech_features.fbank()
- 濾波器組能量(?)python_speech_features.logfbank()
- 對數濾波器組能量python_speech_features.ssc()
- 子帶頻譜質心特徵
使用MFCC特徵:
from python_speech_features import mfcc
from python_speech_features import logfbank
import scipy.io.wavfile as wav
(rate,sig) = wav.read("file.wav")
mfcc_feat = mfcc(sig,rate)
fbank_feat = logfbank(sig,rate)
print(fbank_feat[1:3,:])
從這裏你可以把特徵寫入一個文件
python_speech_features模塊提供的函數
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>>)
計算一個音頻信號的MFCC特徵
參數:
- signal - 需要用來計算特徵的音頻信號,應該是一個N*1的數組
- samplerate - 我們用來工作的信號的採樣率
- winlen - 分析窗口的長度,按秒計,默認0.025s(25ms)
- winstep - 連續窗口之間的步長,按秒計,默認0.01s(10ms)
- numcep - 倒頻譜返回的數量,默認13
- nfilt - 濾波器組的濾波器數量,默認26
- nfft - FFT的大小,默認512
- lowfreq - 梅爾濾波器的最低邊緣,單位赫茲,默認爲0
- highfreq - 梅爾濾波器的最高邊緣,單位赫茲,默認爲採樣率/2
- preemph - 應用預加重過濾器和預加重過濾器的係數,0表示沒有過濾器,默認0.97
- ceplifter - 將升降器應用於最終的倒譜系數。 0沒有升降機。默認值爲22。
- appendEnergy - 如果是true,則將第0個倒譜系數替換爲總幀能量的對數。
- winfunc - 分析窗口應用於每個框架。 默認情況下不應用任何窗口。 你可以在這裏使用numpy窗口函數 例如:winfunc=numpy.hamming
返回: 一個大小爲numcep的numpy數組,包含着特徵,每一行都包含一個特徵向量。
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>>)
從一個音頻信號中計算梅爾濾波器能量特徵
參數:
- signal - 需要用來計算特徵的音頻信號,應該是一個N*1的數組
- samplerate - 我們用來工作的信號的採樣率
- winlen - 分析窗口的長度,按秒計,默認0.025s(25ms)
- winstep - 連續窗口之間的步長,按秒計,默認0.01s(10ms)
- nfilt - 濾波器組的濾波器數量,默認26
- nfft - FFT的大小,默認512
- lowfreq - 梅爾濾波器的最低邊緣,單位赫茲,默認爲0
- highfreq - 梅爾濾波器的最高邊緣,單位赫茲,默認爲採樣率/2
- preemph - 應用預加重過濾器和預加重過濾器的係數,0表示沒有過濾器,默認0.97
- winfunc - 分析窗口應用於每個框架。 默認情況下不應用任何窗口。 你可以在這裏使用numpy窗口函數 例如:winfunc=numpy.hamming
返回:2個值。第一個是一個包含着特徵的大小爲nfilt的numpy數組,每一行都有一個特徵向量。第二個返回值是每一幀的能量
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)
從一個音頻信號中計算梅爾濾波器能量特徵的對數
參數:
- signal - 需要用來計算特徵的音頻信號,應該是一個N*1的數組
- samplerate - 我們用來工作的信號的採樣率
- winlen - 分析窗口的長度,按秒計,默認0.025s(25ms)
- winstep - 連續窗口之間的步長,按秒計,默認0.01s(10ms)
- nfilt - 濾波器組的濾波器數量,默認26
- nfft - FFT的大小,默認512
- lowfreq - 梅爾濾波器的最低邊緣,單位赫茲,默認爲0
- highfreq - 梅爾濾波器的最高邊緣,單位赫茲,默認爲採樣率/2
- preemph - 應用預加重過濾器和預加重過濾器的係數,0表示沒有過濾器,默認0.97
返回: 一個包含特徵的大小爲nfilt的numpy數組,每一行都有一個特徵向量
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>>)
從一個音頻信號中計算子帶頻譜質心特徵
參數:
- signal - 需要用來計算特徵的音頻信號,應該是一個N*1的數組
- samplerate - 我們用來工作的信號的採樣率
- winlen - 分析窗口的長度,按秒計,默認0.025s(25ms)
- winstep - 連續窗口之間的步長,按秒計,默認0.01s(10ms)
- nfilt - 濾波器組的濾波器數量,默認26
- nfft - FFT的大小,默認512
- lowfreq - 梅爾濾波器的最低邊緣,單位赫茲,默認爲0
- highfreq - 梅爾濾波器的最高邊緣,單位赫茲,默認爲採樣率/2
- preemph - 應用預加重過濾器和預加重過濾器的係數,0表示沒有過濾器,默認0.97
- winfunc - 分析窗口應用於每個框架。 默認情況下不應用任何窗口。 你可以在這裏使用numpy窗口函數 例如:winfunc=numpy.hamming
返回:一個包含特徵的大小爲nfilt的numpy數組,每一行都有一個特徵向量
python_speech_features.base.
hz2mel
(hz)
把一個赫茲值轉換爲梅爾值
參數: hz - 一個單位爲Hz的值,他也可以是一個numpy數組,轉換按元素進行
返回: 一個單位爲Mels的值,如果輸入時矩陣,那麼返回的也是對應大小的矩陣
python_speech_features.base.
mel2hz
(mel)
把一個梅爾值轉化爲赫茲
參數: mel - 一個單位爲Mels的值,他也可以是一個numpy數組,轉換按元素進行
返回: 一個單位爲Herz的值,如果輸入時矩陣,那麼返回的也是對應大小的矩陣
python_speech_features.base.
get_filterbanks
(nfilt=20, nfft=512, samplerate=16000, lowfreq=0, highfreq=None)
計算一個梅爾濾波器組。過濾器存儲在行中,列對應於FFT箱。過濾器以大小爲nfilt *(nfft/2+1)的數組返回。
參數:
- nfilt - 濾波器組的濾波器數量,默認20
- nfft - FFT的大小,默認512
- samplerate - 我們用來工作的信號的採樣率
- lowfreq - 梅爾濾波器的最低邊緣,單位赫茲,默認爲0
- highfreq - 梅爾濾波器的最高邊緣,單位赫茲,默認爲採樣率/2
返回: 一個包含有濾波器的大小爲nfilt *(nfft/2+1)的數組,每一行都有一個過濾器。
python_speech_features.base.
lifter
(cepstra, L=22)
將倒譜提升器應用於倒頻譜的矩陣。這具有增加高頻DCT係數的幅度的效果。
參數:
- cepstra -- 梅爾倒譜矩陣,大小爲numframes*numcep
- L - 提升器的係數,默認22,L<=0禁用
python_speech_features.base.
delta
(feat, N)
從特徵向量序列計算delta特徵。
參數:
- feat - 一個大小爲特徵數量的numpy數組,每一行都有一個特徵向量
- N - 對於每一幀,計算delta特徵根據前後N幀
返回:一個大小爲特徵數量的numpy數組,包含有delta特徵,每一行都有一個delta向量
sigproc模塊提供的函數
python_speech_features.sigproc.
framesig
(sig, frame_len, frame_step, winfunc=<function <lambda>>, stride_trick=True)
將信號框成重疊幀。
參數:
- sig - 音頻信號幀
- frame_len - 樣品中每一幀的長度
- frame_step - 下一幀開始後前一幀開始後的樣本數。
- winfunc - 分析窗口應用於每個框架。 默認情況下不應用任何窗口。
- stride_trick - 使用步長技巧快速計算滾動窗口和窗口倍增
返回:一個幀的數組,大小是frame_len
python_speech_features.sigproc.
deframesig
(frames, siglen, frame_len, frame_step, winfunc=<function <lambda>>)
使用重疊添加過程撤消了frameig操作。
參數:
- frames - frames的數組
- siglen - 所需信號的長度,如果未知,則使用0。輸出將被截斷到siglen樣本。
- frame_len - 樣品中每一幀的長度
- frame_step - 下一幀開始後前一幀開始後的樣本數。
- winfunc - 分析窗口應用於每個框架。 默認情況下不應用任何窗口。
返回: 一個1維信號
python_speech_features.sigproc.
magspec
(frames, NFFT)
計算幀中每個幀的幅度譜。如果幀是NxD矩陣,輸出將是Nx(NFFT/2+1)。
參數:
- frames - frames的數組,每一行就是一幀
- NFFT - 使用的FFT長度。如果NFFT>幀長度,幀就是零填充的。
返回:如果幀是N*D矩陣,輸出將是N*(nfft/2+1)。每一行都是相應幀的幅度譜。
python_speech_features.sigproc.
powspec
(frames, NFFT)
計算幀中每個幀的功率譜。如果幀是NXD矩陣,輸出將是NX(NFFT/2+1)。
參數:
- frames - frames的數組,每一行就是一幀
- NFFT - 使用的FFT長度。如果NFFT>幀長度,幀就是零填充的。
返回:如果幀是N*D矩陣,輸出將是N*(nfft/2+1)。每一行都是相應幀的功率譜。
python_speech_features.sigproc.
logpowspec
(frames, NFFT, norm=1)
計算幀中每個幀的對數功率譜。如果幀是NXD矩陣,輸出將是NX(NFFT/2+1)。
參數:
- frames - frames的數組,每一行就是一幀
- NFFT - 使用的FFT長度。如果NFFT>幀長度,幀就是零填充的。
- norm - 如果範數=1,則對數功率譜被歸一化,使得最大值(跨越所有幀)爲0。
返回:如果幀是N*D矩陣,輸出將是N*(nfft/2+1)。每一行都是相應幀的對數功率譜。
python_speech_features.sigproc.
preemphasis
(signal, coeff=0.95)
對輸入信號進行預加重。
參數:
- signal - 過濾器的信號
- coeff - 預加重係數,0爲無,默認0.95
返回:濾波後的信號