Найдите резкие изменения в сигнале
ipt = findchangepts(x)
ipt = findchangepts(x,Name,Value)
[ipt,residual]
= findchangepts(___)
findchangepts(___)
возвращает индекс, в котором изменяется наиболее значительно среднее значение ipt
= findchangepts(x
)x
.
Если x
является вектором с элементами N, то разделы findchangepts
x
в две области, x(1:ipt-1)
и x(ipt:N)
, которые минимизируют сумму остаточной ошибки (в квадрате) каждой области от ее локального среднего значения.
Если x
является M-by-N матрица, то разделы findchangepts
x
в две области, x(1:M,1:ipt-1)
и x(1:M,ipt:N)
, возвращая индекс столбца, который минимизирует сумму остаточной ошибки каждой области от ее локального M - размерное среднее значение.
задает аргументы пары "имя-значение" использования дополнительных опций. Опции включают количество changepoints, чтобы сообщить и статистическая величина, чтобы измериться вместо среднего значения. Смотрите Обнаружение точек изменения для получения дополнительной информации.ipt
= findchangepts(x
,Name,Value
)
findchangepts(___)
без графиков выходных аргументов сигнал и любой обнаружили changepoints. См. 'Статистическую величину' для получения дополнительной информации.
Загрузите файл данных, содержащий запись гудка поезда, выбранного на уровне 8 192 Гц. Найдите 10 точек, в которых изменяется наиболее значительно среднеквадратичный уровень сигнала.
load train findchangepts(y,'MaxNumChanges',10,'Statistic','rms')
Вычислите кратковременную степень спектральная плотность сигнала. Разделите сигнал на сегменты с 128 выборками и окно каждый сегмент с Окном Хэмминга. Задайте 120 выборок перекрытия между смежными сегментами и 128 точками ДПФ. Найдите 10 точек, в которых среднее значение степени спектральная плотность изменяется старше значащий.
[s,f,t,pxx] = spectrogram(y,128,120,128,Fs);
findchangepts(pow2db(pxx),'MaxNumChanges',10)
Сбросьте генератор случайных чисел для восстанавливаемых результатов. Сгенерируйте случайный сигнал где:
Среднее значение является постоянным в каждой из семи областей и изменяется резко от области до области.
Отклонение является постоянным в каждой из пяти областей и изменяется резко от области до области.
rng('default')
lr = 20;
mns = [0 1 4 -5 2 0 1];
nm = length(mns);
vrs = [1 4 6 1 3];
nv = length(vrs);
v = randn(1,lr*nm*nv)/2;
f = reshape(repmat(mns,lr*nv,1),1,lr*nm*nv);
y = reshape(repmat(vrs,lr*nm,1),1,lr*nm*nv);
t = v.*y+f;
Постройте сигнал, подсветив шаги его конструкции.
subplot(2,2,1) plot(v) title('Original') xlim([0 700]) subplot(2,2,2) plot([f;v+f]') title('Means') xlim([0 700]) subplot(2,2,3) plot([y;v.*y]') title('Variances') xlim([0 700]) subplot(2,2,4) plot(t) title('Final') xlim([0 700])
Найдите пять точек, где среднее значение сигнала изменяется наиболее значительно.
figure
findchangepts(t,'MaxNumChanges',5)
Найдите пять точек, где среднеквадратичный уровень сигнала изменяется наиболее значительно.
findchangepts(t,'MaxNumChanges',5,'Statistic','rms')
Найдите точку, где среднее и стандартное отклонение сигнала изменяется больше всего.
findchangepts(t,'Statistic','std')
Загрузите речевой сигнал, выбранный в . Файл содержит запись розеточной речи, говоря слово "MATLAB®".
load mtlb
Различите гласные и согласные в слове путем нахождения точек, в которых отклонение сигнала значительно изменяется. Ограничьте количество changepoints к пять.
numc = 5; [q,r] = findchangepts(mtlb,'Statistic','rms','MaxNumChanges',numc)
q = 5×1
132
778
1646
2500
3454
r = -4.4055e+03
Постройте сигнал и отобразите changepoints.
findchangepts(mtlb,'Statistic','rms','MaxNumChanges',numc)
Чтобы проигрывать звук с паузой после каждого из сегментов, не прокомментируйте следующие строки.
% soundsc(1:q(1),Fs) % for k = 1:length(q)-1 % soundsc(mtlb(q(k):q(k+1)),Fs) % pause(1) % end % soundsc(q(end):length(mtlb),Fs)
Создайте сигнал, который состоит из двух синусоид с переменной амплитудой и линейным трендом.
vc = sin(2*pi*(0:201)/17).*sin(2*pi*(0:201)/19).* ...
[sqrt(0:0.01:1) (1:-0.01:0).^2]+(0:201)/401;
Найдите точки, где среднее значение сигнала изменяется наиболее значительно. Пара "имя-значение" 'Statistic'
является дополнительной в этом случае. Задайте минимальное улучшение остаточной ошибки 1.
findchangepts(vc,'Statistic','mean','MinThreshold',1)
Найдите точки, где среднеквадратичный уровень сигнала изменяется больше всего. Задайте минимальное улучшение остаточной ошибки 6.
findchangepts(vc,'Statistic','rms','MinThreshold',6)
Найдите точки, где стандартное отклонение сигнала изменяется наиболее значительно. Задайте минимальное улучшение остаточной ошибки 10.
findchangepts(vc,'Statistic','std','MinThreshold',10)
Найдите точки где среднее значение и наклон изменения сигнала наиболее резко. Задайте минимальное улучшение остаточной ошибки 0,6.
findchangepts(vc,'Statistic','linear','MinThreshold',0.6)
Сгенерируйте двумерную, кривую Bézier с 1000 выборками с 20 случайными контрольными точками. Кривая Bézier задана:
,
где th контрольные точки, диапазоны от 0 до 1, и биномиальный коэффициент. Постройте кривую и контрольные точки.
m = 20;
P = randn(m,2);
t = linspace(0,1,1000)';
pol = t.^(0:m-1).*(1-t).^(m-1:-1:0);
bin = gamma(m)./gamma(1:m)./gamma(m:-1:1);
crv = bin.*pol*P;
plot(crv(:,1),crv(:,2),P(:,1),P(:,2),'o:')
Разделите кривую в три сегмента, такие, что точки в каждом сегменте на минимальном расстоянии от среднего значения сегмента.
findchangepts(crv','MaxNumChanges',3)
Разделите кривую в 20 сегментов, которые являются лучшей подгонкой прямыми линиями.
findchangepts(crv','Statistic','linear','MaxNumChanges',19)
Сгенерируйте и постройте 3D кривую Bézier с 20 случайными контрольными точками.
P = rand(m,3); crv = bin.*pol*P; plot3(crv(:,1),crv(:,2),crv(:,3),P(:,1),P(:,2),P(:,3),'o:') xlabel('x') ylabel('y')
Визуализируйте кривую сверху.
view([0 0 1])
Разделите кривую в три сегмента, такие, что точки в каждом сегменте на минимальном расстоянии от среднего значения сегмента.
findchangepts(crv','MaxNumChanges',3)
Разделите кривую в 20 сегментов, которые являются лучшей подгонкой прямыми линиями.
findchangepts(crv','Statistic','linear','MaxNumChanges',19)
x
Входной сигналВходной сигнал, заданный как вектор действительных чисел.
Пример: reshape(randn(100,3)+[-3 0 3],1,300)
является случайным сигналом с двумя резкими изменениями в среднем значении.
Пример: reshape(randn(100,3).*[1 20 5],1,300)
является случайным сигналом с двумя резкими изменениями на среднеквадратичном уровне.
Типы данных: single | double
Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми.
Имя (Name) — это имя аргумента, а значение (Value) — соответствующее значение.
Name
должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.
'MaxNumChanges',3,'Statistic','rms','MinDistance',20
находит до трех точек, где изменения на среднеквадратичном уровне старше значащие и где точки разделяются по крайней мере 20 выборками.'MaxNumChanges'
Максимальное количество существенных изменений, чтобы возвратитьсяМаксимальное количество существенных изменений, чтобы возвратиться, заданный как пара, разделенная запятой, состоящая из 'MaxNumChanges'
и целочисленного скаляра. После нахождения точки со старшим значащим изменением findchangepts
постепенно ослабляет свой критерий поиска, чтобы включать больше changepoints, не превышая заданный максимум. Если какая-либо поисковая установка возвращает больше, чем максимум, то функция ничего не возвращает. Если 'MaxNumChanges'
не задан, то функция возвращает точку со старшим значащим изменением. Вы не можете задать 'MinThreshold'
и 'MaxNumChanges'
одновременно.
Пример: findchangepts([0 1 0])
возвращает индекс второй выборки.
Пример: findchangepts([0 1 0],'MaxNumChanges',1)
возвращает пустую матрицу.
Пример: findchangepts([0 1 0],'MaxNumChanges',2)
возвращает индексы вторых и третьих точек.
Типы данных: single | double
'Statistic'
— Тип изменения, чтобы обнаружить'mean'
(значение по умолчанию) | 'rms'
| 'std'
| 'linear'
Тип изменения, чтобы обнаружить, заданный как пара, разделенная запятой, состоящая из 'Statistic'
и одно из этих значений:
среднее значение
Обнаружьте изменения в среднем значении. Если вы вызываете findchangepts
без выходных аргументов, графики функций сигнал, changepoints и среднее значение каждого сегмента, заключенного последовательным changepoints.
'rms'
— Обнаружьте изменения на среднеквадратичном уровне. Если вы вызываете findchangepts
без выходных аргументов, графики функций сигнал и changepoints.
станд
Обнаружьте изменения в стандартном отклонении, с помощью Гауссовой логарифмической вероятности. Если вы вызываете findchangepts
без выходных аргументов, графики функций сигнал, changepoints и среднее значение каждого сегмента, заключенного последовательным changepoints.
'linear'
— Обнаружьте изменения в среднем значении и наклоне. Если вы вызываете findchangepts
без выходных аргументов, графики функций сигнал, changepoints и строка что лучшие подгонки каждый фрагмент сигнала, заключенного последовательным changepoints.
Пример: findchangepts([0 1 2 1],'Statistic','mean')
возвращает индекс второй выборки.
Пример: findchangepts([0 1 2 1],'Statistic','rms')
возвращает индекс третьей выборки.
'MinDistance'
— Минимальное количество выборок между changepointsМинимальное количество выборок между changepoints, заданным как пара, разделенная запятой, состоящая из 'MinDistance'
и целочисленным скаляром. Если вы не задаете этот номер, то значение по умолчанию 1 для изменений в среднем значении и 2 для других изменений.
Пример: findchangepts(sin(2*pi*(0:10)/5),'MaxNumChanges',5,'MinDistance',1)
возвращает пять индексов.
Пример: findchangepts(sin(2*pi*(0:10)/5),'MaxNumChanges',5,'MinDistance',3)
возвращает два индекса.
Пример: findchangepts(sin(2*pi*(0:10)/5),'MaxNumChanges',5,'MinDistance',5)
не возвращает индексов.
Типы данных: single | double
'MinThreshold'
— Минимальное улучшение общей остаточной ошибкиМинимальное улучшение общей остаточной ошибки для каждого changepoint, заданного как пара, разделенная запятой, состоящая из 'MinThreshold'
и действительного скаляра, который представляет штраф. Эта опция действует, чтобы ограничить количество возвращенных существенных изменений путем применения дополнительного штрафа каждому предполагаемому changepoint. Вы не можете задать 'MinThreshold'
и 'MaxNumChanges'
одновременно.
Пример: findchangepts([0 1 2],'MinThreshold',0)
возвращает два индекса.
Пример: findchangepts([0 1 2],'MinThreshold',1)
возвращает один индекс.
Пример: findchangepts([0 1 2],'MinThreshold',2)
не возвращает индексов.
Типы данных: single | double
ipt
— Местоположения ChangepointМестоположения Changepoint, возвращенные как вектор целочисленных индексов.
residual
— Остаточная ошибкаОстаточная ошибка сигнала против смоделированных изменений, возвращенных как вектор.
changepoint является выборкой или момент времени, в который некоторое статистическое свойство сигнала изменяется резко. Рассматриваемое свойство может быть средним значением сигнала, его отклонения или спектральной характеристики, среди других.
Чтобы найти сигнал changepoint, findchangepts
использует параметрический глобальный метод. Функция:
Выбирает точку и делит сигнал на два раздела.
Вычисляет эмпирическую оценку желаемого статистического свойства для каждого раздела.
В каждой точке в разделе, меры, сколько свойство отклоняет от эмпирической оценки. Добавляют отклонения для всех точек.
Добавляет от раздела к разделу отклонений, чтобы найти общую остаточную ошибку.
Отличается местоположение точки деления, пока общая остаточная ошибка не достигает минимума.
Процедура является самой ясной, когда выбранная статистическая величина является средним значением. В этом случае findchangepts
минимизирует общую остаточную ошибку от "лучшего" горизонтального уровня для каждого раздела. Учитывая x сигнала 1, x 2, …, xN, функция находит k таким образом что
является самым маленьким. Среднее значение и отклонение имеют обычные определения. (Отклонение нормировано количеством выборок, не вычитая 1.)
Этот результат может быть обобщен, чтобы включить другую статистику. findchangepts
находит k таким образом что
является самым маленьким, учитывая раздел эмпирическая оценка χ и измерение отклонения Δ. Минимизация остаточной ошибки эквивалентна максимизации логарифмической вероятности. Учитывая нормальное распределение со средним μ и отклонением σ 2, логарифмическая вероятность для N независимые наблюдения
Если 'Statistic'
задан как 'mean'
, то отклонение фиксируется и функциональное использование
как получено ранее.
Если 'Statistic'
задан как 'std'
, то среднее значение фиксируется и функциональное использование
Если 'Statistic'
задан как 'rms'
, общее отклонение эквивалентно для 'std'
, но с обнуленным средним значением:
Если 'Statistic'
задан как 'linear'
, функциональное использование
Сигналы интереса часто имеют больше чем один changepoint. Обобщение процедуры является прямым, когда количество changepoints известно. Когда номер неизвестен, необходимо добавить, что термин штрафа к остаточной ошибке, начиная с добавления changepoints всегда уменьшает остаточную ошибку и приводит к сверхподбору кривой. В крайнем случае каждая точка становится changepoint, и остаточная ошибка исчезает. findchangepts
использует термин штрафа, который растет линейно с количеством changepoints. Если существует K changepoints, чтобы быть найденным, то функция минимизирует
где k 0 и kK являются соответственно первыми и последняя выборка сигнала.
Коэффициент пропорциональности, обозначенный β и заданный в 'MinThreshold'
, соответствует фиксированному штрафу, добавленному для каждого changepoint. отклонения findchangepts
, добавляющие дополнительный changepoints, если уменьшение в остаточной ошибке не соответствует порогу. Обнулите 'MinThreshold'
, чтобы возвратить все возможные изменения.
Если вы не знаете, что порог использовать или иметь общее представление о количестве changepoints в сигнале, задайте 'MaxNumChanges'
вместо этого. Эта опция постепенно увеличивает порог, пока функция не находит меньше изменений, чем заданное значение.
Чтобы выполнить саму минимизацию, findchangepts
использует исчерпывающий алгоритм на основе динамического программирования с ранним отказом.
[1] Lavielle, Марк. “Используя оштрафованные контрасты для проблемы точки перехода”. Обработка сигналов. Издание 85, август 2005, стр 1501–1510.
[2] Killick, Ребекка, Пол Фирнхэд и Идрис А. Экли. “Оптимальное обнаружение changepoints с линейной вычислительной стоимостью”. Журнал американской Статистической Ассоциации. Издание 107, № 500, 2012, стр 1590–1598.
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.