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!
Respostas:
Você quer apenas critérios objetivos para separar os sinais ou é importante que eles tenham algum tipo de semelhança quando ouvidos por alguém? É claro que isso teria que restringi-lo a sinais um pouco mais longos (mais de 1000 amostras).
fonte