我正在開發用於頻率檢測的IOS應用程序,我使用的算法YIN,這是非常精確的:巫大膽,我已經生成的不同的矩形波頻率 - 我的算法精度約爲0.1% - 例如產生一個82,4 Hz(E字符串)的音調,我真的得到了82.4 Hz,沒有別的。無論如何,當我彈奏吉他弦時,我經常會得到泛音,有時可能比基音(F0)更強(幅度更高)。因此,我的顯示器開始「跳舞」和切換 - 有時甚至發生(當音調消失時),我的算法停止在泛音頻率(例如A而不是E) - 因此用戶必須再次彈奏字符串或查看他想要的音色(頻率)是否存在。我知道這種現象與我的算法無關,因爲它只是一個「硬件」問題(我的意思是簡單地產生泛音的吉他)。賢頻檢測和色彩(吉他弦)
我一直試圖平滑(頻率檢測)的結果,或者一旦關鍵頻率(例如E弦+/-容差爲82.4 Hz)已經被「捕捉」到固定頻率檢測。總之,我的算法經常會發生錯誤的頻率。
我在問自己,吉他調音器(對於吉他店中的10美元)是多麼便宜,因爲它們的頻率檢測也是可靠和穩定的。
我不想改變算法,但有兩個可能的解決方案進入我的腦海:
- 信號(可能是漢寧窗,低通或帶通濾波)和/或
- 後處理的預處理的信號(某種頻率平滑)。
有人想法如何克服「波濤洶涌」的結果?
謝謝,psybersonic - 我已經試過了你的建議,並有相關的頻率穩定度略有改善。爲了更好地理解音高或語音檢測,論文「Pitch in Praat」爲我提供了很多幫助。非常感謝! –
很高興幫助Ulrich。數字音頻並不容易。如果您使用Kevin Murphy的任何代碼,則音頻控制器中存在內存泄漏。需要添加免費(THIS-> bufferList.mBuffers [0] .mData);在錄音回調結束時。 (如果我的記憶是正確的)。 – psybersonic