J'essaie de rechercher et de trouver la meilleure façon d'attaquer ce problème. Il chevauche le traitement de la musique, le traitement de l'image et le traitement du signal, et il existe donc une myriade de façons de le voir. Je voulais me renseigner sur les meilleures façons de l'aborder, car ce qui peut sembler complexe dans le domaine sig-proc pur peut être simple (et déjà résolu) par des gens qui font du traitement d'image ou de musique. Quoi qu'il en soit, le problème est le suivant:
Si vous pardonnez à ma main de dessiner le problème, nous pouvons voir ce qui suit:
Le problème est de savoir comment aborder ce problème, de telle sorte que je puisse écrire un classificateur qui puisse faire la distinction entre signal-1, signal-2 et signal-3. Autrement dit, si vous lui fournissez l'un des signaux, il devrait pouvoir vous dire que ce signal est tel ou tel. Quel meilleur classificateur me donnerait une matrice de confusion diagonale?
Un contexte supplémentaire et ce à quoi j'ai pensé jusqu'à présent:
Comme je l'ai dit, cela chevauche un certain nombre de domaines. Je voulais savoir quelles méthodologies pourraient déjà exister avant de m'asseoir et de partir en guerre avec cela. Je ne veux pas réinventer la roue par inadvertance. Voici quelques réflexions que j'ai eues à partir de différents points de vue.
Point de vue du traitement du signal: Une chose que j'ai regardée était de faire une analyse cepstrale , puis d'utiliser éventuellement la bande passante de Gabor du cepstrum pour distinguer le signal-3 des 2 autres, puis mesurer le pic le plus élevé du cepstrum pour discriminer le signal- 1 du signal-2. C'est ma solution de travail actuelle de traitement du signal.
Point de vue du traitement de l'image: ici, je pense puisque je peux en fait créer des images face aux spectrogrammes, peut-être puis-je tirer parti de quelque chose de ce domaine? Je ne connais pas intimement cette partie, mais qu'en est-il de détecter une `` ligne '' en utilisant la transformation de Hough , puis de `` compter '' les lignes (et si ce ne sont pas des lignes et des taches?) Et de partir de là? Bien sûr, à tout moment où je prends un spectrogramme, toutes les impulsions que vous voyez peuvent être décalées le long de l'axe du temps, alors est-ce important? Pas certain...
Point de vue du traitement de la musique: Un sous-ensemble du traitement du signal, bien sûr, mais il me semble que le signal-1 a une certaine qualité, peut-être répétitive (musicale?), Que les gens du music-proc voient tout le temps et ont déjà résolu dans peut-être des instruments discriminatoires? Pas sûr, mais l'idée m'est venue à l'esprit. Peut-être que ce point de vue est la meilleure façon de voir les choses, en prenant une partie du domaine temporel et en taquinant ces taux progressifs? Encore une fois, ce n'est pas mon domaine, mais je soupçonne fortement que c'est quelque chose qui a été vu auparavant ... peut-on considérer les 3 signaux comme différents types d'instruments de musique?
Je dois également ajouter que j'ai une quantité décente de données d'entraînement, donc peut-être que l'utilisation de certaines de ces méthodes pourrait me permettre de faire une extraction de fonctionnalités avec laquelle je peux ensuite utiliser K-Nearest Neighbour , mais c'est juste une pensée.
Quoi qu'il en soit, c'est ma position actuelle, toute aide est appréciée.
Merci!
MODIFICATIONS BASÉES SUR DES COMMENTAIRES:
Les taux de répétition des impulsions et les longueurs d'impulsions des trois classes de signaux sont également tous connus à l'avance. (Encore une fois une certaine variance mais très peu). Quelques mises en garde cependant, les taux de répétition des impulsions et les longueurs d'impulsion des signaux 1 et 2 sont toujours connus, mais ils constituent une plage. Heureusement cependant, ces plages ne se chevauchent pas du tout.
L'entrée est une série temporelle continue qui arrive en temps réel, mais nous pouvons supposer que les signaux 1, 2 et 3 s'excluent mutuellement, en ce sens qu'il n'en existe qu'un seul à un moment donné. Nous avons également beaucoup de flexibilité sur la quantité de temps que vous prenez à traiter à tout moment.
Réponses:
Étape 1
Étape 2
Pour chaque trame STFT, calculez la fréquence fondamentale dominante en utilisant quelque chose comme YIN, avec un indicateur de "confiance en hauteur", comme la profondeur du "dip" DMF calculé par YIN.
Étape 3
Extrayez les fonctionnalités suivantes:
Calculez ces 3 fonctionnalités sur vos données d'entraînement et entraînez un classificateur bayésien naïf (juste un tas de distributions gaussiennes). Selon la qualité de vos données, vous pouvez même vous en sortir avec des classificateurs et utiliser des seuils définis à la main sur les fonctionnalités, bien que je ne le recommande pas.
Étape 4
Si vos données et classificateur sont bons, vous verrez quelque chose comme ceci:
1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3
Cela délimite assez bien l'heure de début et de fin, et le type de chaque signal.
Si vos données sont bruyantes, il doit y avoir des trames erronées et mal classées:
1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 2, 3, 2, 2, 1, 1, 1, 3, 1, 1, 1, 3, 3, 3, 2, 3, 3, 3
Si vous voyez beaucoup de merde comme dans le deuxième cas, utilisez un filtre de mode sur les données sur des quartiers de 3 ou 5 détections; ou utilisez des HMM.
Message à emporter
Ce sur quoi vous souhaitez baser votre détection n'est pas une caractéristique spectrale, mais des statistiques temporelles agrégées de caractéristiques spectrales sur des fenêtres qui sont à la même échelle que la durée de vos signaux. Ce problème nécessite vraiment un traitement sur deux échelles de temps: la trame STFT sur laquelle vous calculez des propriétés de signal très locales (amplitude, hauteur dominante, force de hauteur), et des fenêtres plus grandes sur lesquelles vous jetez un œil à la variabilité temporelle de ces propriétés de signal.
la source
Une approche alternative pourrait être quatre détecteurs hétérodynes: Multipliez le signal d'entrée avec un oscillateur local de 4 fréquences et filtre passe-bas les sorties résultantes. Chaque sortie représente une ligne verticale dans votre image. Vous obtenez la sortie à chacune des 4 fréquences en fonction du temps. Avec le filtre passe-bas, vous pouvez définir la déviation de fréquence que vous souhaitez autoriser et également la vitesse à laquelle vous souhaitez que les sorties changent, c'est-à-dire la netteté des bords.
Cela fonctionnera bien même si le signal est assez bruyant.
la source