Найдите резкие изменения в сигнале
возвращает индекс в который среднее значение 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 - размерное среднее значение.
задает дополнительные опции с помощью аргументов name-value. Опции включают количество changepoints, чтобы сообщить и статистическая величина, чтобы измериться вместо среднего значения. Смотрите Обнаружение точек изменения для получения дополнительной информации.ipt
= findchangepts(x
,Name,Value
)
findchangepts(___)
без графиков выходных аргументов сигнал и любой обнаружили changepoints. Смотрите Статистическую величину для получения дополнительной информации.
Примечание
Перед графическим выводом, findchangepts
функция очищается (clf
) текущая фигура. Построить сигнал и обнаружило 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);
Постройте сигнал и отобразите changepoints.
findchangepts(mtlb,'Statistic','rms','MaxNumChanges',numc)
Создайте маску сигнала для речевого сигнала на основе changepoint индексов. Смотрите signalMask
для получения дополнительной информации об использовании маски сигнала.
t = (0:length(mtlb)-1)/Fs; roitable = t([[1;q] [q;length(mtlb)]]); x = ["M" "A" "T" "L" "A" "B"]'; y = unique(x,"stable"); c = categorical(x,y); src = table(roitable,c); msk = signalMask(src,"SampleRate",Fs,"RightShortening",1); roimask(msk)
ans=6×2 table
roitable c
___________________ _
0 0.017525 M
0.01766 0.10461 A
0.10475 0.22162 T
0.22176 0.33675 L
0.33688 0.46535 A
0.46549 0.53909 B
Постройте речевой сигнал и обнаруженный changepoints в подграфике наряду с необходимыми областями от маски сигнала:
В верхнем подграфике используйте plotsigroi
функция, чтобы визуализировать области маски сигнала. Настройте настройки, чтобы заставить шкалу палитры появиться наверху графика и отобразить уникальные категории от табличной маски в правильном порядке.
В более низком подграфике постройте исходную речь, сигнализируют и добавляют обнаруженный changepoints как вертикальные линии на графике.
subplot(2,1,1) plotsigroi(msk,mtlb) colorbar('off') clrs = lines(numel(c)-1); cmap = fliplr(clrs); tickLbls = categories(c)'; colormap(gca,clrs); numCategories = numel(c)-1; Ticks = 1/(numCategories*2):1/numCategories:1; colorbar(TickLabels=tickLbls,Ticks=Ticks,TickLength=0,Location='northoutside') subplot(2,1,2) plot(t,mtlb) hold on xline(q/Fs) hold off xlim([0 t(end)])
Чтобы проигрывать звук с паузой после каждого из сегментов, не прокомментируйте следующие линии.
% 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
— Максимальное количество существенных изменений, чтобы возвратитьсяМаксимальное количество существенных изменений, чтобы возвратиться в виде целочисленного скаляра. После нахождения точки со старшим значащим изменением, 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'
Тип изменения, чтобы обнаружить в виде одного из этих значений:
'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 в виде целочисленного скаляра. Если вы не задаете этот номер, то значение по умолчанию 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 в виде действительного скаляра, который представляет штраф. Эта опция действует, чтобы ограничить количество возвращенных существенных изменений путем применения дополнительного штрафа каждому предполагаемому 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, и среднее значение подпоследовательности и отклонение
где sum of squares
findchangepts
находит k таким образом что
является самым маленьким. Этот результат может быть обобщен, чтобы включить другую статистику. findchangepts
находит k таким образом что
является самым маленьким, учитывая раздел эмпирическая оценка χ и измерение отклонения Δ.
Минимизация остаточной ошибки эквивалентна максимизации логарифмической вероятности. Учитывая нормальное распределение со средним μ и отклонением σ2, логарифмическая правдоподобность для N независимые наблюдения
Если 'Statistic'
задан как 'mean'
, отклонение фиксируется и функциональное использование
как получено ранее.
Если 'Statistic'
задан как 'std'
, среднее значение фиксируется и функциональное использование
Если 'Statistic'
задан как 'rms'
, общее отклонение эквивалентно для 'std'
но с обнуленным средним значением:
Если 'Statistic'
задан как 'linear'
, функция использует в качестве общего отклонения сумму различий в квадрате между значениями сигналов и предсказаниями наименьших квадратов линейная подгонка через значения. Это количество также известно как error sum of squares или SSE. Наилучшая эмпирическая кривая через xm, x m +1, …, xn
и SSE
Сигналы интереса часто имеют больше чем один changepoint. Обобщение процедуры является прямым, когда количество changepoints известно. Когда номер неизвестен, необходимо добавить, что термин штрафа к остаточной ошибке, начиная с добавления changepoints всегда уменьшает остаточную ошибку и приводит к сверхподбору кривой. В крайнем случае каждая точка становится changepoint, и остаточная ошибка исчезает. findchangepts
использует термин штрафа, который растет линейно с количеством changepoints. Если существует K changepoints, чтобы быть найденным, то функция минимизирует
где k 0 и kK являются соответственно первыми и последняя выборка сигнала.
Коэффициент пропорциональности, обозначенный β и заданный в 'MinThreshold'
, соответствует фиксированному штрафу, добавленному для каждого changepoint. findchangepts
отклонения, добавляющие дополнительный changepoints, если уменьшение в остаточной ошибке не соответствует порогу. Установите 'MinThreshold'
обнулять, чтобы возвратить все возможные изменения.
Если вы не знаете, что порог использовать или иметь общее представление о количестве changepoints в сигнале, задайте 'MaxNumChanges'
вместо этого. Эта опция постепенно увеличивает порог, пока функция не находит меньше изменений, чем заданное значение.
Выполнять саму минимизацию, findchangepts
использует исчерпывающий алгоритм на основе динамического программирования с ранним отказом.
[1] Killick, Ребекка, Пол Фирнхэд и Идрис А. Экли. “Оптимальное обнаружение changepoints с линейной вычислительной стоимостью”. Журнал американской Статистической Ассоциации. Издание 107, № 500, 2012, стр 1590–1598.
[2] Lavielle, Марк. “Используя оштрафованные контрасты для проблемы точки перехода”. Обработка сигналов. Издание 85, август 2005, стр 1501–1510.
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.