2010-07-04 116 views
15

我想獲得兩段音頻之間的某種距離度量。例如,我想比較動物的聲音和模仿動物的人的聲音,然後返回聲音的相似程度。兩個音頻序列之間的感知相似性

這似乎是一個難題。什麼是最好的方法來處理它?我正在考慮從音頻信號中提取幾個特徵,然後在這些特徵上做一個歐幾里德距離或餘弦相似性(或類似的東西)。什麼樣的特徵容易提取並且有用於確定聲音之間的感知差異?我看到了一些關於Ahazam如何使用散列的東西,但這看起來像是一個不同的問題,因爲這兩個音頻是完全相同的,並且還有噪聲,而在這種情況下,這兩個音頻不是相同的,他們只是知覺上相似)

回答

3

我建議尋找頻譜分析。雖然這並不像你最想要的那麼直截了當,但我期望將音頻分解爲它的基礎頻率將提供一些非常有用的數據進行分析。看看這link

+0

謝謝。我可以嘗試生成一些不同聲音的頻譜,看看相似的聲音是否會產生類似的頻譜,而不同的聲音則不會。根據我對維基百科鏈接的理解,頻譜必須使用傅里葉變換創建? – Bart 2010-07-05 09:33:57

3

你的第一步肯定會採取聲波Fourier Transform(金融時報)。如果您對頻率隨時間變化的數據執行FT,您可以比較噪音過程中某些關鍵頻率的頻率。

也許你也可以從另一個減去一個波,以獲得一種逐步的差分函數。假設模擬噪聲作爲原始噪聲遵循相同的頻率和音調趨勢,您可以計算出最適合差分函數點的線。將最佳擬合線與原始聲波的最佳擬合線進行比較,您可以將趨勢線平均化,作爲比較的基礎。當然,這將是一個非常鬆散的比較方法。

- 1. hz/ms,也許?我不熟悉在這裏工作的單位數量級,我一般在毫微微到毫微米範圍內工作。

- 2.只要∀ Δ T,Δ 節距/ΔŤ& Δ 頻率/Δ T分別一些公差 X內。

- 編輯格式化,因爲我實際上忘了寫完整的答案。

+0

你的意思是生成一個正確的頻譜?當他們把它對準原聲音波時,差分函數的線不會是0嗎? – Bart 2010-07-05 09:39:09

+0

是的,我的意思是生成一個頻譜。用這麼多的話說。 :) 如果比較的最佳擬合線是基於兩個聲波的平均值,不,我不相信它只是0.可能是錯誤的! – Andy 2010-07-05 16:20:19

8

用於比較相似的一組聲音的方法是在計算機科學的研究稱爲基於內容的音頻IndexingRetrievalFingerprinting

這樣做的一種方法是:信號處理的每個音頻文件以提取特徵,比如音調隨時間,頻率譜,自相關,動態範圍,瞬變等

  1. 運行幾個位。

  2. 把所有的功能爲每個音頻文件轉換成一個多維數組和轉儲每個多維數組到數據庫

  3. 使用優化技術(如gradient descent),以找到一個給定的最佳匹配音頻文件在你的數據庫中的多維數據。

使這項工作很好的訣竅是選擇哪些功能。自動執行此操作並取得良好效果可能會非常棘手。在Pandora這些人做得很好,在我看來他們有最好的相似度匹配。他們通過手工編碼矢量,通過讓人們聽音樂並以多種不同方式對它們進行評分。請參閱Music Genome ProjectList of Music Genome Project attributes瞭解更多信息。

對於自動測量距離,有幾個項目是做這樣的東西,包括marsysasMusicBrainz,和EchoNest

Echonest有我在這個空間中看到的simplest APIs之一。非常容易上手。

相關問題