2015-04-15 83 views
1

我正在開發用於頻率檢測的IOS應用程序,我使用的算法YIN,這是非常精確的:巫大膽,我已經生成的不同的矩形波頻率 - 我的算法精度約爲0.1% - 例如產生一個82,4 Hz(E字符串)的音調,我真的得到了82.4 Hz,沒有別的。無論如何,當我彈奏吉他弦時,我經常會得到泛音,有時可能比基音(F0)更強(幅度更高)。因此,我的顯示器開始「跳舞」和切換 - 有時甚至發生(當音調消失時),我的算法停止在泛音頻率(例如A而不是E) - 因此用戶必須再次彈奏字符串或查看他想要的音色(頻率)是否存在。我知道這種現象與我的算法無關,因爲它只是一個「硬件」問題(我的意思是簡單地產生泛音的吉他)。賢頻檢測和色彩(吉他弦)

我一直試圖平滑(頻率檢測)的結果,或者一旦關鍵頻率(例如E弦+/-容差爲82.4 Hz)已經被「捕捉」到固定頻率檢測。總之,我的算法經常會發生錯誤的頻率。

我在問自己,吉他調音器(對於吉他店中的10美元)是多麼便宜,因爲它們的頻率檢測也是可靠和穩定的。

我不想改變算法,但有兩個可能的解決方案進入我的腦海:

  1. 信號(可能是漢寧窗,低通或帶通濾波)和/或
  2. 後處理的預處理的信號(某種頻率平滑)。

有人想法如何克服「波濤洶涌」的結果?

回答

1

我用自相關爲我的免費應用程序色彩和iTransposer成立的漢寧窗所以這可能會幫助你。我最初並沒有在尋找準確性,因爲我想在一個壁上顯示音符而不是一米。然而,我的一位朋友在他的工作中使用信號發生器測試了它的頻率爲0.1Hz,並且使用正弦波等簡單信號的問題超過了383Hz。我曾用各種銅管樂器試過,吉他和Garageband樂器似乎沒問題調整。 基本上,我實現了這個http://www.ucl.ac.uk/~ucjt465/tutorials/praatpitch.html 使用VDSP和更新,由凱文·P·墨菲提供的示例項目https://github.com/kevmdev/PitchDetectorExample

+0

謝謝,psybersonic - 我已經試過了你的建議,並有相關的頻率穩定度略有改善。爲了更好地理解音高或語音檢測,論文「Pitch in Praat」爲我提供了很多幫助。非常感謝! –

+0

很高興幫助Ulrich。數字音頻並不容易。如果您使用Kevin Murphy的任何代碼,則音頻控制器中存在內存泄漏。需要添加免費(THIS-> bufferList.mBuffers [0] .mData);在錄音回調結束時。 (如果我的記憶是正確的)。 – psybersonic