有没有一种适用于吉他和弦的良好数字信号处理算法?因为我认为快速傅里叶变换只对吉他演奏的单音准确,而对同时演奏的音符(例如和弦)不准确。
谢谢!
有没有一种适用于吉他和弦的良好数字信号处理算法?因为我认为快速傅里叶变换只对吉他演奏的单音准确,而对同时演奏的音符(例如和弦)不准确。
谢谢!
C G Am F7 F6 C ...
实际上这是一个与识别音频片段中的音符略有不同的问题。实际上,有两个问题(粗略地说):
事实证明,从时间域(正常音频)转换为频率域(光谱表示)的方式仅具有有限的重要性。重要的是你之后所做的事情,并且通常使用复杂的概率模型(类似于语音识别中的HMMs、DBNs等)来解决这个问题。
尝试在Google Scholar上搜索“chord transcription”、“chord detection”或“chord labelling”以获取该领域的先进研究成果。
大多数这些方法使用离散傅里叶变换(DFT)创建初始谱图。在进一步处理期间,它们往往只稍微有所不同,尽管使用了不同的时间序列平滑技术:隐马尔可夫模型、动态贝叶斯网络、支持向量机(SVMstruct)和条件随机场等。最先进的转录器使用自动调音、键信息、低音音符信息和度量位置的信息来改善结果。我的论文(第2章)提供了一个很好的概述。
开源弦绘制算法:
希望这能帮到你。
有一些使用DFT(FFT)的工具相对成功,但是它们在计算DFT后需要进行大量处理。
尝试这个链接来了解当前技术发展现状的概述,或者搜索“Chordino”或“Chordata”以获取开源和弦提取算法。
你可以尝试使用另一组基于频域的算法,例如小波变换。但我不确定这是否能解决你的准确性问题。实际上,我不明白你在什么方面遇到了FFT的困难。它总是对和弦进行近似处理,没有完美的方法来检索声音的这种信息。
因此,这取决于你对谱图进行的分析。对于单个音符,实际上有很多比FFT更好的算法,但是对于和弦,你很可能不得不使用FFT。
你将要处理的问题是将基本谐波与上部谐波分离开来,一个可能有用的方法是只考虑吉他范围内的频率。 如果你只需要处理吉他声音,应该花些时间研究吉他的正常频域图,并尝试使用它来提高你的准确性。