我從互聯網記錄每天2分鐘的無線電廣播。始終有相同的開始和結束叮噹聲。由於無線電廣播的確切時間可能會有所不同,從大約6分鐘,我必須記錄大約15分鐘的廣播。比較兩個譜圖以找到它們匹配的偏移量算法
我想確定那些鈴聲在15分鐘記錄中的確切時間,所以我可以提取我想要的音頻部分。
我已經開始了一個C#應用程序,我解碼的MP3爲PCM數據和PCM數據轉換成基於http://www.codeproject.com/KB/audio-video/SoundCatcher.aspx
頻譜我試圖對PCM數據使用的互相關算法,但該算法是非常步行10分鐘左右慢6分鐘左右,有時無法找到鈴聲的開始時間。
算法的任何想法來比較兩個匹配的譜圖?或者更好的方式來找到鈴兒的開始時間?
感謝,
更新,抱歉耽擱
首先,感謝所有anwsers其中大多數是培訓相關和或interresting想法。
我試圖實現fonzo提出的Shazam算法。但未能檢測到譜圖中的峯。這是來自三個不同記錄的起始叮鈴聲的三個光譜圖。我嘗試使用blob過濾器AForge.NET(但它未能識別峯值),模糊圖像並檢查高度差異,拉普拉斯卷積,斜率分析以檢測一系列垂直條(但錯誤太多正面)...
在這個意思中,我嘗試了Dave Aaron Smith提出的Hough算法。我在哪裏計算每列的RMS。是是是每列,它是一個O(N * M),但是M(注意一列是大約8k的樣本)。所以總的來說這並不是那麼糟糕,算法仍然需要大約3分鐘,但從未失敗。
我可以用這個解決方案,但如果可能的話,我更喜歡Shazam,因爲它是O(N)並且可能更快(也更酷)。所以你們有沒有想法算法總是檢測這些譜圖中的相同點(不一定是峯值),這要歸功於添加評論。
新更新
最後,我的算法上面解釋去了,我試圖實現Shazam的算法,但未能找到合適的譜圖中的峯值,從一個聲音文件到另一個聲音文件不是恆定的已識別點。理論上,Shazam算法是解決這類問題的方法。 Dave Aaron Smith提出的Hough算法更加穩定和有效。我分割了大約400個文件,只有20個文件無法正確分割。磁盤空間從8GB到1GB。
謝謝你的幫助。
嗨,謝謝你的迴應,今天我學到了一些東西。但我真的不知道用什麼指標來表示一部分信號。譜圖是一個數組,我可以針對不同頻率(如100)運行此算法,並對每個部分的投票進行總結。但是我想知道這個表現。 – 2011-04-13 18:23:54
是的,霍夫變換用於計算機視覺,我不太瞭解音頻信號處理。對於度量標準,這是一個聰明的想法來衡量特定的頻率。 – 2011-04-15 13:18:39