1. 程式人生 > >利用梅爾倒譜系數(MFCC)及空間聚類演算法實現音色識別

利用梅爾倒譜系數(MFCC)及空間聚類演算法實現音色識別

寫在前面

2016年4月參加了哈爾濱工業大學深圳研究生院舉辦的創新創業比賽,司職演算法組長,切入點定在了音色識別和相似明星音才藝展示推薦演算法上,不才,拿到了一等獎,趁佳節未散與大家分享。

專案進度安排

2016年1月~2016年3月:前期工作中瞭解學習了語音訊號處理的基本原理,查閱有關文獻了解到了聲音音色資訊的描述方式,梅爾(Mel)倒譜系數的意義,推導了相關公式並實現了MFCC(Mel Frequency Cepstral Coefficient)引數的計算,閱讀並瞭解了有關說話人識別,音色識別和MFCC引數的相關應用情況。

2016年4月~2016年6月:後期工作中組內部分成員同軟體組(還是什麼組?)共同合作完成了由演算法向實際應用的轉化,另一部分成員進行了後續的演算法優化,添加了噪聲預處理環節,並期待利用支援向量機(SVM),K-均值聚類(K-means)等機器學習演算法實現更好的音色識別效果。

專案實施方案與原理

在MFCC引數提取方面,我們遵循[1]中所述的計算流程,程式設計實現了對一段語音的MFCC引數提取:

具體的程式設計環節這裡暫時不介紹,從Mel刻度轉換後我們得到的MFCC引數多達40餘個,為了避免特徵泛化導致識別率降低,我們需要對這些特徵進行篩選。還好這個工作已經有人替我們完成[2],通過離散傅立葉變換(DCT),我們可以得到需要的C2~C16的特徵值作為說話人的音色描述子。用了別人的工作,我們還應該本著嚴謹的態度對其進行驗證。這裡我們設計一個二類分類實驗,利用SVM來進行音色描述子優劣的描述。利用現有資料庫的測試資料,我們實現瞭如下的測試結果:


SVM十次十折實驗利用MFCC引數作為特徵可實現97.5%的識別準確率。

SVM再處理多類分類問題時存在著運算速度和效率上的限制,從這一點考慮,我們先使用了最簡單的最小歐式距離法進行識別,該演算法在小參考集下運算速度較快,但大參考集時運算耗時會嚴重增長,為了解決這個問題,我們提出了使用K-means聚類+最小歐式距離結合的方法,利用聚類演算法,將大型的資料集分成若干個小的資料集,並且以聚類中心作為該集合的label,識別過程中首先進行類間匹配,接下來再進行類內匹配。

演算法上的專案創新點有二:

其一,首次使用MFCC引數作為歌手的識別推薦系統下,需要解決很多噪聲處理和歌手特徵提取的難題;

其二,在識別過程中採用了無監督學習和有監督學習結合的方法,加快識別速度。

不足之處的反思

目前採用的特徵還只是MFCC引數這一個角度,特徵的型別較為單一,在未來的研究中,可以增加一些更為有效的特徵作為音色的描述,同時,可以引進更大的標準資料庫,在網際網路上利用爬蟲等資料探勘手段收集更多的明星聲音來擴充我們的標準庫。作為一款娛樂應用,這個APP已經具備了初步市場化的能力,但是一首歌終究還是由音色,音調和節奏等多方面組成,我們推薦結果的好壞是一個取決於APP使用者很主觀的評價準則。如何實現APP的可持續發展,如何讓APP保持活力,維持使用者數量和使用者活躍度等等都是很不確定的因素。


reference:

[2]甄斌,吳璽巨集,劉志敏,遲惠生. 語音識別和說話人識別中各倒譜分量的相對重要性[J].北京大學學報(自然科學版),2001,03:371-378.


Attachment:

展示一下最後APP的結果:


以及移動端的邏輯關係:


相關推薦

利用譜系MFCC空間演算法實現音色識別

寫在前面 2016年4月參加了哈爾濱工業大學深圳研究生院舉辦的創新創業比賽,司職演算法組長,切入點定在了音色識別和相似明星音才藝展示推薦演算法上,不才,拿到了一等獎,趁佳節未散與大家分享。 專案進度安排 2016年1月~2016年3月:前期工作中瞭解學習了語音訊號處理的基本

頻率譜系MFCC 學習筆記

最近學習音樂自動標註的過程中,看到了有關使用MFCC提取音訊特徵的內容,特地在網上找到資料,學習了一下相關內容。此筆記大部分內容摘自博文 http://blog.csdn.net/zouxy09/article/details/9156785 有小部分標註和批改時我自己加上的

頻率譜系MFCC的提取過程與C++程式碼實現

MFCC引數提取步驟 ——>預加重 ——>分幀 ——>對每一幀加窗 ——>對每一幀補零 ——>各幀訊號的FFT變換及其功率譜 ——>梅爾濾波(通過40個濾波器) ——>取對數 ——>DCT變換 ——>歸一化 1.預加重

機器學習總結:常用演算法Kmeans、密度、層次常見問題

任務:將資料集中的樣本劃分成若干個通常不相交的子集。 效能度量:類內相似度高,類間相似度低。兩大類:1.有參考標籤,外部指標;2.無參照,內部指標。 距離計算:非負性,同一性(與自身距離為0),對稱性

基礎演算法:Kmeans演算法的基本原理與應用

Kmeans聚類演算法的基本原理與應用       內容說明:主要介紹Kmeans聚類演算法的數學原理,並使用matlab程式設計實現Kmeans的簡單應用,不對之處還望指正。 一、Km

機器學習——K均值演算法K-means

概述: 1.聚類 “類”指的是具有相似性的集合。聚類是指將資料集劃分為若干類,使得類內之間的資料最為相識,各類之間的資料相似度差別儘可能大。聚類分析就是以相似性為基礎,對資料集進行聚類分析,屬於無監督學習。 2.無監督學習和監督學習 k-均值聚類(k-means)與k-近鄰(knn)

機器學習2:DBSCAN演算法

一、DBSCAN演算法基本概念 1.全稱:Density-Based Spatial Clustering of Applications with Noise 基於密度帶有噪聲聚類 2.核心物件:若某個點的密度達到演算法設定的閾值則其為核心點。 (即某點的r 鄰域內,點的數量不小於設定閾值 m

模糊演算法FCM和硬演算法HCM)的VB6.0實現及其應用

Private Function Fcm(ByRef Data() As Double, ByVal Cluster As Long, Optional ByVal CreateIniCenter As IniCenterMethod = IniCenterMethod.CreateByHcm, Option

第23課 可變參模板4_Optional和Lazy實現

opera -s 緩沖區 data emp 銷毀 由於 方便 lazy load 1. optional類的實現 (1)optional的功能   ①optional<T>的內部存儲空間可能存儲了T類型的值,也可能沒有。只有當optional被T初始化之後,這個

python的內置函匿名函

fun filter 叠代器 指定 調用 color 計算 函數應用 真的 一:內置函數(續) 1,zip (拉鏈方法) 函數用於將可叠代的對象作為參數,將對象中對應的元素打包成一個個元組,然後返回這些元組。如果各個叠代器的元素個數不一致,則返回的元組個數與最短的對象相同

隱馬可夫模型HMMViterbi演算法

HMM簡介   對於演算法愛好者來說,隱馬爾可夫模型的大名那是如雷貫耳。那麼,這個模型到底長什麼樣?具體的原理又是什麼呢?有什麼具體的應用場景呢?本文將會解答這些疑惑。   本文將通過具體形象的例子來引入該模型,並深入探究隱馬爾可夫模型及Viterbi演算法,希望能對大家有所啟發。

SLS機器學習介紹02:時序建模

文章系列連結 SLS機器學習介紹(01):時序統計建模 SLS機器學習介紹(02):時序聚類建模 SLS機器學習介紹(03):時序異常檢測建模 SLS機器學習介紹(04):規則模式挖掘 前言 第一篇文章SLS機器學習介紹(01):時序統計建模上週更新完,一下子炸出了很多潛伏的業

多執行緒1:繼承Thread實現Runnable介面

多執行緒的兩種實現方法: 1.繼承Thread類     繼承Thread類,重寫run()方法。建立多執行緒的時候,需要建立物件例項,然後呼叫start()方法。類物件的屬性屬於執行緒私有,執行緒之間互不影響。 public class ClassExtendT

吳恩達機器學習十一K-means無監督學習、演算法

目錄 0. 前言 學習完吳恩達老師機器學習課程的無監督學習,簡單的做個筆記。文中部分描述屬於個人消化後的理解,僅供參考。 如果這篇文章對你有一點小小的幫助,請給個關注喔~我會非常開心

Python Numpy 100題實驗:幾種標準化演算法實現

單獨把這幾道題目拿出來,歸為一類吧,都是標準化演算法。 本講的主要內容: Z-Score標準化演算法 Min-Max標準化演算法 應用L2正規化標準化資料 使用Z-Score標準化演算法對資料進行標準化處理 首先給出Z-Score標準化公式: Z=X−mea

圖相關圖的鄰接矩陣表示C++最最小生成樹演算法prim和kruskal

一.測試用圖 鄰接矩陣表示: //prim注意是無向圖 vector<vector<int>> p(6, vector<int>(6, INF));//類似dijikstra,沒有邊的點設為INF p[0][1] = 10;

圖相關圖的鄰接矩陣表示C++最短路徑演算法

一.Dijikstra演算法 注意:計算最短路徑時,需要把鄰接矩陣中沒有邊的位置初始化為無窮大;此處以INF表示,INF可以取0x3f3f3f3f,不能直接設為INT_MAX(因為做加法時會上溢)。 測試用圖: 其鄰接矩陣表示為: vector<vector<int

【機器學習】人像識別——K-Means

簡介   K-Means聚類是一種非監督的聚類方式,原理參看資料探勘十大演算法 | k-means。    程式碼 import sys import random import numpy as np from sklearn.decomposit

機器學習系列:K-Means

本章,我們介紹了我們的第一個無監督學習方法:聚類。聚類是用來探索無標籤資料的結構的。我們介紹了K-Means聚類演算法,重複將樣本分配的類裡面,不斷的更新類的重心位置。雖然K-Means是無監督學習方法,其效果依然是可以度量的;用畸變程度和輪廓係數可以評估聚類效果。我們用K-Means研究了兩個問題。第一

【無監督學習】3:Density Peaks演算法實現區域性密度演算法

前言:密度峰聚類演算法和DBSCAN聚類演算法有相似的地方,兩者都是基於密度的聚類方式。自己是在學習無監督學習過程中,無意間見到介紹這種聚類演算法的文章,感覺密度峰聚類演算法方法很新奇,操作也很簡答,於是自己也動手寫一下了。 –—-—-—-—-—-—-—-—-