2014-04-12 41 views
0

我正在編寫語音識別代碼。我有一個數據庫n,每個數據庫包含不同人記錄的相同數量的單詞。如何在matlab中使用xcorr查找兩個信號之間的相似度

我想在例如參考詞「hello」與「hello」db中的所有單詞以及「門」db中的所有單詞之間執行xcorr,然後代碼必須對我說哪個詞是它。我需要做出一些數學典範才能做出決定。

現在,我知道同一個單詞之間的自動關聯有一個對稱圖。但是如果我比較一個男性說的「你好」和一個女性說的這個詞它不是對稱的,並且如果我將單詞「hello」與單詞「door」進行比較,我會得到相同的結果。

我的問題是:我怎樣才能找到兩個詞做xcorr函數之間的相似之處?我是否需要找到xcorr的滯後或最大值?

感謝您的幫助。

回答

0

我的問題是:我怎樣才能找到xcorr函數的兩個詞之間的相似之處?我是否需要找到xcorr的滯後或最大值?

要測量相似一字一句記錄,你需要採取最大值,它是相似

的措施,但如果我比較的話「你好」由雄說和同一個詞說女性是不對稱的,如果我將單詞「hello」與單詞「door」相比較,我會得到相同的結果。

要在其類中的樣本屬於一個最佳的決定,你需要比較相似措施兩個集羣:

max(xcorr(sample, hello)) < > max(xcorr(sample, door) 

背後的理論被稱爲「貝葉斯最優分類」。

如果您有更多的字樣,你可以做出更好的決定:

max_sample(max_lag(xcorr(sample, hello_sample_i)) < > max_sample(max_lag(xcorr(sample, door_sample_i)) 

我寫了語音識別的代碼。

語音樣本是時變的,xcorr對時間變化不是不變的。更好的衡量標準是語音頻譜的DTW距離。你可以在這裏找到DTW距離實現:

http://www.ee.columbia.edu/ln/rosa/matlab/dtw/

DTW是不變的時移,這樣你就可以做出更可靠的決策。

+0

非常感謝您的幫助。 我相信找到最大值是不夠的。我是否也需要它的位置?我如何進行比較? 現在,我有一個數組,用於存儲每個crosscorr的最大值的每個db。如果我已經得到樣本單詞「hello」的這些結果,我該如何做出判斷? 「hello db」= [8.7729,14.2898,7.8010,4。8641,5.2716] 「door」db = [8.4145,6.7965,11.2714,6.4075,6.7344] – user3426270

+0

hello db的最大值更高,所以這個詞屬於hello。爲了使判斷更加可靠,您需要轉到MFCC係數,並使用DTW代替xcorr,就像我以前寫過的那樣。 –

相關問題