我正在尝试使用 ANN 来检测音符的音高。该网络是一个简单的两层 MLP,其输入基本上是 DFT(平均和对数分布),12 个输出对应于特定八度音阶的 12 个音符。
该网络使用某些乐器演奏的这 12 个音符的几个样本(一次一个音符)和几个“沉默”样本进行训练。
结果实际上是好的。该网络能够准确地检测出不同乐器演奏的那些音符,它对噪音的影响比较小,甚至在播放歌曲时也不会完全失去理智。
然而,目标是能够检测和弦声音。这样当两个或多个音符一起演奏时,两个相应的神经元就会被激发。令人惊讶的是,该网络实际上已经在某种程度上做到了这一点(仅在单音样本上进行训练),但与单音音符相比,一致性和准确性更低。我的问题是如何增强它识别复音的能力?
问题是我并不真正理解为什么它实际上已经起作用了。不同的音符(或它们的 DFT)基本上是空间中训练网络的不同点。所以我明白为什么它确实识别出相似的声音(附近的点),但不明白它如何“总结”音符组合的输出(与每个训练示例形成一个遥远的点)。与在 (0,0) (0,1) (1,0) = (0) 上训练的 AND 网络相同,预计不会“得出” (1,1) = (1) 的结论。
对此的蛮力方法是用尽可能多的复音样本来训练网络。然而,由于网络似乎以某种方式模糊地从单声道样本中掌握了这个想法,所以这里可能有更基本的东西。
任何指针?(对不起长度,顺便说一句:)。