Ich versuche, ANN für Tonhöhenerkennung von Noten zu verwenden. Das Netzwerk ist ein einfaches zweischichtiges MLP, dessen Eingänge im Grunde eine DFT (gemittelt und logarithmisch verteilt) sind, und 12 Ausgänge entsprechen den 12 Noten einer bestimmten Oktave.Tonhöhenerkennung mit neuronalen Netzen
Das Netzwerk wird mit mehreren Samples dieser 12 Noten, die von einem Instrument gespielt werden (eine Note nach der anderen), und einigen Beispielen von "Stille" trainiert.
Die Ergebnisse sind eigentlich gut. Das Netzwerk ist in der Lage, die von verschiedenen Instrumenten gespielten Noten präzise zu erkennen, es ist relativ unhörbar gegenüber Rauschen und verliert auch nicht vollständig, wenn ein Lied gespielt wird.
Das Ziel ist jedoch, polyphonen Klang zu erkennen. Wenn also zwei oder mehr Noten zusammen gespielt werden, werden die zwei entsprechenden Neuronen feuern. Das Überraschende ist, dass das Netzwerk dies tatsächlich schon zu einem gewissen Grad tut (nur über monophone Samples trainiert), jedoch weniger konsistent und weniger genau als für monophone Noten. Meine Frage ist, wie kann ich die Fähigkeit verbessern, polyphnischen Sound zu erkennen?
Das Problem ist, ich verstehe nicht wirklich, warum es eigentlich schon funktioniert. Die verschiedenen Noten (oder ihre DFTs) sind grundsätzlich unterschiedliche Punkte im Raum, für die das Netzwerk trainiert wird. Ich sehe also, warum es ähnliche Laute (nahe gelegene Punkte) erkennt, aber nicht, wie es die Ausgabe für eine Kombination von Noten "abschließt" (die einen entfernten Punkt von jedem der Trainingsbeispiele bilden). Genauso wie ein UND-Netzwerk, das über (0,0) (0,1) (1,0) = (0) trainiert wird, wird nicht erwartet, dass (1,1) = (1) "schließt".
Der Brute-Force-Ansatz besteht darin, das Netzwerk mit möglichst vielen polyphonen Samples zu trainieren. Da das Netzwerk jedoch die Idee aus den monophonen Samples irgendwie vage zu verstehen scheint, gibt es hier wahrscheinlich etwas Fundierenderes.
Irgendwelche Zeiger? (Entschuldigung für die Länge, BTW :).
einfach die maximale Frequenz nehmen ist sehr unzuverlässig – finnw