Найти резкие изменения в сигнале
возвращает индекс, при котором среднее значение 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-мерного среднего.
задает дополнительные параметры с использованием аргументов пары «имя-значение». Варианты включают количество точек изменения для отчета и статистику для измерения, а не среднее значение. Дополнительные сведения см. в разделе Обнаружение точек перехода.ipt = findchangepts(x,Name,Value)
findchangepts(___) без выходных аргументов строит график сигнала и любых обнаруженных точек изменения. Дополнительные сведения см. в разделе Статистика.
Загрузите файл данных, содержащий запись свистка поезда, дискретизированного на частоте 8192 Гц. Найдите 10 точек, в которых среднеквадратичный уровень сигнала изменяется наиболее значительно.
load train findchangepts(y,'MaxNumChanges',10,'Statistic','rms')
Вычислите кратковременную спектральную плотность мощности сигнала. Разделите сигнал на 128 сегментов выборки и окнах каждого сегмента с помощью окна Хэмминга. Укажите 120 образцов перекрытия между соседними сегментами и 128 точками DFT. Найдите 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')

Загрузите речевой сигнал, дискретизированный при 7418 Гц. Файл содержит запись женского голоса, говорящего слово «MATLAB ®».
load mtlbРазличите гласные и согласные в слове, найдя точки, в которых существенно меняется дисперсия сигнала. Ограничьте число точек перехода пятью.
numc = 5; [q,r] = findchangepts(mtlb,'Statistic','rms','MaxNumChanges',numc)
q = 5×1
132
778
1646
2500
3454
r = -4.4055e+03
Постройте график сигнала и просмотрите точки изменения.
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)

Создайте двумерную 1000-образную кривую Безье с 20 случайными контрольными точками. Кривая Безье определяется следующим образом:
m-kPk,
где - k-й из контрольных точек, находится в диапазоне от 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)

Создайте и постройте график трехмерной кривой Безье с 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 постепенно ослабляет критерий поиска для включения большего количества точек перехода без превышения заданного максимума. Если какой-либо параметр поиска возвращает больше максимума, то функция ничего не возвращает. Если '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 без выходных аргументов функция строит график сигнала, точек изменения и среднего значения каждого сегмента, заключенного в последовательные точки изменения.
'rms' - Обнаружение изменений среднеквадратического уровня. При звонке findchangepts без выходных аргументов функция строит график сигнала и точек изменения.
'std' - Обнаруживайте изменения стандартного отклонения, используя логарифмическое правдоподобие Гаусса. При звонке findchangepts без выходных аргументов функция строит график сигнала, точек изменения и среднего значения каждого сегмента, заключенного в последовательные точки изменения.
'linear' - Обнаружить изменения в среднем и уклоне. При звонке findchangepts без выходных аргументов функция строит график сигнала, точек изменения и линии, которая наилучшим образом соответствует каждой части сигнала, заключенной в последовательные точки изменения.
Пример: findchangepts([0 1 2 1],'Statistic','mean') возвращает индекс второго образца.
Пример: findchangepts([0 1 2 1],'Statistic','rms') возвращает индекс третьего образца.
'MinDistance' - Минимальное количество выборок между точками измененияМинимальное количество выборок между точками перехода, указанное как пара, разделенная запятыми, состоящая из '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' - Минимальное улучшение общей остаточной ошибкиМинимальное улучшение общей остаточной ошибки для каждой точки перехода, указанной как пара, разделенная запятыми, состоящая из 'MinThreshold' и действительный скаляр, представляющий собой штраф. Эта опция используется для ограничения количества возвращенных существенных изменений путем применения дополнительного штрафа к каждой предполагаемой точке перехода. Невозможно указать 'MinThreshold' и 'MaxNumChanges' одновременно.
Пример: findchangepts([0 1 2],'MinThreshold',0) возвращает два индекса.
Пример: findchangepts([0 1 2],'MinThreshold',1) возвращает один индекс.
Пример: findchangepts([0 1 2],'MinThreshold',2) не возвращает индексы.
Типы данных: single | double
ipt - Расположения точек переходаМестоположения точек перехода, возвращаемые как вектор целочисленных индексов.
residual - Остаточная ошибкаОстаточная ошибка сигнала относительно смоделированных изменений, возвращаемая в виде вектора.
Точка изменения - это выборка или момент времени, в который некоторое статистическое свойство сигнала резко изменяется. Рассматриваемым свойством может быть среднее значение сигнала, его дисперсия или спектральная характеристика.
Чтобы найти точку изменения сигнала, findchangepts использует параметрический глобальный метод. Функция:
Выбирает точку и разделяет сигнал на две секции.
Вычисляет эмпирическую оценку требуемого статистического свойства для каждого раздела.
В каждой точке раздела измеряет, насколько свойство отклоняется от эмпирической оценки. Добавление отклонений для всех точек.
Добавляет раздел отклонений в раздел, чтобы найти общую остаточную ошибку.
Изменяет расположение точки деления до тех пор, пока общая остаточная ошибка не достигнет минимума.
Процедура наиболее ясна, когда выбранная статистика является средней. В этом случае findchangepts минимизирует общую остаточную ошибку от «наилучшего» горизонтального уровня для каждой секции. Учитывая сигнал x1, x2,..., xN и среднее значение подпоследовательности и дисперсию
2≡Sxx'mnn−m+1,
где сумма квадратов
ym⋯yn])),
findchangepts находит k таким, что
N − k + 1) var ([xk⋯xN])
является наименьшим. Этот результат можно обобщить, включив в него другие статистические данные. findchangepts находит k таким, что
([xk⋯xN]))
является наименьшим, учитывая эмпирическую оценку сечений startи измерение отклонения Δ.
Минимизация остаточной ошибки эквивалентна максимизации логарифмической вероятности. Учитывая нормальное распределение со средним λ и дисперсией start2, логарифмическое правдоподобие для N независимых наблюдений равно
−12σ2∑i=1N (xi − λ) 2.
Если 'Statistic' указывается как 'mean', отклонение является фиксированным, и функция использует
1) var ([xm⋯xn]),
как получено ранее.
Если 'Statistic' указывается как 'std', среднее является фиксированным, и функция использует
= (n − m + 1) logvar ([xm⋯xn]).
Если 'Statistic' указывается как 'rms', общее отклонение такое же, как для 'std' но со средним значением, равным нулю:
1n−m+1∑r=mnxr2).
Если 'Statistic' указывается как 'linear'функция использует в качестве полного отклонения сумму квадратичных разностей между значениями сигнала и предсказаниями линейной аппроксимации наименьших квадратов через значения. Эта величина также известна как сумма ошибок квадратов, или SSE. Линия наилучшего соответствия через xm, xm + 1,..., xn
среднее ([xm⋯xn])
и SSE
[mm+1⋯n])) 2 (n − m + 1) var ([mm+1⋯n]).
Сигналы, представляющие интерес, часто имеют более одной точки изменения. Обобщение процедуры является простым, когда известно количество точек перехода. Если число неизвестно, необходимо добавить штрафной термин к остаточной ошибке, так как добавление точек изменения всегда уменьшает остаточную ошибку и приводит к переоборудованию. В крайнем случае каждая точка становится точкой изменения, и остаточная ошибка исчезает. findchangepts использует штрафной термин, который линейно растет с числом точек перехода. Если есть K точек изменения, которые должны быть найдены, то функция минимизирует
) + βK,
где k0 и kK являются соответственно первой и последней выборкой сигнала.
Константа пропорциональности, обозначаемая β и указанная в 'MinThreshold', соответствует фиксированному штрафу, добавленному для каждой точки перехода. findchangepts отклоняет добавление дополнительных точек изменения, если уменьшение остаточной ошибки не соответствует пороговому значению. Набор 'MinThreshold' в ноль, чтобы вернуть все возможные изменения.
Если вы не знаете, какой порог использовать, или имеете приблизительное представление о количестве точек перехода в сигнале, укажите 'MaxNumChanges' вместо этого. Эта опция постепенно увеличивает порог, пока функция не обнаружит меньше изменений, чем указанное значение.
Чтобы выполнить саму минимизацию, findchangepts использует исчерпывающий алгоритм, основанный на динамическом программировании с ранним отказом.
[1] Киллик, Ребекка, Пол Фейрнхед и Идрис Экли. «Оптимальное обнаружение точек изменений с линейной вычислительной стоимостью». Журнал Американской статистической ассоциации. Т. 107, № 500, 2012, стр. 1590-1598.
[2] Лавилль, Марк. «Использование штрафных контрастов для проблемы точки изменения». Обработка сигналов. Том 85, август 2005, стр. 1501-1510.
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.