Найдите резкие изменения в сигнале
возвращает индекс в который среднее значение 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
имя аргумента и 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'
и одно из этих значений:
'mean'
— Обнаружьте изменения в среднем значении. Если вы вызываете findchangepts
без выходных аргументов графики функций сигнал, changepoints и среднее значение каждого сегмента заключены последовательным changepoints.
'rms'
— Обнаружьте изменения на среднеквадратичном уровне. Если вы вызываете findchangepts
без выходных аргументов, графики функций сигнал и changepoints.
'std'
— Обнаружьте изменения в стандартном отклонении, с помощью Гауссовой логарифмической правдоподобности. Если вы вызываете 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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.