Main Content

Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

dtw

Distancia entre señales mediante deformación dinámica del tiempo

Descripción

ejemplo

dist = dtw(x,y) estira dos vectores, y, en un conjunto común de instantes de tal manera que, la suma de las distancias euclidianas entre los puntos correspondientes, es más pequeña.xydist Para estirar las entradas, repite cada elemento de y tantas veces como sea necesario.dtwxy Si y son matrices, entonces las estira repitiendo sus columnas.xydist En ese caso, y debe tener el mismo número de filas.xy

ejemplo

[dist,ix,iy] = dtw(x,y) devuelve el conjunto común de instantes, o , de modo que ( ) y ( ) tengan el menor posible entre ellos.trayectoria de deformaciónxixyiydist

Los vectores y tienen la misma longitud.ixiy Cada uno contiene una secuencia de aumento monótona en la que los índices de los elementos de la señal correspondiente, o , se repiten el número necesario de veces.xy

Cuándo y son matrices, y son tales que y están mínimamente separados.xyixiyx(:,ix)y(:,iy)

ejemplo

[___] = dtw(x,y,maxsamp) restringe la trayectoria de deformación para estar dentro de las muestras de un ajuste en línea recta entre y .maxsampxy Esta sintaxis devuelve cualquiera de los argumentos de salida de las sintaxis anteriores.

ejemplo

[___] = dtw(___,metric) especifica la métrica de distancia que se utilizará además de cualquiera de los argumentos de entrada de las sintaxis anteriores.

ejemplo

dtw(___) sin argumentos de salida traza las señales originales y alineadas.

  • Si las señales son vectores reales, la función muestra las dos señales originales en una subtrama y las señales alineadas en una subtrama por debajo de la primera.

  • Si las señales son vectores complejos, la función muestra las señales originales y alineadas en trazados tridimensionales.

  • Si las señales son matrices reales, la función utiliza para mostrar las señales originales y alineadas.imagesc

  • Si las señales son matrices complejas, la función traza sus partes reales e imaginarias en la mitad superior e inferior de cada imagen.

Ejemplos

contraer todo

Genera dos señales reales: un chirrido y un sinusoides.

x = cos(2*pi*(3*(1:1000)/1000).^2); y = cos(2*pi*9*(1:399)/400);

Utilice la deformación dinámica del tiempo para alinear las señales de modo que la suma de las distancias euclidianas entre sus puntos sea más pequeña. Visualice las señales alineadas y la distancia.

dtw(x,y);

Cambie la frecuencia sinusoides al doble de su valor inicial. Repita el cálculo.

y = cos(2*pi*18*(1:399)/400);  dtw(x,y);

Añade una parte imaginaria a cada señal. Restaure la frecuencia sinusoides inicial. Utilice la deformación dinámica del tiempo para alinear las señales minimizando la suma de distancias euclidianas cuadradas.

x = exp(2i*pi*(3*(1:1000)/1000).^2); y = exp(2i*pi*9*(1:399)/400);  dtw(x,y,'squared');

Diseñar un tipo de letra que se asemeja a la salida de los primeros ordenadores. Utilícelo para escribir la palabra MATLAB®.

chr = @(x)dec2bin(x')-48;  M = chr([34 34 54 42 34 34 34]); A = chr([08 20 34 34 62 34 34]); T = chr([62 08 08 08 08 08 08]); L = chr([32 32 32 32 32 32 62]); B = chr([60 34 34 60 34 34 60]);  MATLAB = [M A T L A B];

Corromper la palabra repitiendo columnas aleatorias de las letras y variando el espaciado. Muestre la palabra original y tres versiones dañadas. Restablezca el generador de números aleatorios para obtener resultados reproducibles.

rng('default')  c = @(x)x(:,sort([1:6 randi(6,1,3)]));  subplot(4,1,1,'XLim',[0 60]) spy(MATLAB) xlabel('') ylabel('Original')  for kj = 2:4     subplot(4,1,kj,'XLim',[0 60])     spy([c(M) c(A) c(T) c(L) c(A) c(B)])     xlabel('')     ylabel('Corrupted') end

Genere dos versiones más dañadas de la palabra. Alinee con la deformación dinámica del tiempo.

one = [c(M) c(A) c(T) c(L) c(A) c(B)]; two = [c(M) c(A) c(T) c(L) c(A) c(B)];  [ds,ix,iy] = dtw(one,two);  onewarp = one(:,ix); twowarp = two(:,iy);

Muestre las palabras no alineadas y alineadas.

figure  subplot(4,1,1) spy(one) xlabel('') ylabel('one')  subplot(4,1,2) spy(two,'r') xlabel('') ylabel('two')  subplot(4,1,3) spy(onewarp) xlabel('') ylabel('onewarp')  subplot(4,1,4) spy(twowarp,'r') xlabel('') ylabel('twowarp')

Repita el cálculo utilizando la funcionalidad integrada de .dtw

dtw(one,two);

Generar dos señales que consisten en dos picos distintos separados por valles de diferentes longitudes. Traza las señales.

x1 = [0 1 0 0 0 0 0 0 0 0 0 1 0]*.95; x2 = [0 1 0 1 0]*.95;  subplot(2,1,1) plot(x1) xl = xlim; subplot(2,1,2) plot(x2) xlim(xl)

Alinee las señales sin restricciones en la trayectoria de deformación. Para producir una alineación perfecta, la función necesita repetir sólo una muestra de la señal más corta.

figure dtw(x1,x2);

Trazar la trayectoria de deformación y el ajuste en línea recta entre las dos señales. Para lograr la alineación, la función expande la vaguada entre los picos generosamente.

[d,i1,i2] = dtw(x1,x2);  figure plot(i1,i2,'o-',[i1(1) i1(end)],[i2(1) i2(end)])

Repita el cálculo, pero ahora restrinja la ruta de deformación para desviar como máximo tres elementos del ajuste en línea recta. Trazar las señales estiradas y la trayectoria de deformación.

[dc,i1c,i2c] = dtw(x1,x2,3);  subplot(2,1,1) plot([x1(i1c);x2(i2c)]','.-') title(['Distance: ' num2str(dc)]) subplot(2,1,2) plot(i1c,i2c,'o-',[i1(1) i1(end)],[i2(1) i2(end)])

La restricción impide que la deformación se concentre demasiado en un pequeño subconjunto de muestras, a expensas de la calidad de alineación. Repita el cálculo con una restricción de una muestra.

dtw(x1,x2,1);

Cargue una señal de voz muestreada en

<math display="block">
<mrow>
<msub>
<mrow>
<mi>F</mi>
</mrow>
<mrow>
<mi>s</mi>
</mrow>
</msub>
<mo>=</mo>
<mn>7</mn>
<mn>4</mn>
<mn>1</mn>
<mn>8</mn>
<mspace width="0.2777777777777778em"></mspace>
<mstyle mathvariant="normal">
<mrow>
<mi>H</mi>
<mi>z</mi>
</mrow>
</mstyle>
</mrow>
</math>
. El archivo contiene una grabación de una voz femenina que dice la palabra "MATLAB®."

load mtlb  % To hear, type soundsc(mtlb,Fs)

Extraiga los dos segmentos que corresponden a las dos instancias del foneme /o/. El primero ocurre aproximadamente entre 150 ms y 250 ms, y el segundo entre 370 ms y 450 ms. Trazar las dos formas de onda.

a1 = mtlb(round(0.15*Fs):round(0.25*Fs)); a2 = mtlb(round(0.37*Fs):round(0.45*Fs));  subplot(2,1,1) plot((0:numel(a1)-1)/Fs+0.15,a1) title('a_1') subplot(2,1,2) plot((0:numel(a2)-1)/Fs+0.37,a2) title('a_2') xlabel('Time (seconds)')

 % To hear, type soundsc(a1,Fs), pause(1), soundsc(a2,Fs)

Deformar los ejes de tiempo para que la distancia euclidiana entre las señales se minimice. Calcula la "duración" compartida de las señales deformadas y sátralas.

[d,i1,i2] = dtw(a1,a2);  a1w = a1(i1); a2w = a2(i2);  t = (0:numel(i1)-1)/Fs; duration = t(end)
duration = 0.1297 
 subplot(2,1,1) plot(t,a1w) title('a_1, Warped') subplot(2,1,2) plot(t,a2w) title('a_2, Warped') xlabel('Time (seconds)')

 % To hear, type soundsc(a1w,Fs), pause(1), sound(a2w,Fs)

Repita el experimento con una palabra completa. Cargue un archivo que contenga la palabra "fuerte", pronunciada por una mujer y por un hombre. Las señales se muestrean a 8 kHz.

load(fullfile(matlabroot,'examples','signal','strong.mat'))  % To hear, type soundsc(her,fs), pause(2), soundsc(him,fs)

Deformar los ejes de tiempo para minimizar la distancia absoluta entre las señales. Trazar las señales originales y transformadas. Calcula su "duración" deformada compartida.

dtw(her,him,'absolute'); legend('her','him')

 [d,iher,ihim] = dtw(her,him,'absolute'); duration = numel(iher)/fs
duration = 0.8394 
 % To hear, type soundsc(her(iher),fs), pause(2), soundsc(him(ihim),fs)

Los archivos y contienen dos muestras manuscritas de la palabra "MATLAB®."MATLAB1.gifMATLAB2.gif Cargue los archivos y alinee los a lo largo del eje utilizando la deformación dinámica del tiempo.x

samp1 = fullfile(matlabroot,'examples','signal','MATLAB1.gif'); samp2 = fullfile(matlabroot,'examples','signal','MATLAB2.gif');  x = double(imread(samp1)); y = double(imread(samp2));  dtw(x,y);

Argumentos de entrada

contraer todo

Señal de entrada, especificada como un vector o matriz real o complejo.

Tipos de datos: single | double
Soporte de números complejos:

Señal de entrada, especificada como un vector o matriz real o complejo.

Tipos de datos: single | double
Soporte de números complejos:

Ancho de la ventana de ajuste, especificado como un entero positivo.

Tipos de datos: single | double

Métrica de distancia, especificada como , , , o .'euclidean''absolute''squared''symmkl' Si y son ambas señales -dimensionales, entonces prescribeXYKmetric Dmn( , ), la distancia entre la muestra y la muestra de .XYmXnY Consulte para obtener más información sobreDeformación dinámica del tiempo Dmn( , ).XY

  • — Suma de raíz de diferencias cuadradas, también conocidas como euclidianas o'euclidean' 2 Métricas:

    dmn(X,Y)=k=1K(xk,myk,n)*(xk,myk,n)

  • — Suma de diferencias absolutas, también conocida como Manhattan, la manzana de la ciudad, el taxi o'absolute' 1 Métricas:

    dmn(X,Y)=k=1K|xk,myk,n|=k=1K(xk,myk,n)*(xk,myk,n)

  • — Plaza de la métrica euclidiana, que consiste en la suma de las diferencias cuadradas:'squared'

    dmn(X,Y)=k=1K(xk,myk,n)*(xk,myk,n)

  • — Métrica simétrica de Kullback-Leibler.'symmkl' Esta métrica solo es válida para reales y positivos y:XY

    dmn(X,Y)=k=1K(xk,myk,n)(logxk,mlogyk,n)

Argumentos de salida

contraer todo

Distancia mínima entre señales, devuelta como un escalar real positivo.

Ruta de deformación para la primera señal, devuelta como vector o matriz de índices.

Ruta de deformación para la segunda señal, devuelta como vector o matriz de índices.

Más acerca de

contraer todo

Deformación dinámica del tiempo

Dos señales con características equivalentes dispuestas en el mismo orden pueden parecer muy diferentes debido a las diferencias en las duraciones de sus secciones. La deformación dinámica del tiempo distorsiona estas duraciones para que las entidades correspondientes aparezcan en la misma ubicación en un eje de tiempo común, resaltando así las similitudes entre las señales.

Considere las señales bidimensionalesK

X=[x1,1x1,2x1,Mx2,1x2,2x2,MxK,1xK,2xK,M]

Y

Y=[y1,1y1,2y1,Ny2,1y2,2y2,NyK,1yK,2yK,N],

que tienen y muestras, respectivamente.MN Dado dmn( , ), la distancia entre la muestra y la muestra de especificada en , se extiende y en un conjunto común de instantes de modo que una medida global de distancia señal-señal sea más pequeña.XYmXnYmetricdistXY

Inicialmente, la función organiza todos los valores posibles de dmn( , ) en una celosía de la formaXY

A continuación, busca un camino a través de la celosía, parametrizado por dos secuencias de la misma longitud, y —de tal manera quedistixiy

d=mixniydmn(X,Y)

es mínimo. Los caminos aceptables comienzan endist d11( , ), termina enXY dMN( , ), y son combinaciones de movimientos de "rey de ajedrez":XY

  • Movimientos verticales: (m,n) → (m + 1,n)

  • Movimientos horizontales: (m,n) → (m,n + 1)

  • Movimientos diagonales: (m,n) → (m + 1,n + 1)

Esta estructura garantiza que cualquier trayecto aceptable alinee las señales completas, no omita las muestras y no repita las características de la señal. Además, una ruta deseable se ejecuta cerca de la línea diagonal extendida entre d11( , ) yXY dMN( , ).XY Esta restricción adicional, ajustada por el argumento, garantiza que la deformación compara secciones de longitud similar y no sobreajusta las entidades atípicas.maxsamp

Este es un camino posible a través de la celosía:

No se permiten las siguientes rutas:

No alinea todas las señalesOmite muestrasSe vuelve sobre sí mismo, repitiendo una función

Referencias

[1] Sakoe, Hiroaki, and Seibi Chiba. “Dynamic Programming Algorithm Optimization for Spoken Word Recognition.” IEEE® Transactions on Acoustics, Speech, and Signal Processing. Vol. ASSP-26, No. 1, 1978, pp. 43–49.

[2] Paliwal, K. K., Anant Agarwal, and Sarvajit S. Sinha. “A Modification over Sakoe and Chiba’s Dynamic Time Warping Algorithm for Isolated Word Recognition.” Signal Processing. Vol. 4, 1982, pp. 329–333.

Consulte también

| | | |

Introducido en R2016a