Considera i 4 seguenti segnali di forma d'onda:
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]
Notiamo che i segnali 1 e 2 sembrano simili e che i segnali 3 e 4 sembrano simili.
Sto cercando un algoritmo che prenda come input n segnali e li divida in m gruppi, in cui i segnali all'interno di ciascun gruppo sono simili.
Il primo passo in un tale algoritmo sarebbe di solito calcolare un vettore di caratteristiche per ciascun segnale: .
Ad esempio, potremmo definire il vettore della funzione come: [larghezza, max, max-min]. Nel qual caso otterremmo i seguenti vettori di funzionalità:
La cosa importante quando si decide su un vettore di caratteristiche è che segnali simili ottengono vettori di caratteristiche che sono vicini tra loro e segnali diversi ottengono vettori di caratteristiche che sono distanti.
Nell'esempio sopra otteniamo:
Potremmo quindi concludere che il segnale 2 è molto più simile al segnale 1 rispetto al segnale 3.
Come vettore caratteristica potrei anche usare i termini della trasformata discreta del coseno del segnale. La figura seguente mostra i segnali insieme all'approssimazione dei segnali con i primi 5 termini della trasformata discreta del coseno:
I coefficienti di coseno discreti in questo caso sono:
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]
In questo caso otteniamo:
Il rapporto non è abbastanza grande come per il vettore di funzionalità più semplice sopra. Questo significa che il vettore di funzionalità più semplice è migliore?
Finora ho mostrato solo 2 forme d'onda. Il diagramma seguente mostra alcune altre forme d'onda che sarebbero l'input per un tale algoritmo. Un segnale verrebbe estratto da ciascun picco in questo diagramma, iniziando dal minimo più vicino alla sinistra del picco e fermandosi al minimo più vicino alla destra del picco:
Ad esempio, Signal3 è stato estratto da questo diagramma tra il campione 217 e 234. Signal4 è stato estratto da un altro diagramma.
Nel caso tu sia curioso; ciascuna di queste trame corrisponde a misurazioni del suono tramite microfoni in diverse posizioni nello spazio. Ogni microfono riceve gli stessi segnali ma i segnali sono leggermente spostati nel tempo e distorti da microfono a microfono.
I vettori di funzionalità potrebbero essere inviati a un algoritmo di clustering come k-medie che raggrupperebbe i segnali con vettori di funzionalità vicini l'uno all'altro.
Qualcuno di voi ha qualche esperienza / consiglio sulla progettazione di un vettore di caratteristiche che sarebbe efficace nel discriminare i segnali delle forme d'onda?
Inoltre quale algoritmo di clustering useresti?
Grazie in anticipo per eventuali risposte!