• 沒有找到結果。

第 三 章 實作音訊指紋系統

3.3 辨識查詢片段

資料庫準備完成,我們接著要來建立系統架構中的線上部分,使用者輸入一 段查詢片段後,我們首先抽取這段片段的特徵,接著將特徵轉換為地標並且建構 出對應的鍵值與代表值,這邊我們並不會建立查詢片段雜湊表,查詢片段的鍵值 是用來比對資料庫內的的雜湊鍵所用,當我們在資料庫的雜湊表內找到相同的鍵 值時,便可以比對查詢片段的代表值與資料庫內的代表值,以此找出最有可能的 偏移時間 (offset time) 並輸出最有可能的歌曲。以下我們將詳述其細節。

3.3.1 比對查詢片段與資料庫

系統接收到查詢片段後,首先用 3.2 中所述之方法,經過選取突出點、配對 組合成地標、建構雜湊鍵與代表值,不同的地方在於,這裡的代表值內歌曲編號 的所有位元皆為 0 ,因為我們還不知道查詢片段的對應歌曲,而後也不會建構雜

圖 3.13: 以辨識片段的雜湊鍵為索引從資料庫內取出雜湊值

湊表,代表值就等於該查詢片段地標的錨點時間 (t1) ,也就是該地標的起始時間。

接著利用查詢片段的雜湊鍵為索引,直接提取資料庫內具有相同雜湊鍵的雜湊 值,雜湊值內包含資料庫中所有對應相同雜湊鍵的代表值。以圖 3.13 為例,從查 詢片段抽取出的雜湊鍵如圖中虛線左邊的區塊所示,虛線右邊則是資料庫的完整 雜湊表,從查詢片段我們得到一系列雜湊鍵,其中以 8002、15007 為索引可以在 資料庫中找到對應的雜湊值,如紅色虛線框住的部分,將所有雜湊值內的代表值 一一取出,並記錄歌曲編號以及起始時間。

3.3.2 計算偏移時間 (offset time)

偏移時間的定義如式 3.5 ,我們以雜湊鍵為軸心,分別在查詢片段與資料庫 中取出了各個代表值,接著把代表值中歌曲編號的部分獨立取出,先著眼於起始 時間的部分,其中 t1DB 為資料庫中的起始時間,t1query 為查詢片段中的起始時 間,兩者相減得到偏移時間。接著再將偏移時間與歌曲編號連結並記錄。

Of f set T ime = t1DB − t1query (3.5) 如圖 3.14 所示,上方為資料庫中歌曲的完整片段,下方小長方形為查詢片

圖 3.14: 偏移時間示意圖

段,則雜湊鍵對應到的兩邊起始時間經由 3.5 ,可得到下方紅色雙箭頭所表示的 時間差,此即為偏移時間 (offset time)。

3.3.3 統計偏移時間相同之歌曲與評分

在上一小節中,我們計算了偏移時間並紀錄了對應的歌曲編號,接下來要將 所有歌曲編號與其偏移時間做分類與統計,如圖 3.15 。由於資料庫中每一首歌 曲都有可能取出相同的雜湊鍵,所以每一個雜湊鍵底下所包含的歌曲編號不只一 種,我們將偏移時間依歌曲編號整理在一起,先將圖 3.15 的結果按歌曲編號排 序,如圖圖 3.16 ,接著對每一首歌曲統計每一種不同的偏移時間它的發生次數,

統計時允許偏移時間可以有正負一個音框的誤差,累計該偏移時間正負一個音框 內的次數,最後找出眾數作為該首歌曲的比對結果,亦是該歌曲的評分。以圖 3.15 的流程為例,最左邊的表按歌曲編號排序並記錄對應的偏移時間,也稱之為 hit list ,我們將編號 338 的歌曲所有的偏移時間取出,允許正負一個音框的誤差,

將結果統計如中間的表,再選出次數最多的偏移時間眾數,以本表範例是 555 的 18 次為最多,最後將次數最多的歌曲編號取出,如圖中最右邊的表,這代表歌曲 編號 338 的分數為 18 。

圖 3.15: 歌曲編號與對應之偏移時間

圖 3.16: 偏移時間的統計流程

圖 3.17: 分數 Top-10 排行

3.3.4 回傳分數前十高之歌曲資訊

根據上一小節的分數計算結果,我們取出分數前十高的歌曲並依分數高低排 序,如圖 3.17 所示,根據這份排行榜的歌曲編號,取出歌曲相關資訊,將資訊與 排名一併回傳給使用者作為辨識結果。在後續章節計算辨識率時,會只用第一名 的歌曲當作最終辨識結果,亦即第一名的辨識結果與正確答案不符合即為辨識錯 誤。

相關文件