有什么好的数字信号处理算法可以很好地处理吉他和弦?由于快速傅立叶变换我认为只有在吉他上弹奏的单个音符上才是准确的,而不是同时弹奏的音符(即和弦)。
谢谢!
有什么好的数字信号处理算法可以很好地处理吉他和弦?由于快速傅立叶变换我认为只有在吉他上弹奏的单个音符上才是准确的,而不是同时弹奏的音符(即和弦)。
谢谢!
简短的回答是,您需要的不仅仅是一种算法。好的和弦识别方法可以更恰当地描述为“系统”,但通常它们确实基于到频域的初始变换(最常见的是 DFT)。
如果您想要类似于此的歌曲的和弦表示
C G Am F7 F6 C ...
那么这实际上是一个与识别一段音频中的音符略有不同的问题。其实有两个问题(粗略地说):
事实证明,从时域(正常音频)转换到频域(频谱表示)的方式的重要性有限。之后做什么非常重要,并且通常使用复杂的概率模型(类似于语音识别中的模型:HMM、DBN 等)来解决这个问题。
试试谷歌学者的“和弦转录”,或“和弦检测”,或“和弦标记”,在该领域进行高级研究。
这些方法中的大多数使用离散傅里叶变换 (DFT) 来创建初始频谱图。在进一步的处理过程中,它们也往往略有不同,尽管已经使用了不同的时间序列平滑技术:隐马尔可夫模型、动态贝叶斯网络、支持向量机 (SVMstruct) 和条件随机场等。最先进的转录器使用自动调音、键信息、低音音符信息和公制位置信息来改进结果。我的论文(第 2 章)给出了一个很好的概述。
开源和弦检测算法:
希望这可以帮助。
有一些相当成功的工具使用 DFT (FFT),但它们在计算 DFT 后会进行大量处理。
尝试此链接以获取当前最先进的摘要,或使用谷歌“Chordino”或“Chordata”获取开源和弦提取算法。
好吧,您可以尝试另一组频域算法,例如小波。但我不确定这是否会解决您的准确性问题。实际上,我不明白您在使用 FFT 时遇到了什么问题。它始终是和弦的近似值,没有完美的方法来检索那种关于声音的信息。
因此,这取决于您对该频谱进行的分析,对于单音符,实际上有很多比 FFT 更好的算法,但是对于和弦,您很可能必须使用 FFT。
您必须处理的问题是将基本谐波与高次谐波分开,可能有帮助的一件事是只考虑吉他范围内的频率。如果您只需要处理吉他声音,您应该花一些时间研究吉他的正常频域图,并尝试使用它来提高您的准确性。
如果您正确设置软件,FFT 可以而且会给您所有的单音。FFT 的全部意义在于区分色调,或者如果您是天体物理学家,您想知道来自恒星的光中的单个元素(硫、氢......)。
谐波不是问题,因为它们的“功率”低于基频,例如 C=440hz,但 C=880hz 也是如此,但 880 将是 FFT 结果中较小的尖峰。