Considere las 4 siguientes señales 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 las señales 1 y 2 se parecen y las señales 3 y 4 se parecen.
Estoy buscando un algoritmo que tome como entrada n señales y las divida en m grupos, donde las señales dentro de cada grupo son similares.
El primer paso en dicho algoritmo generalmente sería calcular un vector de características para cada señal: .
Como ejemplo, podríamos definir que el vector de características sea: [ancho, máximo, máximo-mínimo]. En cuyo caso obtendríamos los siguientes vectores de características:
Lo importante al decidir sobre un vector de características es que las señales similares obtienen vectores de características que están cerca uno del otro y las señales diferentes obtienen vectores de características que están muy separados.
En el ejemplo anterior obtenemos:
Por lo tanto, podríamos concluir que la señal 2 es mucho más similar a la señal 1 que la señal 3.
Como vector de características también podría usar los términos de la transformada discreta del coseno de la señal. La siguiente figura muestra las señales junto con la aproximación de las señales por los primeros 5 términos de la transformada discreta del coseno:

Los coeficientes discretos del coseno en este caso son:
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]
En este caso obtenemos:
La relación no es tan grande como para el vector de características más simple anterior. ¿Significa esto que el vector de características más simple es mejor?
Hasta ahora solo he mostrado 2 formas de onda. La siguiente gráfica muestra algunas otras formas de onda que serían la entrada a dicho algoritmo. Se extraería una señal de cada pico en este gráfico, comenzando en el minuto más cercano a la izquierda del pico y deteniéndose en el minuto más cercano a la derecha del pico:
Por ejemplo, la señal 3 se extrajo de este gráfico entre las muestras 217 y 234. La señal 4 se extrajo de otro gráfico.
En caso de que tengas curiosidad; cada parcela corresponde a mediciones de sonido por micrófonos en diferentes posiciones en el espacio. Cada micrófono recibe las mismas señales, pero las señales cambian ligeramente en el tiempo y se distorsionan de un micrófono a otro.
Los vectores de características podrían enviarse a un algoritmo de agrupamiento como k-means que agruparía las señales con vectores de características cercanas entre sí.
¿Alguno de ustedes tiene alguna experiencia / consejo sobre el diseño de un vector de características que sería bueno para discriminar las señales de forma de onda?
Además, ¿qué algoritmo de agrupamiento usarías?
Gracias de antemano por cualquier respuesta!

Respuestas:
¿Desea solo criterios objetivos para separar las señales o es importante que tengan algún tipo de similitud cuando alguien las escucha? Eso, por supuesto, debería restringirlo a señales un poco más largas (más de 1000 muestras).
fuente