計算機程序如何識別音色?
12-03
怎麼用計算機程序識別音色,即同一個人說得兩句完全不同的話,計算機能否識別出是同一人所說
最近正在研究信號處理,期間也遇到同樣的疑惑。閑來無事,也是做個簡單的知識梳理。希望我的回答對你有用。
發聲體震動產生的波,經過介質可以傳遞到接聲體。發聲體可以是任何東西,如我們的嘴巴(包括舌頭牙齒等等),介質如空氣、空氣、木頭等等,接聲體一般是指我們的耳朵(聲音經過耳朵,還要進行一系列的物理生理轉化,此處不細究)。
我們知道聲音有三大特性:響度,音調和音色。我們也知道聲音是波,而波的特性里有振幅、頻率和相位(想想典型的正弦波圖像)。我們也大概知道振幅決定響度,頻率決定音調,疑問就來了,難道相位決定音色嗎?
一般的資料,會告訴我們音色的不同源於發聲體的材質等不同的物理特性。不同的材質以相同的振幅和頻率震動,產生的音色一般是不同的,比如木頭和鋼鐵,我們可以輕易的區分出他們的不同,這應該就是所謂的音色。這麼理解的話,相同的人說著相同的話,有時我們也可以感覺到差異,這又是為何?如果讓計算機去區分,又是什麼原理和結果呢?
其實,如果從接聲體的角度出發,來解釋聲音的三大特性,應該容易理解多了。聲音大了,即是聲音引起耳朵的震幅大;聲音尖了,即是聲音引起耳朵震動的頻率快;音色呢,其實是緣於聲波的不純凈。聲音很少只有一個單純的聲源,比如我們說話,每個人的嘴巴生理構造總有差異,這些差異又有可能因時間、環境的不同而放大或者縮小,考慮到傳播有介質的不同,考慮到接聲體還有接聲體的差異,考慮到環境有無數的雜音,這些差異直接或者間接影響了聲波的產生、傳播(折射、反射等)和還原,聲音在接聲端已經不是我們想像那麼單純了。對,它變得複雜了,更像是一個混合體,融合了各種聲波的混合體,用專業一點的話說就是它包含了主音和泛音。泛音是伴隨著它的各種頻率和振幅的其他聲波。這些泛音和主音融合,實際上是導致了聲波的頻率和振幅不是一個常數。抽象到波形圖上,就是聲音不是固定振幅固定頻率的曲線。這些變化的部分實際上就是不同音色產生的原因。
現在再看你的問題,想要回答計算機如何區分音色,還得補點知識。計算機接收聲音,得有個設備來獲取這些數據,這叫做音頻的採樣。基本的原理是聲音是波,有能量,能引起其他物體震動,這些震動又可以引起電流電壓電阻電容等物體電子特性的變化,計算機能按照一定的頻率來記錄這些數值和變化,完成從連續的模擬信號到離散的數字信號轉化。雖然數字信號是離散的,但採樣率足夠大,還是很容易大致還原原始模擬信號的(況且人耳朵解析度也不是那麼大,不是一點點變化就可以聽出區別的)。這些數字信息,包含了聲音的即時數值,想像成圖像就是不斷變化的波形時序圖。不同物體或者人產生的波形圖基本不會相同,即使發聲體頻率和振幅相同,也很難產生相同的波形,影響因素就是泛音的不同,即產生的音色不同。
再考慮到信號處理,一般這種實際的信號會被分解成一定甚至是無數的規則信號,實際信號就是這些規則信號的疊加。而音色的不同就是這些規則信號本身的差異以及它們合成的變化。基於此,計算機就能輕易的分別出不同的音色。(如果在考慮多點,還有計算機聲音接收設備的優劣,考慮模數轉化的好壞以及聲音數據處理演算法的優劣等因素,會影響到音色的識別)
同時,因為相同的物體或者相同的人,他們的聲音信號會在某些特性上十分相似,即其分解的某些規則信號還是有很大相似度,合成後也是有很大的形似度,這些相似度會有一些指標,我們對這些指標定一些閾值,達到一定閾值,我們就可以讓計算機認為是相同的物體或者相同的人發的聲音了。
推薦閱讀: