Найти локальные максимумы
возвращает вектор с локальными максимумами (пиками) вектора входного сигнала, pks = findpeaks(data)data. Локальный пик - это выборка данных, которая либо больше двух соседних выборок, либо равна Inf. Не -Inf конечные точки сигнала исключаются. Если пик плоский, функция возвращает только точку с самым низким индексом.
[___] = findpeaks(___, задает параметры, использующие аргументы пары имя-значение в дополнение к любому из входных аргументов в предыдущих синтаксисах.Name,Value)
findpeaks(___) без выходных аргументов строит график сигнала и накладывает пиковые значения.
Определите вектор с тремя пиками и постройте его график.
data = [25 8 15 5 6 10 10 3 1 20 7]; plot(data)

Найдите локальные максимумы. Пики выводятся в порядке возникновения. Первая выборка не включена, несмотря на то, что она является максимальной. Для плоского пика функция возвращает только точку с наименьшим индексом.
pks = findpeaks(data)
pks = 1×3
15 10 20
Использовать findpeaks без выходных аргументов для отображения пиков.
findpeaks(data)

Создайте сигнал, состоящий из суммы кривых колокола. Укажите местоположение, высоту и ширину каждой кривой.
x = linspace(0,1,1000); Pos = [1 2 3 5 7 8]/10; Hgt = [3 4 4 2 2 3]; Wdt = [2 6 3 3 4 6]/100; for n = 1:length(Pos) Gauss(n,:) = Hgt(n)*exp(-((x - Pos(n))/Wdt(n)).^2); end PeakSig = sum(Gauss);
Постройте график отдельных кривых и их суммы.
plot(x,Gauss,'--',x,PeakSig)
Использовать findpeaks с настройками по умолчанию для поиска пиков сигнала и их местоположений.
[pks,locs] = findpeaks(PeakSig,x);
Постройте график пиков с помощью findpeaks и маркировать их.
findpeaks(PeakSig,x) text(locs+.02,pks,num2str((1:numel(pks))'))

Сортируйте пики от самых высоких до самых коротких.
[psor,lsor] = findpeaks(PeakSig,x,'SortStr','descend'); findpeaks(PeakSig,x) text(lsor+.02,psor,num2str((1:numel(psor))'))

Создайте сигнал, состоящий из суммы кривых колокола, движущихся по полному периоду косинуса. Укажите местоположение, высоту и ширину каждой кривой.
x = linspace(0,1,1000); base = 4*cos(2*pi*x); Pos = [1 2 3 5 7 8]/10; Hgt = [3 7 5 5 4 5]; Wdt = [1 3 3 4 2 3]/100; for n = 1:length(Pos) Gauss(n,:) = Hgt(n)*exp(-((x - Pos(n))/Wdt(n)).^2); end PeakSig = sum(Gauss)+base;
Постройте график отдельных кривых и их суммы.
plot(x,Gauss,'--',x,PeakSig,x,base)
Использовать findpeaks для определения местоположения и построения графика пиков, имеющих значение по меньшей мере 4.
findpeaks(PeakSig,x,'MinPeakProminence',4,'Annotate','extents')

Самые высокие и самые низкие пики - единственные, которые удовлетворяют условию.
Отображение обозначений и ширины в половине обозначений всех пиков.
[pks,locs,widths,proms] = findpeaks(PeakSig,x); widths
widths = 1×6
0.0154 0.0431 0.0377 0.0625 0.0274 0.0409
proms
proms = 1×6
2.6816 5.5773 3.1448 4.4171 2.9191 3.6363
Солнечные пятна - явление циклическое. Известно, что их число достигает пика примерно каждые 11 лет.
Загрузить файл sunspot.dat, который содержит среднее количество солнечных пятен, наблюдаемых каждый год с 1700 по 1987 год. Найдите и постройте графики максимумов.
load sunspot.dat
year = sunspot(:,1);
avSpots = sunspot(:,2);
findpeaks(avSpots,year)
Улучшите оценку продолжительности цикла, игнорируя пики, которые очень близки друг к другу. Найдите и постройте график пиков снова, но теперь ограничьте допустимые разделения пиков до значений, превышающих шесть лет.
findpeaks(avSpots,year,'MinPeakDistance',6)
Использовать пиковые местоположения, возвращенные findpeaks вычисляют средний интервал между максимумами.
[pks,locs] = findpeaks(avSpots,year,'MinPeakDistance',6);
meanCycle = mean(diff(locs))meanCycle = 10.9600
Создать datetime массив с использованием данных года. Предположим, что солнечные пятна подсчитывались каждый год 20 марта, близко к весеннему равноденствию. Найдите пиковые солнечные пятна лет. Используйте years для указания минимального пикового разделения как duration.
ty = datetime(year,3,20); [pk,lk] = findpeaks(avSpots,ty,'MinPeakDistance',years(6)); plot(ty,avSpots,lk,pk,'o')

Вычислите средний цикл солнечных пятен с помощью datetime функциональные возможности.
dttmCycle = years(mean(diff(lk)))
dttmCycle = 10.9600
Создайте расписание с данными. Укажите переменную времени в годах. Постройте график данных. Показать последние пять записей расписания.
TT = timetable(years(year),avSpots); plot(TT.Time,TT.Variables)

entries = TT(end-4:end,:)
entries=5×1 timetable
Time avSpots
________ _______
1983 yrs 66.6
1984 yrs 45.9
1985 yrs 17.9
1986 yrs 13.4
1987 yrs 29.3
Загрузите звуковой сигнал с частотой 7418 Гц. Выберите 200 образцов.
load mtlb
select = mtlb(1001:1200);Найдите пики, которые разделены по крайней мере 5 мс.
Чтобы применить это ограничение, findpeaks выбирает самый высокий пик в сигнале и устраняет все пики в пределах 5 мс от него. Затем функция повторяет процедуру для самого высокого оставшегося пика и выполняет итерацию до тех пор, пока у нее не закончатся пики для рассмотрения.
findpeaks(select,Fs,'MinPeakDistance',0.005)
Найдите пики, которые имеют амплитуду не менее 1 В.
findpeaks(select,Fs,'MinPeakHeight',1)
Найдите пики, которые по крайней мере на 1 В выше, чем их соседние образцы.
findpeaks(select,Fs,'Threshold',1)
Найдите пики, которые падают по крайней мере на 1 В с каждой стороны, прежде чем сигнал достигнет более высокого значения.
findpeaks(select,Fs,'MinPeakProminence',1)
Датчики могут возвращать отсеченные показания, если данные превышают заданную точку насыщения. Можно игнорировать эти пики как бессмысленные или включить их в анализ.
Сформировать сигнал, состоящий из произведения тригонометрических функций частот 5 Гц и 3 Гц, встроенных в белый гауссов шум дисперсии 0,1 ². Дискретизируют сигнал в течение одной секунды со скоростью 100 Гц. Сбросьте генератор случайных чисел для воспроизводимых результатов.
rng default
fs = 1e2;
t = 0:1/fs:1-1/fs;
s = sin(2*pi*5*t).*sin(2*pi*3*t)+randn(size(t))/10;Моделирование насыщенного измерения путем усечения всех показаний, превышающих заданное ограничение 0,32. Постройте график насыщенного сигнала.
bnd = 0.32;
s(s>bnd) = bnd;
plot(t,s)
xlabel('Time (s)')
Найдите пики сигнала. findpeaks сообщает только передний край каждого плоского пика.
[pk,lc] = findpeaks(s,t); hold on plot(lc,pk,'x')

Используйте 'Threshold' пара имя-значение, чтобы исключить плоские пики. Требуется минимальная разность амплитуд между пиком и его соседями.
[pkt,lct] = findpeaks(s,t,'Threshold',1e-4); plot(lct,pkt,'o','MarkerSize',12)

Создайте сигнал, состоящий из суммы кривых колокола. Укажите местоположение, высоту и ширину каждой кривой.
x = linspace(0,1,1000); Pos = [1 2 3 5 7 8]/10; Hgt = [4 4 2 2 2 3]; Wdt = [3 8 4 3 4 6]/100; for n = 1:length(Pos) Gauss(n,:) = Hgt(n)*exp(-((x - Pos(n))/Wdt(n)).^2); end PeakSig = sum(Gauss);
Постройте график отдельных кривых и их суммы.
plot(x,Gauss,'--',x,PeakSig)
grid
Измерьте ширину пиков, используя в качестве привязки половинную заметность.
findpeaks(PeakSig,x,'Annotate','extents')

Снова измерьте ширину, на этот раз используя в качестве привязки половинную высоту.
findpeaks(PeakSig,x,'Annotate','extents','WidthReference','halfheight') title('Signal Peak Widths')

data - Входные данныеВходные данные, указанные как вектор. data должен быть действительным и иметь по крайней мере три элемента.
Типы данных: double | single
x - Местоположенияdatetime множествоРасположения, указанные как вектор или datetime массив. x должны монотонно увеличиваться и иметь ту же длину, что и data. Если x опускается, то индексы data используются в качестве местоположений.
Типы данных: double | single | datetime
Fs - Частота выборкиЧастота выборки, заданная как положительный скаляр. Частота выборки - это количество выборок в единицу времени. Если единицей времени являются секунды, частота дискретизации составляет единицы герц.
Типы данных: double | single
Укажите дополнительные пары, разделенные запятыми Name,Value аргументы. Name является именем аргумента и Value - соответствующее значение. Name должен отображаться внутри кавычек. Можно указать несколько аргументов пары имен и значений в любом порядке как Name1,Value1,...,NameN,ValueN.
'SortStr','descend','NPeaks',3 находит три самых высоких пика сигнала.'NPeaks' - Максимальное количество пиковМаксимальное количество возвращаемых пиков, указанное как пара, разделенная запятыми, состоящая из 'NPeaks' и положительный целочисленный скаляр. findpeaks работает от первого элемента входных данных и заканчивается, когда число пиков достигает значения 'NPeaks'.
Типы данных: double | single
'SortStr' - Пиковая сортировка'none' (по умолчанию) | 'ascend' | 'descend'Пиковая сортировка, указанная как разделенная запятыми пара, состоящая из 'SortStr' и одно из этих значений:
'none' возвращает пики в порядке их появления во входных данных.
'ascend' возвращает пики в возрастающем или возрастающем порядке от наименьшего к наибольшему значению.
'descend' возвращает пики в порядке убывания, от наибольшего к наименьшему значению.
'MinPeakHeight' - Минимальная высота пика-Inf (по умолчанию) | вещественный скалярМинимальная высота пика, указанная как разделенная запятыми пара, состоящая из 'MinPeakHeight' и реальный скаляр. Используйте этот аргумент, чтобы иметь findpeaks возвращать только те пики, которые выше 'MinPeakHeight'. Указание минимальной высоты пика может сократить время обработки.
Типы данных: double | single
'MinPeakProminence' - Минимальное пиковое значениеМинимальное пиковое значение, указанное как пара, разделенная запятыми, состоящая из 'MinPeakProminence' и реальный скаляр. Используйте этот аргумент, чтобы иметь findpeaks возвращать только те пики, которые имеют относительную важность как минимум 'MinPeakProminence'. Дополнительные сведения см. в разделе Заметность.
Типы данных: double | single
'Threshold' - Минимальная разность высотМинимальная разность высот между пиком и его соседями, заданная как разделенная запятыми пара, состоящая из 'Threshold' и неотрицательный действительный скаляр. Используйте этот аргумент, чтобы иметь findpeaks возвращать только те пики, которые превышают их непосредственные соседние значения по крайней мере на значение 'Threshold'.
Типы данных: double | single
'MinPeakDistance' - Минимальное пиковое разделениеМинимальное пиковое разделение, указанное как пара, разделенная запятыми, состоящая из 'MinPeakDistance' и положительный действительный скаляр. При указании значения для 'MinPeakDistance'алгоритм выбирает самый высокий пик в сигнале и игнорирует все пики внутри 'MinPeakDistance' его. Затем функция повторяет процедуру для самого высокого оставшегося пика и выполняет итерацию до тех пор, пока у нее не закончатся пики для рассмотрения.
Если указан вектор местоположения, x, то 'MinPeakDistance' должно быть выражено в терминах x. Если x является datetime массив, затем укажите 'MinPeakDistance' в качестве duration скаляр или числовой скаляр, выраженный в днях.
Если вы указываете частоту выборки, Fs, то 'MinPeakDistance' должно быть выражено в единицах времени.
Если не указано ни x ни Fs, то 'MinPeakDistance' должен быть выражен в единицах выборки.
Используйте этот аргумент, чтобы иметь findpeaks игнорировать небольшие пики, которые возникают в районе большего пика.
Типы данных: double | single | duration
'WidthReference' - Контрольная высота для измерений ширины'halfprom' (по умолчанию) | 'halfheight'Контрольная высота для измерений ширины, указанная как разделенная запятыми пара, состоящая из 'WidthReference' и либо 'halfprom' или 'halfheight'. findpeaks оценивает ширину пика как расстояние между точками, где нисходящий сигнал перехватывает горизонтальную опорную линию. Высота линии выбирается с использованием критерия, указанного в 'WidthReference':
'halfprom' размещает опорную линию под пиком на расстоянии по вертикали, равном половине высоты пика. Дополнительные сведения см. в разделе Известность.
'halfheight' размещает опорную линию на половине высоты пика. Линия усекается, если какая-либо из ее точек пересечения лежит за границами пиков, выбранных настройкой 'MinPeakHeight', 'MinPeakProminence', и 'Threshold'. Граница между вершинами определяется горизонтальным положением самой нижней долины между ними. Отбрасывают пики высотой менее нуля.
Местоположения точек пересечения вычисляются с помощью линейной интерполяции.
'MinPeakWidth' - Минимальная ширина пикаМинимальная ширина пика, заданная как разделенная запятыми пара, состоящая из 'MinPeakWidth' и положительный действительный скаляр. Этот аргумент используется для выбора только тех пиков, ширина которых не менее 'MinPeakWidth'.
Если указан вектор местоположения, x, то 'MinPeakWidth' должно быть выражено в терминах x. Если x является datetime массив, затем укажите 'MinPeakWidth' в качестве duration скаляр или числовой скаляр, выраженный в днях.
Если вы указываете частоту выборки, Fs, то 'MinPeakWidth' должно быть выражено в единицах времени.
Если не указано ни x ни Fs, то 'MinPeakWidth' должен быть выражен в единицах выборки.
Типы данных: double | single | duration
'MaxPeakWidth' - Максимальная ширина пикаInf (по умолчанию) | положительный вещественный скалярМаксимальная ширина пика, заданная как разделенная запятыми пара, состоящая из 'MaxPeakWidth' и положительный действительный скаляр. Этот аргумент используется для выбора только тех пиков, ширина которых не превышает 'MaxPeakWidth'.
Если указан вектор местоположения, x, то 'MaxPeakWidth' должно быть выражено в терминах x. Если x является datetime массив, затем укажите 'MaxPeakWidth' в качестве duration скаляр или числовой скаляр, выраженный в днях.
Если вы указываете частоту выборки, Fs, то 'MaxPeakWidth' должно быть выражено в единицах времени.
Если не указано ни x ни Fs, то 'MaxPeakWidth' должен быть выражен в единицах выборки.
Типы данных: double | single | duration
'Annotate' - Стиль печати'peaks' (по умолчанию) | 'extents'Стиль печати, заданный как разделенная запятыми пара, состоящая из 'Annotate' и одно из этих значений:
'peaks' строит график сигнала и аннотирует местоположение и значение каждого пика.
'extents' строит график сигнала и аннотирует местоположение, значение, ширину и заметность каждого пика.
Этот аргумент игнорируется при вызове findpeaks с выходными аргументами.
pks - Локальные максимумыЛокальные максимумы, возвращаемые как вектор значений сигнала. Если локальных максимумов нет, то pks пуст.
locs - Расположение пиковМестоположения пиков, возвращенные в виде вектора.
w - Ширина пикаШирина пика, возвращаемая как вектор вещественных чисел. Ширина каждого пика вычисляется как расстояние между точками слева и справа от пика, где сигнал перехватывает опорную линию, высота которой задана WidthReference. Сами точки находят с помощью линейной интерполяции.
p - Пиковые значенияПиковые значения, возвращаемые как вектор вещественных чисел. Яркость пика - это минимальное вертикальное расстояние, на которое сигнал должен опуститься с каждой стороны пика, прежде чем либо вернуться на уровень выше пика, либо достичь конечной точки. Дополнительные сведения см. в разделе Известность.
Видность пика измеряет степень выделения пика из-за его собственной высоты и расположения относительно других пиков. Низкий изолированный пик может быть более заметным, чем более высокий, но в остальном является ничем не примечательным элементом высокого диапазона.
Для измерения значимости пика:
Поместите маркер на вершину.
Удлините горизонтальную линию от вершины влево и вправо до тех пор, пока линия не выполнит одно из следующих действий:
Пересекает сигнал, потому что есть более высокий пик
Достигает левого или правого конца сигнала
Найдите минимум сигнала в каждом из двух интервалов, определенных на шаге 2. Эта точка является либо долиной, либо одной из конечных точек сигнала.
Более высокий из двух минимумов интервалов определяет опорный уровень. Высота пика над этим уровнем - его возвышенность.
findpeaks не делает никаких предположений о поведении сигнала за пределами его конечных точек, независимо от их высоты. Это отражено в шагах 2 и 4 и часто влияет на значение опорного уровня. Рассмотрим, например, пики этого сигнала:

| Пиковое число | Левый интервал лежит между пиком и | Правый интервал находится между пиком и | Самая низкая точка в левом интервале | Самая низкая точка правого интервала | Опорный уровень (максимальный минимум) |
|---|---|---|---|---|---|
| 1 | Левый конец | Пересечение из-за пика 2 | Левая конечная точка | a | a |
| 2 | Левый конец | Правый конец | Левая конечная точка | h | Левая конечная точка |
| 3 | Пересечение из-за пика 2 | Пересечение из-за пика 4 | b | c | c |
| 4 | Пересечение из-за пика 2 | Пересечение из-за пика 6 | b | d | b |
| 5 | Пересечение из-за пика 4 | Пересечение из-за пика 6 | d | e | e |
| 6 | Пересечение из-за пика 2 | Правый конец | d | h | d |
| 7 | Пересечение из-за пика 6 | Пересечение из-за пика 8 | f | g | g |
| 8 | Пересечение из-за пика 6 | Правый конец | f | h | f |
| 9 | Пересечение из-за пика 8 | Пересечение из-за правой конечной точки | h | я | я |
fminbnd | fminsearch | fzero | islocalmax | islocalmin | max
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.