samplealign

Выровняйте два набора данных, содержащих последовательные наблюдения, введя погрешности

Синтаксис

[I, J] = samplealign(X, Y)
[I, J] = samplealign(X, Y, ...'Band', BandValue, ...)
[I, J] = samplealign(X, Y, ...'Width', WidthValue, ...)
[I, J] = samplealign(X, Y, ...'Gap', GapValue, ...)
[I, J] = samplealign(X, Y, ...'Quantile', QuantileValue, ...)
[I, J] = samplealign(X, Y, ...'Distance', DistanceValue, ...)
[I, J] = samplealign(X, Y, ...'Weights', WeightsValue, ...)
[I, J] = samplealign(X, Y, ...'ShowConstraints', ShowConstraintsValue, ...)
[I, J] = samplealign(X, Y, ...'ShowNetwork', ShowNetworkValue, ...)
[I, J] = samplealign(X, Y, ...'ShowAlignment', ShowAlignmentValue, ...)

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

X, YМатрицы данных, где строки соответствуют наблюдениям или выборкам, и столбцы соответствуют функциям или размерностям. X и Y может иметь разное количество строк, но они должны иметь одинаковое число столбцов. Первый столбец является ссылочной размерностью и должен содержать уникальные значения в порядке возрастания. Эталонная размерность может содержать выборочные индексы наблюдений или измеряемое значение, такое как время.
BandValue

Одно из следующих:

  • Скаляр.

  • Функция, заданная с помощью @ (z), где z является средней точкой между заданным наблюдением в одном наборе данных и заданным наблюдением в другом наборе данных.

BandValue задает максимально допустимое расстояние между наблюдениями (только вдоль ссылки размерности) в двух наборах данных, таким образом ограничивая количество потенциальных соответствий между наблюдениями в двух наборах данных. Если S - значение в ссылку размерности для заданного наблюдения (строки) в одном наборе данных, тогда это наблюдение согласовывается только с наблюдениями в другом наборе данных, значения которого в ссылку размерности попадать внутрь S ± BandValue. Затем в алгоритм для дальнейшей оценки передаются только эти потенциальные матчи. Значения по умолчанию BandValue является Inf.

WidthValue

Одно из следующих:

  • Двухэлементный вектор, [U, V]

  • Скаляр, который используется для обоих U и V

WidthValue ограничивает количество потенциальных совпадений между наблюдениями в двух наборах данных; то есть каждое наблюдение в X подсчитывается ближайшему U наблюдения в Yи каждое наблюдение в Y подсчитывается ближайшему V наблюдения в X. Затем в алгоритм для дальнейшей оценки передаются только эти потенциальные матчи. Близость измеряется только с использованием первого столбца (ссылочной размерности) в каждом наборе данных. По умолчанию это Inf если 'Band' указывается; в противном случае значение по умолчанию 10.

GapValue

Любое из следующих:

  • Массив ячеек, {G, H}, где G является скаляром или указателем на функцию, заданным с помощью @ (X), и H является скаляром или указателем на функцию, заданным с помощью @ (Y). Функции @ (X) и @ (Y) необходимо вычислить штраф для каждого наблюдения (строка), если он согласован с погрешностью в другом наборе данных. Функции @ (X) и @ (Y) необходимо вернуть вектор-столбец с одинаковым числом строк, как X или Y, содержащий штраф за разрыв для каждого наблюдения (строка).

  • Один указатель на функцию, заданный как @ (Z), который используется для обоих G и H. Функция @ (Z) необходимо вычислить штраф за каждое наблюдение (строка) в обоих X и Y когда он сопоставлен с погрешностью в другом наборе данных. Функция @ (Z) должен принимать в качестве аргументов X и Y. Функция @ (Z) необходимо вернуть вектор-столбец с одинаковым числом строк, как X или Y, содержащий штраф за разрыв для каждого наблюдения (строка).

  • Скаляр, который используется для обоих G и H.

GapValue задает зависимые от положения условия для назначения штрафов за разрыв. Вычисленное значение, GPX, является штрафом за погрешность для совпадения наблюдений из первого набора данных X к погрешностям, вставленным во второй набор данных Y, и является продуктом двух членов: GPX = G * QMS. Термин G принимает свое значение как функцию от наблюдений в X. Точно так же GPY - штраф за погрешность для совпадения наблюдений из Y в зазоры, вставленные в X, и является продуктом двух членов: GPY = H * QMS. Термин H принимает свое значение как функцию от наблюдений в Y. По умолчанию термин QMS является 0,75 квантилем счета для пар наблюдений, которые являются потенциальными совпадениями (то есть парами, которые соответствуют 'Band' и 'Width' ограничения). Значения по умолчанию GapValue является 1.

QuantileValueСкаляр между 0 и 1 который задает значение квантиля, используемое для вычисления термина QMS, который используется в 'Gap' свойство для вычисления штрафов за разрыв. По умолчанию это 0.75.
DistanceValue

Указатель на функцию, заданный как @ (R, S). Функция @ (R, S) должны:

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

  • Примите как аргументы, R и S, матрицы, которые имеют одинаковое число строк и столбцы и чьи парные строки представляют все потенциальные совпадения наблюдений в X и Y соответственно.

  • Верните вектор-столбец положительных значений с таким же количеством элементов, как и строки в R и S.

По умолчанию это евклидово расстояние между парами.

Внимание

Все столбцы в X и Y, включая ссылочную размерность, учитываются при вычислении расстояний. Если вы не хотите включать ссылочную размерность в расчеты расстояния, используйте 'Weight' свойство, чтобы исключить его.

WeightsValue

Одно из следующих:

  • Логический вектор-строка с таким же количеством элементов, как и столбцы в X и Y, который задает столбцы в X и Y.

  • Численный вектор-строка с таким же количеством элементов, как и столбцы в X и Y, который задает относительные веса столбцов ( функций).

Это свойство контролирует включение/исключение столбцов ( функций) или акцент столбцов ( функций) при вычислении счета расстояния между наблюдениями, которые являются потенциальными совпадениями, то есть при использовании 'Distance' свойство. По умолчанию это логический вектор-строка со всеми элементами, установленными на true.

Совет

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

Примечание

Значения веса не учитываются при использовании 'Band', 'Width', или 'Gap' свойство.

ShowConstraintsValueУправляет отображением пространства поиска, ограниченного заданным 'Band' и 'Width' входные параметры, тем самым давая указание на память, необходимую для запуска алгоритма с определенным 'Band' и 'Width' параметры на ваших наборах данных. Варианты true или false (по умолчанию).
ShowNetworkValueУправляет отображением сети динамического программирования, счетов матчей, штрафов за разрыв и пути выигрыша. Варианты true или false (по умолчанию).
ShowAlignmentValueУправление отображением первого и второго столбцов X и Y наборы данных в абсциссе и ординате соответственно двумерного графика. Варианты true, false (по умолчанию) или целое число, задающее столбец X и Y наборы данных для построения графика как ординаты.

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

IВектор-столбец, содержащий индексы строк (наблюдений) в X которые соответствуют строке (наблюдению) в Y. Отсутствующие индексы указывают, что строка (наблюдение) совпадает с погрешностью.
JВектор-столбец, содержащий индексы строк (наблюдений) в Y которые соответствуют строке (наблюдению) в X. Отсутствующие индексы указывают, что строка (наблюдение) совпадает с погрешностью.

Описание

[I, J] = samplealign(X, Y) выравнивает наблюдения в двух матрицах данных, X и Y, путем введения пробелов. X и Y являются матрицами данных, где строки соответствуют наблюдениям или выборкам, а столбцы соответствуют функциям или размерностям. X и Y может иметь разное количество строк, но должно иметь одинаковое число столбцов. Первый столбец является ссылочной размерностью и должен содержать уникальные значения в порядке возрастания. Эталонная размерность может содержать выборочные индексы наблюдений или измеряемое значение, такое как время. The samplealign функция использует алгоритм динамического программирования, чтобы минимизировать сумму положительных счетов, полученных из пар наблюдений, которые являются потенциальными совпадениями и штрафами, вытекающими из вставки погрешностей. Возвращаемые значения I и J Векторы-столбцы содержат индексы, которые указывают соответствие для каждой строки (наблюдение) в X и Y соответственно.

Совет

Если вы не задаете возвращаемые значения, samplealign не запускает алгоритм динамического программирования. Выполняемые samplealign без возвращаемых значений, но установка 'ShowConstraints', 'ShowNetwork', или 'ShowAlignment' свойство к true, позволяет исследовать ограниченное пространство поиска, динамическую сеть программирования или выровненные наблюдения, не сталкиваясь с потенциальными проблемами памяти.

[I, J] = samplealign (X, Y... 'PropertyName', PropertyValue, ...) вызывает samplealign с необязательными свойствами, которые используют пары имя/значение свойства. Можно задать одно или несколько свойств в любом порядке. Каждый PropertyName должны быть заключены в одинарные кавычки и нечувствительны к регистру. Эти имена свойства/пары значения свойств следующие:

[I, J] = samplealign(X, Y, ...'Band', BandValue, ...) задает максимально допустимое расстояние между наблюдениями (только вдоль ссылки размерности) в двух наборах данных, таким образом ограничивая количество потенциальных соответствий между наблюдениями в двух наборах данных. Если S - значение в ссылку размерности для заданного наблюдения (строки) в одном наборе данных, тогда это наблюдение согласовывается только с наблюдениями в другом наборе данных, значения которого в ссылку размерности попадать внутрь S ± BandValue. Затем в алгоритм для дальнейшей оценки передаются только эти потенциальные матчи. BandValue может быть скаляром или функцией, заданной с помощью @ (z), где z является средней точкой между заданным наблюдением в одном наборе данных и заданным наблюдением в другом наборе данных. Значения по умолчанию BandValue является Inf.

Это ограничение уменьшает время и сложность памяти алгоритма от O (MN) по О (sqrt (MN) * K), где M и N количество наблюдений в X и Y соответственно и K является маленькой константой, такой что K<<M и K<<N. Настройте BandValue к максимальному ожидаемому сдвигу между ссылочными размерностями в двух наборах данных, то есть между X(:, 1) и Y(:,1).

[I, J] = samplealign(X, Y, ...'Width', WidthValue, ...) ограничивает количество потенциальных совпадений между наблюдениями в двух наборах данных; то есть каждое наблюдение в X подсчитывается ближайшему U наблюдения в Yи каждое наблюдение в Y подсчитывается ближайшему V наблюдения в X. Затем в алгоритм для дальнейшей оценки передаются только эти потенциальные матчи. WidthValue является либо двухэлементным вектором, [U, V] или скаляр, который используется для обоих U и V. Близость измеряется только с использованием первого столбца (ссылочной размерности) в каждом наборе данных. По умолчанию это Inf если 'Band' указывается; в противном случае значение по умолчанию 10.

Это ограничение уменьшает время и сложность памяти алгоритма от O (MN) по О (sqrt (MN) * sqrt (UV)), где M и N количество наблюдений в X и Y соответственно и U и V малы, что U<<M и V<<N.

Примечание

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

Совет

Задайте 'Width' когда у вас нет хорошей оценки для 'Band' свойство. Чтобы получить указание на память, необходимую для запуска алгоритма с определенными 'Band' и 'Width' параметры на ваших наборах данных, запустите samplealign, но не задавать возвращаемые значения и устанавливать 'ShowConstraints' на true.

[I, J] = samplealign(X, Y, ...'Gap', GapValue, ...) задает зависимые от положения условия для назначения штрафов за разрыв.

GapValue является любым из следующих:

  • Массив ячеек, {G, H}, где G является скаляром или указателем на функцию, заданным с помощью @ (X), и H является скаляром или указателем на функцию, заданным с помощью @ (Y). Функции @ (X) и @ (Y) необходимо вычислить штраф для каждого наблюдения (строка), если он согласован с погрешностью в другом наборе данных. Функции @ (X) и @ (Y) необходимо вернуть вектор-столбец с одинаковым числом строк, как X или Y, содержащий штраф за разрыв для каждого наблюдения (строка).

  • Один указатель на функцию, заданный как @ (Z), который используется для обоих G и H. Функция @ (Z) необходимо вычислить штраф за каждое наблюдение (строка) в обоих X и Y когда он сопоставлен с погрешностью в другом наборе данных. Функция @ (Z) должен принимать в качестве аргументов X и Y. Функция @ (Z) необходимо вернуть вектор-столбец с одинаковым числом строк, как X или Y, содержащий штраф за разрыв для каждого наблюдения (строка).

  • Скаляр, который используется для обоих G и H.

Вычисленное значение, GPX, является штрафом за погрешность для совпадения наблюдений из первого набора данных X к погрешностям, вставленным во второй набор данных Y, и является продуктом двух членов: GPX = G * QMS. Термин G принимает свое значение как функцию от наблюдений в X. Точно так же GPY - штраф за погрешность для совпадения наблюдений из Y в зазоры, вставленные в X, и является продуктом двух членов: GPY = H * QMS. Термин H принимает свое значение как функцию от наблюдений в Y. По умолчанию термин QMS является 0,75 квантилем счета для пар наблюдений, которые являются потенциальными совпадениями (то есть парами, которые соответствуют 'Band' и 'Width' ограничения).

Если G и H Положительные скалярные величины, тогда GPX и GPY не зависят от наблюдения, в которое вставляется зазор.

Значения по умолчанию GapValue является 1, то есть оба G и H являются 1, что указывает на то, что штраф по умолчанию для вставок зазоров в обеих последовательностях эквивалентен квантилю (устанавливается 'Quantile' свойство, по умолчанию = 0.75) счет для пар наблюдений, которые являются потенциальными совпадениями.

Примечание

GapValue по умолчанию задается относительно безопасное значение. Однако успех алгоритма зависит от тонкой настройки штрафов за погрешность, которая зависит от приложения. Когда разрыв штрафов велик относительно счета правильных матчей, samplealign возвращает выравнивания с меньшим количеством промежутков, но с более неправильно выровненными областями. Когда штрафы за погрешность меньше, выравнивание выхода содержит более длинные области с погрешностями и меньше совпадающих наблюдений. Задайте 'ShowNetwork' на true сравнение штрафов за погрешность с счетом совпадающих наблюдений в различных областях выравнивания.

[I, J] = samplealign(X, Y, ...'Quantile', QuantileValue, ...) задает значение квантиля, используемое для вычисления термина QMS, который используется в 'Gap' свойство для вычисления штрафов за разрыв. QuantileValue является скаляром между 0 и 1. По умолчанию это 0.75.

Совет

Задайте QuantileValue в пустой массив ([]) сделать меры наказания за разрыв независимыми от QMS, то есть GPX и GPY являются функциями только G и H входные параметры соответственно.

[I, J] = samplealign(X, Y, ...'Distance', DistanceValue, ...) задает функцию, чтобы вычислить расстояние между парами наблюдений, которые являются потенциальными совпадениями. DistanceValue - указатель на функцию, заданный с помощью @ (R, S). Функция @ (R, S) должен принимать в качестве аргументов, R и S, матрицы, которые имеют одинаковое число строк и столбцы и чьи парные строки представляют все потенциальные совпадения наблюдений в X и Y соответственно. Функция @ (R, S) необходимо вернуть вектор-столбец положительных значений с таким же количеством элементов, как и строки в R и S. По умолчанию это евклидово расстояние между парами.

Внимание

Все столбцы в X и Y, включая ссылочную размерность, учитываются при вычислении расстояний. Если вы не хотите включать ссылочную размерность в расчеты расстояния, используйте 'Weight' свойство, чтобы исключить его.

[I, J] = samplealign(X, Y, ...'Weights', WeightsValue, ...) управляет включением/исключением столбцов ( функций) или акцентом столбцов ( функций) при вычислении счета расстояния между наблюдениями, которые являются потенциальными совпадениями, то есть при использовании 'Distance' свойство. WeightsValue может быть логическим вектором-строкой, который задает столбцы в X и Y. WeightsValue может также быть числовым вектором-строкой с таким же количеством элементов, как и столбцы в X и Y, который задает относительные веса столбцов ( функций). По умолчанию это логический вектор-строка со всеми элементами, установленными на true.

Совет

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

Примечание

Значения веса не учитываются при вычислении ограниченного пространства выравнивания, то есть при использовании 'Band' или 'Width' свойства, или при вычислении штрафов за погрешность, то есть при использовании 'Gap' свойство.

[I, J] = samplealign(X, Y, ...'ShowConstraints', ShowConstraintsValue, ...) управляет отображением пространства поиска, ограниченного входными параметрами 'Band' и 'Width', с указанием памяти, необходимой для запуска алгоритма с определенными 'Band' и 'Width' на ваших наборах данных. Варианты true или false (по умолчанию).

[I, J] = samplealign(X, Y, ...'ShowNetwork', ShowNetworkValue, ...) управляет отображением сети динамического программирования, счетов матчей, штрафов за разрыв и пути выигрыша. Варианты true или false (по умолчанию).

[I, J] = samplealign(X, Y, ...'ShowAlignment', ShowAlignmentValue, ...) управляет отображением первого и второго столбцов X и Y наборы данных в абсциссе и ординате соответственно двумерного графика. Ссылки между всеми потенциальными совпадениями, которые удовлетворяют ограничениям, отображаются, и подсвечиваются совпадения, принадлежащие выходу выравниванию. Варианты true, false (по умолчанию) или целое число, задающее столбец X и Y наборы данных для построения графика как ординаты.

Примеры

Пример 78. Деформация синусоиды с плавной функцией для более пристального наблюдения за циклической активностью солнечного пятна
  1. Загрузка sunspot.dat, файл данных, включенный в MATLAB® программное обеспечение, содержащее переменную sunspot, которая является двухколоночной матрицей, содержащей изменения активности солнечных пятен за последние 300 лет. Первый столбец является ссылочной размерностью (годами), а второй столбец содержит значения активности солнечного пятна. Активность солнечных пятен циклическая, достигает максимума около каждые 11 лет.

    load sunspot.dat
  2. Создайте синусоиду с известным периодом активности солнечных пятен.

    years = (1700:1990)';
    T = 11.038;
    f = @(y) 60 + 60 * sin(y*(2*pi/T));
  3. Выровнять наблюдения между синусоидой и активностью солнечного пятна путем введения погрешностей.

    [i,j] = samplealign([years f(years)],sunspot,'weights',...
                        [0 1],'showalignment',true);

  4. Оцените сглаженную функцию, чтобы деформировать синусоиду.

    [p,s,mu] = polyfit(years(i),years(j),15);
    wy = @(y) polyval(p,(y-mu(1))./mu(2));
  5. Постройте графики циклов солнечного пятна, размотанной синусоиды и деформированной синусоиды.

    years = (1700:1/12:1990)';
    figure
    plot(sunspot(:,1),sunspot(:,2),years,f(years),wy(years),...
         f(years))
    legend('Sunspots','Unwarped Sine Wave','Warped Sine Wave')
    title('Smooth Warping Example')

Пример 79. Восстановление нелинейного искривления между двумя сигналами, содержащими шумные Гауссовы peaks
  1. Создайте два сигнала с зашумленным Гауссовым peaks.

    rng('default')
    peakLoc = [30 60 90 130 150 200 230 300 380 430];
    peakInt = [7 1 3 10 3 6 1 8 3 10];
    time = 1:450;
    comp = exp(-(bsxfun(@minus,time,peakLoc')./5).^2);
    sig_1 = (peakInt + rand(1,10)) * comp + rand(1,450);
    sig_2 = (peakInt + rand(1,10)) * comp + rand(1,450);
  2. Задайте нелинейную функцию искривления.

    wf = @(t) 1 + (t<=100).*0.01.*(t.^2) + (t>100).*...
         (310+150*tanh(t./100-3));
  3. Деформируйте второй сигнал, чтобы искажать его.

    sig_2 = interp1(time,sig_2,wf(time),'pchip');
  4. Выровняйте наблюдения между двумя сигналами путем введения погрешностей.

    [i,j] = samplealign([time;sig_1]',[time;sig_2]',...
                        'weights',[0,1],'band',35,'quantile',.5);
  5. Постройте график опорного сигнала, искаженного сигнала и искаженного (исправленного) сигнала.

    figure
    sig_3 = interp1(time,sig_2,interp1(i,j,time,'pchip'),'pchip');
    plot(time,sig_1,time,sig_2,time,sig_3)
    legend('Reference','Distorted Signal','Corrected Signal')
    title('Non-linear Warping Example')

  6. Постройте график действительных и предполагаемых функций деформации.

    figure
    plot(time,wf(time),time,interp1(j,i,time,'pchip'))
    legend('Distorting Function','Estimated Warping')

Ссылки

[1] Майерс, К.С. и Рабинер, Л.Р. (1981). Сравнительное исследование нескольких динамических трансформаций временной шкалы алгоритмов распознавания связанных слов. Технический журнал Bell System 60:7, 1389-1409.

[2] Сакое, Х. и Чиба, С. (1978). Оптимизация алгоритма динамического программирования для распознавания разговорного слова. IEEE Trans. Acoustics, Speech and Signal Processing ASSP-26 (1), 43-49 .

Введенный в R2007b