Question

Je suis en train d'utiliser ANN pour la détection de pas de notes musicales. Le réseau est un simple MLP à deux couches, dont les entrées sont essentiellement une DFT (moyenne et distribué de manière logarithmique), et 12 sorties correspondant aux 12 notes d'une octave particulier.

Le réseau est formé avec plusieurs échantillons de ces 12 notes jouées par un instrument (une note à la fois), et quelques exemples de « silence ».

Les résultats sont en fait bien. Le réseau est en mesure de détecter les notes jouées par différents instruments preety avec précision, il est relativement amune au bruit, et même ne lâche pas complètement quand est sanety en cours de lecture d'une chanson.

Le but, cependant, est de pouvoir détecter son polyphonique. Alors que quand on a joué deux ou plusieurs notes, les deux neurones correspondant se déclenche. La chose surprenante est que le réseau ne fait déjà dans une certaine mesure (en cours de formation sur des échantillons monophoniques seulement), mais moins cohérente et moins de précision que pour les notes monophoniques. Ma question est de savoir comment puis-je améliorer sa capacité à reconnaître son polyphnic?

Le problème est que je ne comprends pas pourquoi cela fonctionne vraiment en fait déjà. Les différentes notes (ou leurs TFD) sont fondamentalement différents points dans l'espace pour lequel le réseau est formé. Je vois donc pourquoi il ne reconnaît sons similiar (points à proximité), mais pas la façon dont il « conclut » la sortie pour une combinaison de notes (qui forment un point éloigné de chacun des exemples de formation). De la même façon un réseau et qui est formé sur (0,0) (0,1) (1,0) = (0), ne devrait pas "conclure" que (1,1) = (1).

La aprroach force brute à cela est de former le réseau avec autant d'échantillons polyphoniques possible. Cependant, étant donné que le réseau semble en quelque sorte vaguement saisir l'idée à partir des échantillons monophoniques, il y a probablement quelque chose de plus fundemential ici.

Les pointeurs? (Désolé pour la longueur, BTW:).

Était-ce utile?

La solution

La raison pour laquelle cela fonctionne est probablement déjà tout simplement que vous ne vous entraînez pas à choisir une et une seule sortie (au moins je suppose que vous ne l'avez pas). Dans le cas simple lorsque la sortie est juste un produit de point de l'entrée et les poids, les poids deviendraient filtres adaptés pour le pas correspondant. Puisque tout est linéaire, plusieurs sorties obtiendraient simultanément activés si plusieurs filtres adaptés en même temps vu de bons matchs (comme cela est le cas pour les notes polyphoniques). Étant donné que votre réseau inclut probablement non-linéarités, l'image est un peu plus complexe, mais l'idée est probablement le même.

En ce qui concerne les moyens de l'améliorer, la formation avec des échantillons polyphoniques est certainement une possibilité. Une autre possibilité est de passer à un filtre linéaire. Le DFT d'un son polyphonique est essentiellement la somme de TFD de chaque son. Vous voulez une combinaison linéaire d'entrées pour devenir une combinaison linéaire correspondante de sorties, donc un filtre linéaire est approprié.

Soit dit en passant, pourquoi utilisez-vous un réseau de neurones pour ce en premier lieu? Il semble que juste regarder le DFT et, par exemple, en prenant la fréquence maximale vous donnera de meilleurs résultats plus facilement.

Autres conseils

Anssi Klapuri est un chercheur audio respecté qui a publié une méthode pour effectuer une détection de pas sur les enregistrements polyphoniques en utilisant les réseaux de neurones.

Vous pouvez comparer la méthode de Klapuri à la vôtre. Il est décrit en détail dans la thèse de son maître, Traitement du signal Méthodes de transcription automatique de la musique . Vous trouverez ses nombreux articles en ligne, ou acheter son livre qui explique son algorithme et les résultats des tests. La thèse de son maître est lié ci-dessous.

https://www.cs.tut.fi /sgn/arg/klap/phd/klap_phd.pdf

Détection Pas sur des enregistrements polyphoniques est un sujet très difficile et contient de nombreuses controverses - être prêt à faire beaucoup de lecture. Le lien ci-dessous contient une autre approche de la détection des hauteurs sur les enregistrements polyphoniques que je développé pour une application gratuite appelée PitchScope joueur . Mon C ++ code source est disponible sur GitHub.com et est référencé dans le lien ci-dessous. Une version exécutable libre de PitchScope joueur est également disponible sur le Web et fonctionne sous Windows.

détection de pas en temps réel

I expérimenté avec une évolution CTRNN (Réseau neuronal récurrent temps continu) sur la détection de la différence entre les 2 ondes sinusoïdales. J'ai eu un succès modéré, mais n'a jamais eu le temps de suivre avec une banque de ces neurones (par exemple dans des bandes similaires à la cochlée).

Une approche possible serait d'employer de programmation génétique (GP), pour générer de courts extraits du code qui détecte la hauteur. De cette façon, vous seriez en mesure de générer une règle de la façon dont la détection de tangage fonctionne, qui nous l'espérons être lisible par l'homme.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top