1. 程式人生 > >音訊特徵提取及差異

音訊特徵提取及差異

MFCC特徵提取步驟:
預加重->STFT->mel濾波->DCT變換->倒譜提升
不同工具提取的特徵會有差別,這裡選用python中的librosa庫分析
預加重:
FIR一階高通濾波器,提升高頻分量,傳遞函式為


H(z)=1az1

係數a一般取接近1的數如0.97,對應的時域差分方程為


y(n)=x(n)ax(n1)

matlab畫出濾波器的響應曲線如下

freqz([1,-0.97],1)

這裡寫圖片描述

STFT:
語音訊號具有短時平穩性,因此分析時一般通過分幀加窗做短時傅立葉變換

mel濾波:
mel定義了一組從線性頻率到mel頻率的對映,對應關係為:


m=2595log10(1+f700)=1127loge(1+f700)

如在librosa庫中寫法為

2595.0 * np.log10(1.0 + frequencies / 700.0)

mel濾波器是一組分佈在mel刻度上的三角窗濾波器,matlab的voicebox中有可以直接得到mel濾波器的函式,寫法如下:

fs = 8000;
bank=melbankm(20,512,fs,300/fs,3700/fs,'w');
bank=full(bank);
bank=bank/max(bank(:));
figure,plot(bank(10,:))
figure,plot(bank')

以上程式得到一個20257的濾波器組,每一行代表一個頻域的三角濾波器,作圖plot(bank(10,:))如下


這裡寫圖片描述

畫出所有三角濾波器figure,plot(bank’)如下


這裡寫圖片描述

DCT變換:
一般使用的是type-Ⅲ型DCT,DCT變換公式如下


F(u)=C(u)x=0N1f(x)cos((2x+1)uπ2N)

矩陣形式為


F=Gf

其中G就是我們需要計算的DCT係數。
這裡也說一下各個資料的大小,如我們希望最終每幀資料(幀長400、fft長度512)希望得到13個mfcc係數,而mel濾波器組個數為20,
則各個資料大小如下:

x:400268
xfft:512268
melcoeff:20257
DCT:1320
最終得到的就是268幀每幀13個總共13*268個mfcc係數了

需要注意的是,在DCT係數計算中,有的地方直接取C(u)=2N,而有的地方在u>0時不變,在u=0時取C(u)=1N ,即如下


這裡寫圖片描述

關於這裡的區別可以檢視維基百科關於DCT的介紹:DCT
跟蹤librosa的程式碼可以啊看到librosa是使用第二種方式

    basis = np.empty((n_filters, n_input))
    basis[0, :] = 1.0 / np.sqrt(n_input)

    samples = np.arange(1, 2*n_input, 2) * np.pi / (2.0 * n_input)

    for i in range(1, n_filters):
        basis[i, :] = np.cos(i*samples) * np.sqrt(2.0/n_input)

librosa中提取mfcc很簡單,讀取音訊檔案後一行程式碼就可以完成,以下是mfcc函式內部

# -- Mel spectrogram and MFCCs -- #
def mfcc(y=None, sr=22050, S=None, n_mfcc=20, **kwargs):
    """Mel-frequency cepstral coefficients

    Parameters
    ----------
    y     : np.ndarray [shape=(n,)] or None
        audio time series

    sr    : number > 0 [scalar]
        sampling rate of `y`

    S     : np.ndarray [shape=(d, t)] or None
        log-power Mel spectrogram

    n_mfcc: int > 0 [scalar]
        number of MFCCs to return

    kwargs : additional keyword arguments
        Arguments to `melspectrogram`, if operating
        on time series input

    Returns
    -------
    M     : np.ndarray [shape=(n_mfcc, t)]
        MFCC sequence

    See Also
    --------
    melspectrogram

    Examples
    --------
    Generate mfccs from a time series

    >>> y, sr = librosa.load(librosa.util.example_audio_file())
    >>> librosa.feature.mfcc(y=y, sr=sr)
    array([[ -5.229e+02,  -4.944e+02, ...,  -5.229e+02,  -5.229e+02],
           [  7.105e-15,   3.787e+01, ...,  -7.105e-15,  -7.105e-15],
           ...,
           [  1.066e-14,  -7.500e+00, ...,   1.421e-14,   1.421e-14],
           [  3.109e-14,  -5.058e+00, ...,   2.931e-14,   2.931e-14]])

    Use a pre-computed log-power Mel spectrogram

    >>> S = librosa.feature.melspectrogram(y=y, sr=sr, n_mels=128,
    ...                                    fmax=8000)
    >>> librosa.feature.mfcc(S=librosa.power_to_db(S))
    array([[ -5.207e+02,  -4.898e+02, ...,  -5.207e+02,  -5.207e+02],
           [ -2.576e-14,   4.054e+01, ...,  -3.997e-14,  -3.997e-14],
           ...,
           [  7.105e-15,  -3.534e+00, ...,   0.000e+00,   0.000e+00],
           [  3.020e-14,  -2.613e+00, ...,   3.553e-14,   3.553e-14]])

    Get more components

    >>> mfccs = librosa.feature.mfcc(y=y, sr=sr, n_mfcc=40)

    Visualize the MFCC series

    >>> import matplotlib.pyplot as plt
    >>> plt.figure(figsize=(10, 4))
    >>> librosa.display.specshow(mfccs, x_axis='time')
    >>> plt.colorbar()
    >>> plt.title('MFCC')
    >>> plt.tight_layout()


    """

    if S is None:
        S = power_to_db(melspectrogram(y=y, sr=sr, **kwargs))

    return np.dot(filters.dct(n_mfcc, S.shape[0]), S)

從程式碼上看,librosa提取mfcc預設沒有預加重和倒譜提升的步驟。
這裡附上一個librosa提取mfcc的完整程式。
另外不同的mfcc特徵提取工具都或多或少有些不同,如果用一個語言版本提取特徵訓練模型後移植時用的是另一個語言版本的工具,就一定要先對比清楚兩個工具特徵的差別,例如librosa預設沒有預加重、HTK是直接在原始整型資料基礎上做的、matlab版本大多在資料末尾補零的等等,關於mfcc的對比,可以參看這裡,還可以看下這篇論文 Comparative_evaluation_of_various_MFCC_implementat
不同MFCCs可能存在的差別:

  • Mel對映關係(如HTK方式與Slaney)
  • Mel濾波器的歸一化
  • DCT係數計算方式
  • Mel帶數量與寬度
  • Mel頻率範圍
  • 倒譜提升方式-rasta、htk、或者無
  • 短時傅立葉變換各個引數
  • 抖動或DC消除
  • 預加重

相關推薦

音訊特徵提取差異

MFCC特徵提取步驟: 預加重->STFT->mel濾波->DCT變換->倒譜提升 不同工具提取的特徵會有差別,這裡選用python中的librosa庫分析 預加重: FIR一階高通濾波器,提升高頻分量,傳遞函式為 H(z)

語義的特徵提取簡單詞頻展示(WordCloud)

對於語句分析,以及詞雲展示,具體程式碼如下: # coding=utf-8 import jieba import numpy import pandas as pd from wordcloud import WordCloud import matplotlib.pyplot a

關於音訊特徵提取

一.語音的產生簡介1.1   發音器官    人體的語音是由人體的發音器官在大腦的控制下做生理運動產生的。人體發音器官由三部分組成:肺和氣管、喉、聲道。 肺是語音產生的能源所在。氣管連線著肺和喉,是肺與聲道的聯絡通道。喉是由一個軟骨和肌肉組成的複雜系統,其中包含著重要的發音器

數字影象處理之特徵提取常用方法

形狀特徵   (一)特點:各種基於形狀特徵的檢索方法都可以比較有效地利用影象中感興趣的目標來進行檢索,但它們也有一些共同的問題,包括:①目前基於形狀的檢索方法還缺乏比較完善的數學模型;②如果目標有變形時檢索結果往往不太可靠;③許多形狀特徵僅描述了目標區域性的性質,要全面描述目標常對計算時間和儲存量有較高的要

紋理特徵提取 LBP紋理特徵matlab實現

一幅影象的紋理是在影象計算中經過量化的影象特徵。影象紋理描述影象或其中小塊區域的空間顏色分佈和光強分佈。 紋理特徵的提取分為基於結構的方法和基於統計資料的方法。一個基於結構的紋理特徵提取方法是將所要檢測的紋理進行建模,在影象中搜索重複的模式。該方法對人工合成的紋理識別效果

sift、surf、orb 特徵提取最優特徵點匹配

目錄 sift sift特徵簡介 sift特徵提取步驟 surf surf特徵簡介 surf特徵提取步驟 orb

基於OpenCV的Gabor變換特徵提取

一、Gabor變換概述    Gabor變換是一種加窗短時Fourier變換(Window Fourier transform or Short Time Fourier Transform)。Fourier變換是整體上將訊號分解為不同的頻率分量(任何訊號都可分解為復正弦訊號之和)

人臉表情識別筆記(二)特徵提取之LBP(區域性二值模式)原理MATLAB程式碼

一:原理部分 LBP(Local Binary Pattern,區域性二值模式)是一種用來描述影象區域性紋理特徵的運算元;它具有旋轉不變性和灰度不變性等顯著的優點。它是首先由T. Ojala, M.Pietikäinen, 和D. Harwood 在1994年提出,用

利用RobHess原始碼實現SIFT演算法RANSAC去錯的影象特徵提取匹配去除錯匹配

本文是在VS2010+Opencv2.4.9環境下實現! 首先下載RobHess利用opencv實現SIFT演算法原始碼,在配置好opencv環境的vs2010中實現SIFT特徵提取、匹配,在利用K-D樹、BBF和RANSAC去除錯誤匹配,實驗結果如圖: 去

影象特徵提取描述子彙總:FIST、SURF、FAST、BRIEF、ORB、BRISK、FREAK

SIFT特徵提取及描述子 1 特徵提取 1.1 構建尺度空間 1.2 選取特徵點         一個點如果在DOG尺度空間本層以及上下兩層的26個領域中是最大或最小值時,就認為該點是影象在該尺度下的一個特徵點 1.3 去除不好的特徵點 2 特徵描述子      

NLP中的語言模型文字特徵提取演算法

本文以基本語言模型為邏輯主線,漫談NLP中兩個核心問題,即文字表示(Text Representation)與文字特徵提取(Feature Engineering)。通過本文你會發現,NLP的一部分經典演算法以及目前的發展都能夠通過文字表示串聯在一起,有個

音訊訊號特徵提取(1):短時特徵之短時能量、短時功率、短時過零率

特徵提取(Feature Exaction)的重要性,就不用多說了。對於音訊訊號,按時間解析度、按區域性or全域性的觀念、持續時間長短,或者愛怎麼講怎麼講,特徵可分為長期(long-term)、中期(mid-term)、短期(short-term),也可以叫短時特徵。術語翻譯

opencv上gpu版surf特徵點與orb特徵提取匹配例項

一、前言 本文主要實現了使用opencv裡的gpu版surf特徵檢測器和gpu版orb檢測器,分別對圖片進行特徵點提取及匹配,並對尋獲的特徵點進行了距離篩選,將匹配較為好的特徵點進行展示 二、實現程式碼 我不生產程式碼,我只是程式碼的搬運工和修改工 //main.cpp/

音訊特徵(1):mfcc提取

除了呼叫FFmpeg來做多媒體開發,另一方面,是對音訊特徵進行研究。有很多具體的音訊特徵,比如頻率、振幅、節拍(bpm)、過零率、短時能量、MFCC等,在很多時候,提取這些特徵是進一步分析音訊的基礎。 如果你想對音訊進行一個分類,比如分出快慢歌、分出爵士跟hiphop、分出鋼琴與吉他、分出男高音與鳥叫聲,等等

塊存儲、文件存儲、對象存儲意義差異

修改時間 nas 組網 元數據 簡單 體系 spa 一份 識別 關於塊存儲、文件存儲、對象存儲方面的知識在知乎上看到了個很好的解答:https://www.zhihu.com/question/21536660 通俗易懂,查了些資料做了詳細的補充。 塊存儲 典型設

list,map,set集合的基本用法差異

nbsp htable body 根據 pos null clas 速度 就是 List:1.可以允許重復的對象。    2.可以插入多個null元素。 3.是一個有序容器,保持了每個元素的插入順序,輸出的順序就是插入的順序。 4.常用的實

翻拍特征提取SVM分類

沒有 灰度化 ec2 方法 拍照 相減 重新 識別 bsp 如下介紹DCT、灰度圖及DWT分別對正常及翻拍的特征提取,並將其用於SVM訓練模型及對新數據的預測。根據不同方式數據的翻拍檢測實驗結果可得出魯棒性DWT>DCT>灰度圖。 一、DCT特征: 1、 從DC

java基礎之JDBC三:簡單工具類的提取應用

註冊 args 釋放資源 file void tex 用戶名 SQ lose 簡單工具類: public class JDBCSimpleUtils { /** * 私有構造方法 */ private JDBCSimpleU

JQData數據提取MySQL簡單操作——基於Python

技術 建立 enc 改變 證券交易 基於 nod ali basename JQData平臺真的挺不錯,平臺數據可以免費使用一年,滿足絕大多數人需求,具體賬號獲取請自行百度喲~ 因需要高頻數據而Wind也只給近三年,再要還得購,,機緣遇到這一平臺,獲得了賬號試用很不錯,分享

解析京東大資料下高效影象特徵提取方案

本文主要分享英特爾和京東在基於Spark和BigDL的深度學習技術在搭建大規模圖片特徵提取框架上的實戰經驗。 背景 影象特徵提取被廣泛地應用於相似圖片檢索,去重等。在使用BigDL框架(下文即將提到)之前,我們嘗試過在多機多GPU卡、GPU叢集上分別開發並部署特徵抽取應用。但以上框架