我試圖做一些使用音頻文件(鋼琴錄音)的信號處理 我找到了音符起始點,然後對每個起始點執行FFT。但是我發現對於某些筆記而言,他們的二次諧波的幅度比他的基本幅度更大......爲什麼? 如何消除這一點並獲得正確的頻率?使用MATLAB的信號處理
0
A
回答
1
首先使用低通濾波器修剪掉一些高次諧波。如果您正在嘗試處理的鋼琴錄音錄製在3個八度範圍內,那應該會有很大幫助。
接下來,嘗試調整您的波幅。以下是一篇文章,討論諧波失真如何降低信號,以及如何交換信噪比以消除諧波失真。
http://www.mathworks.com/help/signal/examples/analyzing-harmonic-distortion.html
如果你想要更多的無信號濾波的家庭建造的解決方案,這是我想嘗試,假設最大信號幅度相當於要麼根本,二次諧波或三次諧波 1 )找到最大信號的頻率f 2)如果f/2或f/3處的信號遠大於本底噪聲,則稱該頻率爲基本值
或者, 1)找到頻率f最大信號 2)在區間[f/2,2 * f]上面搜索並找到峯值neare st f。 3)假設f和最接近的峯值之間的差值是基頻1。
您需要將這些方法適用於您的數據。 確保您的數據不僅表現出奇數次諧波或具有非常強的高次諧波。如果同時播放多個音符,這些方法將無法正常工作。
您也可以嘗試更正您的數據以獲取人耳敏感度,因爲這可能是FFT的二次諧波比耳朵檢測到的基頻相對更大的原因。見http://en.wikipedia.org/wiki/Absolute_threshold_of_hearing
相關問題
- 1. 在Matlab中的數字信號處理
- 2. matlab中的音頻信號處理
- 3. 使用gdb處理信號
- 4. Matlab的信號處理教程:信號重採樣
- 5. 使用pwelch來處理一組信號:一些問題(Matlab)
- 6. 信號處理
- 7. 使用GPU的實時信號處理
- 8. SIGCHLD信號處理
- 9. MPI信號處理
- 10. 如何使用信號處理?
- 11. 使用Auto和Lambda來處理信號?
- 12. Matlab的:信號
- 13. C:信號處理和信號燈
- 14. Windows上的信號處理
- 15. UNIX中的信號處理
- 16. C++中的信號處理
- 17. Go中的信號處理
- 18. Unix中的信號處理
- 19. Android的信號處理
- 20. Windows中的信號處理
- 21. Matlab的 - 使用原料轉化率,而不是過濾處理信號
- 22. 用於信號處理的C++庫
- 23. 從信號Matlab的
- 24. SIGKILL信號處理程序
- 25. 如何處理SIGABRT信號?
- 26. 處理同步信號
- 27. 讀信號處理程序
- 28. PyQt QPushButton信號處理
- 29. 信號處理量化
- 30. Erlang Linux信號處理