我正在尝试使用音频文件(钢琴录音)进行一些信号处理,我找到了音符的起始点,然后对每个起始点执行 FFT。但是我发现对于某些音符,它们的二次谐波的振幅比他的基音要大得多……为什么会这样???我怎样才能消除这个并获得正确的频率?
问问题
643 次
1 回答
1
首先使用低通滤波器去除一些高次谐波。如果您尝试处理的钢琴录音是在 3 个八度范围内录制的,那应该会有很大帮助。
接下来,尝试调整您的波幅。这是一篇讨论谐波失真如何降低信号质量的文章,以及如何用信噪比交换谐波失真。
http://www.mathworks.com/help/signal/examples/analyzing-harmonic-distortion.html
如果您想要更多没有信号过滤的自制解决方案,这就是我要尝试的方法,假设最大信号幅度对应于基波、2 次谐波或 3 次谐波 1) 找到最大信号的频率 f 2 ) 如果 f/2 或 f/3 处的信号远大于本底噪声,则将该频率称为基频
或者, 1) 找到最大信号的频率 f 2) 在区间 [f/2, 2*f] 中搜索以上并找到最接近 f 的峰值。3) 假设 f 与最近峰值之间的差值为 1 基频。
您需要使这些方法适应您的数据。确保您的数据不只显示奇次谐波或具有非常强的高次谐波。如果同时播放多个音符,这些方法将无法正常工作。
您还可以尝试针对人耳灵敏度校正数据,因为这可能是 FFT 上的二次谐波比人耳检测到的相对于基波更大的原因。见http://en.wikipedia.org/wiki/Absolute_threshold_of_hearing
于 2013-10-01T09:14:50.513 回答