dtw

Расстояние между сигналами с помощью динамической трансформации временной шкалы

Описание

пример

dist = dtw(x,y) растягивает два вектора, x и y, на общий набор мгновений, таких что dist, сумма евклидовых расстояний между соответствующими точками, наименьшая. Чтобы растянуть входы, dtw повторяет каждый элемент x и y столько раз, сколько нужно. Если x и y матрицы, тогда dist растягивает их, повторяя их столбцы. В этом случае x и y должно иметь одинаковое число строк.

пример

[dist,ix,iy] = dtw(x,y) возвращает общий набор мгновений или путь деформации, такой что x(ix) и y(iy) иметь наименьшее возможное dist между ними.

Векторы ix и iy имеют одинаковую длину. Каждый содержит монотонно увеличивающуюся последовательность, в которой индексы к элементам соответствующего сигнала, x или y, повторяются необходимое количество раз.

Когда x и y матрицы, ix и iy таковы, что x(:,ix) и y(:,iy) минимально разделены.

пример

[___] = dtw(x,y,maxsamp) ограничивает путь деформации, чтобы быть внутри maxsamp выборки прямолинейной подгонки между x и y. Этот синтаксис возвращает любой из выходных аргументов предыдущих синтаксисов.

пример

[___] = dtw(___,metric) задает метрику расстояния, которая будет использоваться в дополнение к любому из входных параметров в предыдущих синтаксисах.

пример

dtw(___) без выходных аргументов строит графики исходного и выровненного сигналов.

  • Если сигналы являются векторами действительных чисел, функция отображает два исходных сигнала на подграфике и выровненные сигналы на подграфике ниже первого.

  • Если сигналы являются комплексными векторами, функция отображает исходные и выровненные сигналы на трехмерных графиках.

  • Если сигналы являются вещественными матрицами, функция использует imagesc отображение исходных и выровненных сигналов.

  • Если сигналы являются сложными матрицами, функция строит свои действительные и мнимые части в верхней и нижней половине каждого изображения.

Примеры

свернуть все

Сгенерируйте два действительных сигнала: щебет и синусоида.

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

Используйте динамическую трансформацию временной шкалы, чтобы выровнять сигналы таким образом, чтобы сумма евклидовых расстояний между их точками была наименьшей. Отобразите выровненные сигналы и расстояние.

dtw(x,y);

Figure contains 2 axes. Axes 1 with title Original Signals contains 2 objects of type line. Axes 2 with title Aligned Signals (Euclidean Distance: 21.593428) contains 2 objects of type line.

Измените синусоидальную частоту на двукратное ее начальное значение. Повторите расчет.

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

dtw(x,y);

Figure contains 2 axes. Axes 1 with title Original Signals contains 2 objects of type line. Axes 2 with title Aligned Signals (Euclidean Distance: 169.301757) contains 2 objects of type line.

Добавьте мнимую часть к каждому сигналу. Восстановите начальную синусоидную частоту. Используйте динамическую трансформацию временной шкалы, чтобы выровнять сигналы путем минимизации суммы квадратов евклидовых расстояний.

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

dtw(x,y,'squared');

Figure contains 2 axes. Axes 1 with title Original Signals contains 2 objects of type line. Axes 2 with title Aligned Signals (Squared Euclidean Distance: 2.113124) contains 2 objects of type line.

Создайте шрифт, напоминающий выход ранних компьютеров. Используйте его, чтобы написать слово 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];

Повреждение слова путем повторения случайных столбцов букв и изменения интервала. Отображение исходного слова и трех поврежденных версий. Сбросьте генератор случайных чисел для воспроизводимых результатов.

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

Figure contains 4 axes. Axes 1 contains an object of type line. Axes 2 contains an object of type line. Axes 3 contains an object of type line. Axes 4 contains an object of type line.

Сгенерируйте еще две поврежденные версии слова. Выровняйте их с помощью динамической трансформации временной шкалы.

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);

Отобразите выровненные и выровненные слова.

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')

Figure contains 4 axes. Axes 1 contains an object of type line. Axes 2 contains an object of type line. Axes 3 contains an object of type line. Axes 4 contains an object of type line.

Повторите расчеты с помощью встроенной функциональности dtw.

dtw(one,two);

Figure contains 6 axes. Axes 1 with title Overlaid Aligned Signals contains an object of type image. Axes 2 with title Aligned Signal (Y) contains an object of type image. Axes 3 with title Aligned Signal (X) contains an object of type image. Axes 4 with title Overlaid Original Signals contains an object of type image. Axes 5 with title Original Signal (Y) contains an object of type image. Axes 6 with title Original Signal (X) contains an object of type image.

Сгенерируйте два сигнала, состоящих из двух разных peaks, разделенных оврагами разной длины. Постройте график сигналов.

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)

Figure contains 2 axes. Axes 1 contains an object of type line. Axes 2 contains an object of type line.

Выровняйте сигналы без ограничений на пути деформации. Чтобы создать идеальное выравнивание, функции нужно повторить только одну выборку более короткого сигнала.

figure
dtw(x1,x2);

Figure contains 2 axes. Axes 1 with title Original Signals contains 2 objects of type line. Axes 2 with title Aligned Signals (Euclidean Distance: 0.000000) contains 2 objects of type line.

Постройте график пути деформации и прямолинейной подгонки между двумя сигналами. Чтобы достичь выравнивания, функция расширяет желоб между peaks щедро.

[d,i1,i2] = dtw(x1,x2);

figure
plot(i1,i2,'o-',[i1(1) i1(end)],[i2(1) i2(end)])

Figure contains an axes. The axes contains 2 objects of type line.

Повторите расчет, но теперь ограничьте путь деформации, чтобы отклонить самое большее три элемента от прямолинейной подгонки. Постройте график растянутых сигналов и пути деформации.

[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)])

Figure contains 2 axes. Axes 1 with title Distance: 1.9 contains 2 objects of type line. Axes 2 contains 2 objects of type line.

Ограничение препятствует слишком большой концентрации искривления на небольшом подмножестве выборок в ущерб качеству выравнивания. Повторите вычисление с ограничением в одну выборку.

dtw(x1,x2,1);

Figure contains 2 axes. Axes 1 with title Original Signals contains 2 objects of type line. Axes 2 with title Aligned Signals (Euclidean Distance: 7.600000) contains 2 objects of type line.

Загрузите речевой сигнал, дискретизированный Fs=7418Hz. Файл содержит запись женского голоса, говорящего слово «MATLAB ®».

load mtlb

% To hear, type soundsc(mtlb,Fs)

Извлеките два сегмента, которые соответствуют двум экземплярам/и/фонемы. Первый находится приблизительно между 150 мс и 250 мс, а второй между 370 мс и 450 мс. Постройте две формы волны.

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)')

Figure contains 2 axes. Axes 1 with title a_1 contains an object of type line. Axes 2 with title a_2 contains an object of type line.

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

Деформируйте оси времени так, чтобы евклидово расстояние между сигналами было сведено к минимуму. Вычислите общую «длительность» деформированных сигналов и постройте их график.

[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)')

Figure contains 2 axes. Axes 1 with title a_1, Warped contains an object of type line. Axes 2 with title a_2, Warped contains an object of type line.

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

Повторите эксперимент с полным словом. Загрузите файл, содержащий слово «strong», на котором говорит женщина и человек. Сигналы дискретизированы на частоте 8 кГц.

load('strong.mat')

% To hear, type soundsc(her,fs), pause(2), soundsc(him,fs)

Деформируйте оси времени так, чтобы абсолютное расстояние между сигналами было сведено к минимуму. Постройте график исходных и преобразованных сигналов. Вычислите их общую деформированную «длительность».

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

Figure contains 2 axes. Axes 1 with title Original Signals contains 2 objects of type line. Axes 2 with title Aligned Signals (Absolute Distance: 163.663272) contains 2 objects of type line. These objects represent 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)

Файлы MATLAB1.gif и MATLAB2.gif содержит две рукописные выборки слова «MATLAB ®». Загрузите файлы и выровните их вдоль оси X с помощью динамической трансформации временной шкалы.

samp1 = 'MATLAB1.gif';
samp2 = 'MATLAB2.gif';

x = double(imread(samp1));
y = double(imread(samp2));

dtw(x,y);

Figure contains 6 axes. Axes 1 with title Overlaid Aligned Signals contains an object of type image. Axes 2 with title Aligned Signal (Y) contains an object of type image. Axes 3 with title Aligned Signal (X) contains an object of type image. Axes 4 with title Overlaid Original Signals contains an object of type image. Axes 5 with title Original Signal (Y) contains an object of type image. Axes 6 with title Original Signal (X) contains an object of type image.

Входные параметры

свернуть все

Входной сигнал, заданный как действительный или комплексный вектор или матрица.

Типы данных: single | double
Поддержка комплексного числа: Да

Входной сигнал, заданный как действительный или комплексный вектор или матрица.

Типы данных: single | double
Поддержка комплексного числа: Да

Ширина окна корректировки, заданная как положительное целое число.

Типы данных: single | double

Метрика расстояния, заданная как 'euclidean', 'absolute', 'squared', или 'symmkl'. Если X и Y оба являются K -мерными сигналами, то metric предписывает dmn (X, Y), расстояние между m-й выборкой X и n-й выборкой Y. Для получения дополнительной информации о dmn (X, Y) см.

  • 'euclidean' - корневая сумма квадратов различий, также известная как Евклидова или 2 метрика:

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

  • 'absolute' - Сумма абсолютных различий, также известная как Манхэттен, городской блок, таксикаб или 1 метрика:

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

  • 'squared' - Квадрат евклидовой метрики, состоящий из суммы квадратов различий:

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

  • 'symmkl' - Симметричная метрика Кулбэка-Лейблера. Эта метрика действительна только для реальных и положительных X и Y:

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

Выходные аргументы

свернуть все

Минимальное расстояние между сигналами, возвращаемое как положительный действительный скаляр.

Путь деформации для первого сигнала, возвращенный как вектор или матрица индексов.

Путь деформации для второго сигнала, возвращенный как вектор или матрица индексов.

Подробнее о

свернуть все

Динамическая трансформация временной шкалы

Два сигнала с эквивалентными функциями, расположенными в том же порядке, могут выглядеть очень различными из-за различий в длительности их секций. Динамическая трансформация временной шкалы искажает эти длительности так, что соответствующие функции появляются в том же месте на общей оси времени, таким образом подчеркивая сходства между сигналами.

Рассмотрим два K -мерных сигнала

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

и

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

которые имеют M и N выборки, соответственно. Заданное dmn (X, Y), расстояние между m-й выборкой X и n-й выборкой Y, заданное в metric, dist растягивает X и Y на общий набор мгновений, так что глобальная мера расстояния от сигнала до сигнала является наименьшей.

Первоначально функция упорядочивает все возможные значения dmn (X, Y) в решетку вида

Затем dist ищет путь через решетку - параметризованный двумя последовательностями одинаковой длины, ix и iy- таким, что

d=mixniydmn(X,Y)

является минимальным. Приемлемые dist пути начинаются с d 11 (X, Y), заканчиваются с dMN (X, Y) и являются комбинациями ходов «шахматного короля»:

  • Вертикальные ходы: (m, n ) → ( m + 1, n)

  • Горизонтальные ходы: (m, n ) → (m, n + 1)

  • Диагональ перемещения: (m, n ) → ( m + 1, n + 1)

Эта структура гарантирует, что любой приемлемый путь выравнивает полные сигналы, не пропускает выборки и не повторяет функций сигнала. Кроме того, желаемый путь проходит близко к диагональной линии, проходящей между d 11 (X, Y) и dMN (X, Y). Это дополнительное ограничение, скорректированное maxsamp аргумент, гарантирует, что деформация сравнивает участки подобной длины и не избыточно заполняет функции выбросов.

Это возможный путь через решетку:

Запрещены следующие пути:

Не выравнивает все сигналыПропускает выборкиПоворачивается назад к себе, повторяя функцию

Ссылки

[1] Paliwal, K. K., Anant Agarwal, and Sarvajit S. Sinha. A Modification over Sakoe and Chiba's Dynamic Time Warping Algorithm for Isolated Word Recognition (неопр.) (недоступная ссылка). Обработка сигналов. Том 4, 1982, стр. 329-333.

[2] Сакое, Хироаки и Сейби Тиба. «Оптимизация алгоритма динамического программирования для распознавания разговорного слова». IEEE® Транзакции по акустике, речи и обработке сигналов. Том ASSP-26, № 1, 1978, с. 43-49.

Расширенные возможности

Генерация кода C/C + +
Сгенерируйте код C и C++ с помощью Coder™ MATLAB ®

.

См. также

| | | |

Введенный в R2016a