Обнаружение резких изменений в сигнале
возвращает индекс, при котором среднее значение 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(___)
без выходных аргументов строит график сигнала и любых обнаруженных точек изменения. Для получения дополнительной информации см. раздел «Статистика».
Загрузите файл данных, содержащий запись свистка train, выбранного с частотой 8192 Гц. Найдите 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
Разберите гласные и согласные в слове, найдя точки, в которых отклонение сигнала значительно изменяется. Ограничьте количество точек изменения пятью.
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;
Найдите точки, где средний сигнал изменяется наиболее значительно. The '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 случайными контрольными точками. Кривая Безье определяется:
,
где является 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)
Сгенерируйте и постройте график трехмерной кривой Безье с 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
- Остаточная ошибкаОстаточная ошибка сигнала против смоделированных изменений, возвращенная как вектор.
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 является
Сигналы, представляющие интерес, часто имеют более чем один пункт изменения. Обобщение процедуры просто, когда известно количество точек изменения. Когда число неизвестно, необходимо добавить срок штрафа к остаточной ошибке, поскольку добавление точек изменения всегда уменьшает остаточную ошибку и приводит к сверхподбору кривой. В крайнем случае каждая точка становится точкой изменения, и остаточная ошибка исчезает. findchangepts
использует термин штрафа, который линейно увеличивается с количеством точек изменения. Если существует K точек изменения, которые будут найдены, то функция минимизирует
где k 0 и kK являются соответственно первой и последней выборке сигнала.
Константа пропорциональности, обозначаемая β и заданная в 'MinThreshold'
, соответствует фиксированному штрафу, добавленному для каждой точки изменения. findchangepts
отклоняет добавление дополнительных точек изменения, если уменьшение остаточной ошибки не соответствует порогу. Задайте 'MinThreshold'
до нуля, чтобы вернуть все возможные изменения.
Если вы не знаете, какой порог использовать или имеете грубое представление о количестве точек изменения в сигнале, задайте 'MaxNumChanges'
вместо этого. Эта опция постепенно увеличивает порог, пока функция не найдет меньше изменений, чем заданное значение.
Чтобы выполнить саму минимизацию, findchangepts
использует исчерпывающий алгоритм, основанный на динамическом программировании с ранним отказом.
[1] Killick, Rebecca, Paul Fearnhead, and Idris A. Eckley. «Оптимальное обнаружение точек изменения с линейной вычислительной стоимостью». Журнал Американской статистической ассоциации. Том 107, № 500, 2012, стр. 1590-1598.
[2] Лавиль, Марк. «Использование штрафуемых контрастов для задачи изменения точки». Обработка сигналов. Том 85, август 2005, стр. 1501-1510.
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.