Considérez les 4 signaux de forme d'onde suivants:
signal1 = [4.1880 11.5270 55.8612 110.6730 146.2967 145.4113 104.1815 60.1679 14.3949 -53.7558 -72.6384 -88.0250 -98.4607]
signal2 = [ -39.6966 44.8127 95.0896 145.4097 144.5878 95.5007 61.0545 47.2886 28.1277 -40.9720 -53.6246 -63.4821 -72.3029 -74.8313 -77.8124]
signal3 = [-225.5691 -192.8458 -145.6628 151.0867 172.0412 172.5784 164.2109 160.3817 164.5383 171.8134 178.3905 180.8994 172.1375 149.2719 -51.9629 -148.1348 -150.4799 -149.6639]
signal4 = [ -218.5187 -211.5729 -181.9739 -144.8084 127.3846 162.9755 162.6934 150.8078 145.8774 156.9846 175.2362 188.0448 189.4951 175.9540 147.4631 -89.9513 -154.1579 -151.0851]
On remarque que les signaux 1 et 2 se ressemblent et que les signaux 3 et 4 se ressemblent.
Je recherche un algorithme qui prend en entrée n signaux et les divise en m groupes, où les signaux au sein de chaque groupe sont similaires.
La première étape d'un tel algorithme serait généralement de calculer un vecteur caractéristique pour chaque signal: .
À titre d'exemple, nous pourrions définir le vecteur d'entité comme: [largeur, max, max-min]. Dans ce cas, nous obtiendrions les vecteurs de fonctionnalités suivants:
L'important pour décider d'un vecteur de caractéristiques est que des signaux similaires obtiennent des vecteurs de caractéristiques proches les uns des autres et des signaux différents des vecteurs de caractéristiques éloignés.
Dans l'exemple ci-dessus, nous obtenons:
Nous pourrions donc conclure que le signal 2 est beaucoup plus similaire au signal 1 que le signal 3.
En tant que vecteur caractéristique, je pourrais également utiliser les termes de la transformée en cosinus discrète du signal. La figure ci-dessous montre les signaux ainsi que l'approximation des signaux par les 5 premiers termes de la transformée en cosinus discrète:
Les coefficients cosinus discrets dans ce cas sont:
F1 = [94.2496 192.7706 -211.4520 -82.8782 11.2105]
F2 = [61.7481 230.3206 -114.1549 -129.2138 -65.9035]
F3 = [182.2051 18.6785 -595.3893 -46.9929 -236.3459]
F4 = [148.6924 -171.0035 -593.7428 16.8965 -223.8754]
Dans ce cas, nous obtenons:
Le rapport n'est pas tout à fait aussi grand que pour le vecteur de caractéristique plus simple ci-dessus. Est-ce à dire que le vecteur d'entités le plus simple est meilleur?
Jusqu'à présent, je n'ai montré que 2 formes d'onde. Le graphique ci-dessous montre quelques autres formes d'onde qui constitueraient l'entrée d'un tel algorithme. Un signal serait extrait de chaque pic de ce tracé, commençant à la minute la plus proche à gauche du pic et s'arrêtant à la minute la plus proche à droite du pic:
Par exemple, le signal 3 a été extrait de ce tracé entre les échantillons 217 et 234. Le signal4 a été extrait d'un autre tracé.
Au cas où vous seriez curieux; chacun de ces tracés correspond à des mesures sonores par des microphones à différentes positions dans l'espace. Chaque microphone reçoit les mêmes signaux mais les signaux sont légèrement décalés dans le temps et déformés d'un microphone à l'autre.
Les vecteurs de caractéristiques pourraient être envoyés à un algorithme de regroupement tel que k-means qui regrouperait les signaux avec des vecteurs de caractéristiques proches les uns des autres.
L'un de vous a-t-il une expérience / des conseils sur la conception d'un vecteur caractéristique qui serait bon pour distinguer les signaux de forme d'onde?
Quel algorithme de clustering utiliseriez-vous également?
Merci d'avance pour toutes les réponses!
Réponses:
Vous voulez uniquement des critères objectifs pour séparer les signaux ou est-il important qu'ils aient une sorte de similitude lorsqu'ils sont écoutés par quelqu'un? Cela devrait bien sûr vous limiter à des signaux un peu plus longs (plus de 1000 échantillons).
la source