Considere os 4 seguintes sinais de forma de 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]
Notamos que os sinais 1 e 2 são parecidos e que os sinais 3 e 4 são parecidos.
Estou procurando um algoritmo que tome como entrada n sinais e os divida em m grupos, onde os sinais dentro de cada grupo são semelhantes.
O primeiro passo desse algoritmo seria geralmente calcular um vetor de característica para cada sinal: .
Como exemplo, podemos definir o vetor de recurso como: [width, max, max-min]. Nesse caso, obteríamos os seguintes vetores de recursos:
O importante ao decidir sobre um vetor de característica é que sinais semelhantes obtêm vetores de características próximos uns dos outros e sinais diferentes obtêm vetores de características distantes.
No exemplo acima, obtemos:
Portanto, podemos concluir que o sinal 2 é muito mais semelhante ao sinal 1 do que o sinal 3.
Como vetor característica, eu também poderia usar os termos da transformação discreta de cosseno do sinal. A figura abaixo mostra os sinais, juntamente com a aproximação dos sinais pelos 5 primeiros termos da transformação discreta de cosseno:
Os coeficientes discretos de cosseno neste caso são:
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]
Nesse caso, obtemos:
A proporção não é tão grande quanto ao vetor de características mais simples acima. Isso significa que o vetor de recurso mais simples é melhor?
Até agora, eu mostrei apenas 2 formas de onda. O gráfico abaixo mostra algumas outras formas de onda que seriam a entrada para esse algoritmo. Um sinal seria extraído de cada pico neste gráfico, começando no minuto mais próximo à esquerda do pico e parando no minuto mais próximo à direita do pico:
Por exemplo, o sinal3 foi extraído deste gráfico entre a amostra 217 e 234. O sinal4 foi extraído de outro gráfico.
Caso você esteja curioso; cada gráfico corresponde a medições sonoras por microfones em diferentes posições no espaço. Cada microfone recebe os mesmos sinais, mas os sinais são levemente alterados no tempo e distorcidos de microfone para microfone.
Os vetores de características poderiam ser enviados para um algoritmo de agrupamento, como k-means, que agruparia os sinais com vetores de características próximos um do outro.
Algum de vocês tem alguma experiência / conselho sobre o design de um vetor de característica que seria bom em discriminar sinais de forma de onda?
Além disso, qual algoritmo de cluster você usaria?
Agradeço antecipadamente por todas as respostas!