〖心得筆記〗AMDF 的簡介與應用

•前言
•什麼是AMDF?
•為什麼要選用AMDF?
•AMDF的使用條件和 原理
•AMDF 公式
•圖解AMDF 及 簡易範例 解說
•AMDF 的運用注意事項
•AMDF sample code

 

前言


「聲音訊號」(Audio Signals)簡稱「音訊」,泛指由人耳聽到的聲音。發音體產生的震動,會對空氣產生壓縮與伸張的效果,形成聲波。聲波傳遞到人耳,耳膜會感覺到壓縮與伸張的壓力訊號,內耳神經再將此訊號傳遞到大腦,最後由大腦來分辨此訊號的意義。
•在分析聲音時,通常以「短時距分析」(Short-term Analysis)為主,音訊在短時間內是相對穩定的。通常將聲音先切成音框(Frame),每個音框長度大約在 20 ms 左右,再根據音框內的訊號來進行分析。
•在此特定音框內,可以觀察到的三個主要特徵:
• 音量(Volume):代表聲音的大小。
• 音高(Pitch):代表聲音的高低,。
• 音色(Timbre):代表聲音的內容。
image


• 音量(Volume):代表聲音的大小,可由聲音訊號的震幅來類比,震幅越大,代表此聲音波形的音量越大。
• 音高(Pitch):代表聲音的高低,可由基本頻率(Fundamental Frequency)來類比,這是基本週期(Fundamental Period)的倒數。聲音的基本頻率越高,代表音高越高;反之,聲音的基本頻率越低,代表音高越低。
• 音色(Timbre):代表聲音的內容,可由每一個波形在一個基本週期的變化來類比。不同的音色即代表不同的音訊內容,不同的字母有不同的發音,都是由於音色不同而產生。
 

什麼是AMDF?

•AMDF( Average magnitude difference function )是一種由透過分析音訊資料,找出頻率的方法。
•通常人類使用「觀察法」來找出音高,並不是太難。
•但是若要電腦自動算出音高,就需要對音訊進行進一步的分析。
•使用電腦對整段音訊進行抓取音高的過程,通常稱為「音高追蹤」(Pitch Tracking)。
 

為什麼要選用AMDF?

•用單一音框計算出音高的方法,大致分為時域和頻域兩大類:
•時域(Time Domain)
–ACF: Autocorrelation function
–AMDF: Average magnitude difference function
–SIFT: Simple inverse filter tracking
•頻域(Frequency Domain)
–Harmonic product spectrum method
–Cepstrum method
•AMDF計算公式中,沒有乘除運算,與其他 方式 比較起來,運算複雜度低。對於 8051來說,使用AMDF,可以在較短的時間,取得 計算結果。

AMDF的使用條件 和 原理

•AMDF的使用條件
•音框長度至少必須包含 2 個基本週期以上,才能顯示語音的特性。
•AMDF 原理
•一般要比較兩個圖形是否一至,就是想辦法讓它們”重疊”,在有一定的起點下,就可以判斷這兩張圖形,是否有差異。如果沒有差異就表示,圖形吻合。
•經由短時距分析方式,所取得的音框其音訊是相對穩定。使用時間軸,當作移動的參考值,找出移動後,”重疊部分”的變化值,就可以從這些變化值amdf(τ),推算出實際的音框周期。
•知道周期後,就可以反推此音框的頻率。
 

AMDF 公式

image

 

圖解AMDF 及 簡易範例 解說

image
•n:樣點數總合 τ:偏移量 i:重疊部分 的 陣列索引
•假設 取樣率是10 Hz ,對一個未知頻率的三角波取樣,範例中取出的音框為 0.9s
下面是各個amdf 偏移量 τ 的分解 與 每次平移後 重疊部分的差
imageimage
image

•將音框每次向右平移一點,和原本音框的重疊部分進行點對點的相減、取絕對值、相加,重複 n 次後會得到 n 個內積值這就是 AMDF。
•從結果得知, 局部低點 出現的地方 就是 音框 相同(相似) 的地方,這些低點(谷值)出現的周期 ,就相當於 音框實際的周期。
•以相對低點 (τ=0,3,6,9)當參考,由3-0=3,得知周期等於3單 位
•取樣率是 10 Hz,這未知頻率 三角波的 週期=3*0.1s=0.3s
•頻率 為周期倒數 f = 1/t = 1/0.3s =3.333Hz
•推算出 此三角波頻率 為 3.333Hz
image

AMDF 的運用 注意事項


–聲音代表了空氣的密度隨時間的變化,基本上是一個連續的函數,但是若要將此訊號儲存在電腦裡,就必須先將此訊號數位化。一般而言,當我們將聲音儲存到電腦時,有下列幾個參數需要考慮:
–音訊取樣頻率(sample Rate):每秒鐘所取得的聲音資料點數,以 Hertz(簡寫 Hz)為單位。點數越高,聲音品質越好,但是資料量越大,常用的取樣頻率如下:
–8 kHz:電話的音質、一般玩具內語音 IC 的音質
–16 KHz:一般語音辨識所採用
–44.1 KHz:CD 音質

 

AMDF sample code

image
•n:樣點數總合 , data_matrix_length
• τ:偏移量 , overlap_index
•i:重疊部分的 陣列索引,shift_index

// do AMDF calculate and store result in AMDF matrix
for (shift_index =0 ; shift_index < data_matix_length ; shift_index ++) AMDF_matrix[shift_index] = AMDF(shift_index);
unsigned char AMDF(unsiged char shift_index)
{
unsinged char temp_value = 0 ;
for(overlap_index = 0 ; overlap_index < data_matix_length-overlap_index-1 ; overlap_index++)
{
temp_value = temp_value + abs(data_matrix[overlap_index] - data_matrix[overlap_index+shift_index]);
}
return temp_value;
}
























































留言

這個網誌中的熱門文章

海外券商Firstrade開戶步驟+中國信託匯款到Firstrade心得分享

[PSP]命運之輪 金手指

【心得筆記】FooPlot | 線上數學函數繪圖器