Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

findpeaks

Encuentra local maxima

Descripción

ejemplo

pks = findpeaks(data) Devuelve un vector con los máximos locales del vector de señal de entrada,.data A es una muestra de datos que es mayor que sus dos muestras vecinas o es igual a.local peakInf Se excluyen los puntos finales no de señal.Inf Si un pico es plano, la función devuelve solo el punto con el índice más bajo.

ejemplo

[pks,locs] = findpeaks(data) Además, devuelve los índices en los que se producen los picos.

ejemplo

[pks,locs,w,p] = findpeaks(data) Además devuelve las anchuras de los picos como vector y las prominencias de los picos como vector.wp

ejemplo

[___] = findpeaks(data,x) especifica como el vector de ubicación y devuelve cualquiera de los argumentos de salida de sintaxis anteriores. y se expresan en términos de.xlocswx

ejemplo

[___] = findpeaks(data,Fs) Especifica la frecuencia de muestreo, de los datos.Fs Se supone que la primera muestra se ha tomado en el tiempo cero. y se convierten en unidades de tiempo.datalocsw

ejemplo

[___] = findpeaks(___,Name,Value) especifica opciones utilizando argumentos de par nombre-valor además de cualquiera de los argumentos de entrada en sintaxis anteriores.

ejemplo

findpeaks(___) sin argumentos de salida traza la señal y superpone los valores de pico.

Ejemplos

contraer todo

Definir un vector con tres picos y trazar.

data = [25 8 15 5 6 10 10 3 1 20 7]; plot(data)

Encuentra el maxima local. Los picos se emiten en orden de ocurrencia. La primera muestra no se incluye a pesar de ser el máximo. Para el pico plano, la función devuelve solo el punto con el índice más bajo.

pks = findpeaks(data)
pks = 1×3

    15    10    20

Utilice sin argumentos de salida para mostrar los picos.findpeaks

findpeaks(data)

Cree una señal que consista en una suma de curvas de campana. Especifique la ubicación, la altura y la anchura de cada curva.

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);

Trace las curvas individuales y su suma.

plot(x,Gauss,'--',x,PeakSig)

Se usa con la configuración predeterminada para encontrar los picos de la señal y sus ubicaciones.findpeaks

[pks,locs] = findpeaks(PeakSig,x);

Graficar los picos usando y etiquetarlos.findpeaks

findpeaks(PeakSig,x)  text(locs+.02,pks,num2str((1:numel(pks))'))

Ordene los picos de más alto a más corto.

[psor,lsor] = findpeaks(PeakSig,x,'SortStr','descend');  findpeaks(PeakSig,x)  text(lsor+.02,psor,num2str((1:numel(psor))'))

Cree una señal que consista en una suma de curvas de campana montando en un período completo de un coseno. Especifique la ubicación, la altura y la anchura de cada curva.

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;

Trace las curvas individuales y su suma.

plot(x,Gauss,'--',x,PeakSig,x,base)

Utilícelo para ubicar y trazar los picos que tienen una prominencia de al menos 4.findpeaks

findpeaks(PeakSig,x,'MinPeakProminence',4,'Annotate','extents')

Los picos más altos y más bajos son los únicos que satisfacen la condición.

Mostrar las prominencias y las anchuras a la mitad de prominencia de todos los picos.

[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

Las manchas solares son un fenómeno cíclico. Su número se sabe que pico aproximadamente cada 11 años.

Cargue el archivo, que contiene el número promedio de manchas solares observadas cada año de 1700 a 1987.sunspot.dat Busca y traza el maxima.

load sunspot.dat  year = sunspot(:,1); avSpots = sunspot(:,2);  findpeaks(avSpots,year)

Mejore su estimación de la duración del ciclo ignorando los picos que están muy cerca uno del otro. Busque y trace los picos de nuevo, pero ahora restrinja las separaciones de pico a pico aceptables a valores superiores a seis años.

findpeaks(avSpots,year,'MinPeakDistance',6)

Utilice las ubicaciones de pico devueltas para calcular el intervalo medio entre maxima.findpeaks

[pks,locs] = findpeaks(avSpots,year,'MinPeakDistance',6);  meanCycle = mean(diff(locs))
meanCycle = 10.9600 

Cree una matriz utilizando los datos del año.datetime Supongamos que las manchas solares se contaron cada año el 20 de marzo, cerca del equinoccio vernal. Encuentra los años pico de la mancha solar. Utilice la función para especificar la separación de picos mínima como un.yearsduration

ty = datetime(year,3,20);  [pk,lk] = findpeaks(avSpots,ty,'MinPeakDistance',years(6));  plot(ty,avSpots,lk,pk,'o')

Calcule el ciclo medio de manchas solares utilizando la funcionalidad.datetime

dttmCycle = years(mean(diff(lk)))
dttmCycle = 10.9600 

Cree un horario con los datos. Especifique la variable de tiempo en años. Graficar los datos. Muestre las últimas cinco entradas del calendario.

TT = timetable(years(year),avSpots); plot(TT.Time,TT.Variables)

entries = TT(end-4:end,:)
entries=5×2 timetable
      Time      avSpots
    ________    _______

    1983 yrs     66.6  
    1984 yrs     45.9  
    1985 yrs     17.9  
    1986 yrs     13.4  
    1987 yrs     29.3  

Cargue una señal de audio muestreada a 7418 Hz. Seleccione 200 muestras.

load mtlb select = mtlb(1001:1200);

Encuentra los picos que están separados por al menos 5 ms.

Para aplicar esta restricción, elige el pico más alto de la señal y elimina todos los picos dentro de los 5 ms de la misma.findpeaks A continuación, la función repite el procedimiento para el pico restante más alto e IULA hasta que se queda sin picos para tener en cuenta.

findpeaks(select,Fs,'MinPeakDistance',0.005)

Encuentra los picos que tienen una amplitud de al menos 1 V.

findpeaks(select,Fs,'MinPeakHeight',1)

Encuentra los picos que son por lo menos 1 V más alto que sus muestras vecinas.

findpeaks(select,Fs,'Threshold',1)

Encuentre los picos que caen por lo menos 1 V en cada lado antes de que la señal alcance un valor más alto.

findpeaks(select,Fs,'MinPeakProminence',1)

Los sensores pueden devolver lecturas recortadas si los datos son más grandes que un punto de saturación dado. Puede optar por ignorar estos picos como sin sentido o incorporarlos a su análisis.

Generar una señal que consista en un producto de funciones trigonométricas de frecuencias 5 Hz y 3 Hz incrustadas en blanco Gaussiano ruido de varianza 0,1 ². La señal se muestrea por un segundo a una velocidad de 100 Hz. Restablezca el generador de números aleatorios para obtener resultados reproducibles.

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;

Simule una medición saturada truncando cada lectura que sea mayor que un límite especificado de 0,32. Trace la señal saturada.

bnd = 0.32; s(s>bnd) = bnd;  plot(t,s) xlabel('Time (s)')

Localice los picos de la señal. notifica sólo el borde ascendente de cada pico plano.findpeaks

[pk,lc] = findpeaks(s,t);  hold on plot(lc,pk,'x')

Utilice el par nombre-valor para excluir los picos planos.'Threshold' Requerir una diferencia de amplitud mínima de

<math display="block">
<mrow>
<mn>1</mn>
<msup>
<mrow>
<mn>0</mn>
</mrow>
<mrow>
<mo>-</mo>
<mn>4</mn>
</mrow>
</msup>
</mrow>
</math>
entre un pico y sus vecinos.

[pkt,lct] = findpeaks(s,t,'Threshold',1e-4);  plot(lct,pkt,'o','MarkerSize',12)

Cree una señal que consista en una suma de curvas de campana. Especifique la ubicación, la altura y la anchura de cada curva.

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);

Trace las curvas individuales y su suma.

plot(x,Gauss,'--',x,PeakSig) grid

Mida las anchuras de los picos utilizando la media prominencia como referencia.

findpeaks(PeakSig,x,'Annotate','extents')

Mida los anchos de nuevo, esta vez usando la media altura como referencia.

findpeaks(PeakSig,x,'Annotate','extents','WidthReference','halfheight') title('Signal Peak Widths')

Argumentos de entrada

contraer todo

Datos de entrada, especificados como un vector. debe ser real y debe tener al menos tres elementos.data

Tipos de datos: double | single

Ubicaciones, especificadas como un vector o una matriz. debe aumentar monótona y tener la misma longitud que.datetimexdata Si se omite, los índices de se utilizan como ubicaciones.xdata

Tipos de datos: double | single | datetime

Frecuencia de muestreo, especificada como un escalar positivo. La frecuencia de muestreo es el número de muestras por unidad de tiempo. Si la unidad de tiempo es de segundos, la frecuencia de muestreo tiene unidades de Hertz.

Tipos de datos: double | single

Argumentos de par nombre-valor

Especifique pares de argumentos separados por comas opcionales. es el nombre del argumento y es el valor correspondiente. deben aparecer dentro de las cotizaciones.Name,ValueNameValueName Puede especificar varios argumentos de par de nombre y valor en cualquier orden como.Name1,Value1,...,NameN,ValueN

Ejemplo: encuentra los tres picos más altos de la señal.'SortStr','descend','NPeaks',3

Número máximo de picos que se devuelven, especificados como el par separado por comas que consta de un escalar entero positivo. opera desde el primer elemento de los datos de entrada y finaliza cuando el número de picos alcanza el valor de.'NPeaks'findpeaks'NPeaks'

Tipos de datos: double | single

Ordenación de picos, especificada como el par separado por comas que consta de uno de estos valores:'SortStr'

  • Devuelve los picos en el orden en que se producen en los datos de entrada.'none'

  • Devuelve los picos en orden ascendente o creciente, desde el valor más pequeño al más grande.'ascend'

  • Devuelve los picos en orden descendente, desde el valor más grande al más pequeño.'descend'

Altura mínima de pico, especificada como el par separado por comas que consta de un escalar real.'MinPeakHeight' Utilice este argumento para devolver sólo los picos más altos que.findpeaks'MinPeakHeight' Especificar una altura de pico mínima puede reducir el tiempo de procesamiento.

Tipos de datos: double | single

Prominencia mínima máxima, especificada como el par separado por comas que consta de un escalar real.'MinPeakProminence' Utilice este argumento para devolver sólo los picos que tienen una importancia relativa de al menos.findpeaks'MinPeakProminence' Consulte para obtener más información.Prominencia

Tipos de datos: double | single

Diferencia de altura mínima entre un pico y sus vecinos, especificado como el par separado por comas que consta de un escalar real no negativo.'Threshold' Utilice este argumento para devolver sólo los picos que superan sus valores vecinos inmediatos por al menos el valor de.findpeaks'Threshold'

Tipos de datos: double | single

Separación mínima de picos, especificada como el par separado por comas que consta de un escalar real positivo.'MinPeakDistance' Cuando especifica un valor para, el algoritmo elige el pico más alto de la señal e ignora todos los picos dentro de él.'MinPeakDistance''MinPeakDistance' A continuación, la función repite el procedimiento para el pico restante más alto e IULA hasta que se queda sin picos para tener en cuenta.

  • Si especifica un vector de ubicación, debe expresarse en términos de.x'MinPeakDistance'x Si es una matriz, a continuación, especifique como un escalar o como un escalar numérico expresado en días.xdatetime'MinPeakDistance'duration

  • Si especifica una frecuencia de muestreo, debe expresarse en unidades de tiempo.Fs'MinPeakDistance'

  • Si no especifica ni, a continuación, debe expresarse en unidades de muestras.xFs'MinPeakDistance'

Utilice este argumento para ignorar los picos pequeños que se producen en la vecindad de un pico más grande.findpeaks

Tipos de datos: double | single | duration

Altura de referencia para las mediciones de anchura, especificadas como el par separado por comas que consta de y cualquiera o. estima el ancho de un pico como la distancia entre los puntos donde la señal descendente intercepta una línea de referencia horizontal.'WidthReference''halfprom''halfheight'findpeaks La altura de la línea se selecciona utilizando el criterio especificado en:'WidthReference'

  • posiciona la línea de referencia debajo del pico a una distancia vertical igual a la mitad de la prominencia máxima.'halfprom' Consulte para obtener más información.Prominencia

  • posiciona la línea de referencia a la mitad de la altura del pico.'halfheight' La línea se trunca si cualquiera de sus puntos de intercepción se encuentra más allá de los bordes de los picos seleccionados por el ajuste, y.'MinPeakHeight''MinPeakProminence''Threshold' El borde entre los picos se define por la posición horizontal del valle más bajo entre ellos. Los picos con una altura inferior a cero se descartan.

Las ubicaciones de los puntos de intersección se calculan mediante interpolación lineal.

Ancho de pico mínimo, especificado como el par separado por comas que consta de un escalar real positivo.'MinPeakWidth' Utilice este argumento para seleccionar sólo los picos que tienen anchos de al menos.'MinPeakWidth'

  • Si especifica un vector de ubicación, debe expresarse en términos de.x'MinPeakWidth'x Si es una matriz, a continuación, especifique como un escalar o como un escalar numérico expresado en días.xdatetime'MinPeakWidth'duration

  • Si especifica una frecuencia de muestreo, debe expresarse en unidades de tiempo.Fs'MinPeakWidth'

  • Si no especifica ni, a continuación, debe expresarse en unidades de muestras.xFs'MinPeakWidth'

Tipos de datos: double | single | duration

Ancho máximo de pico, especificado como el par separado por comas que consta de un escalar real positivo.'MaxPeakWidth' Utilice este argumento para seleccionar solo los picos que tienen anchos como máximo.'MaxPeakWidth'

  • Si especifica un vector de ubicación, debe expresarse en términos de.x'MaxPeakWidth'x Si es una matriz, a continuación, especifique como un escalar o como un escalar numérico expresado en días.xdatetime'MaxPeakWidth'duration

  • Si especifica una frecuencia de muestreo, debe expresarse en unidades de tiempo.Fs'MaxPeakWidth'

  • Si no especifica ni, a continuación, debe expresarse en unidades de muestras.xFs'MaxPeakWidth'

Tipos de datos: double | single | duration

Estilo de trazado, especificado como el par separado por comas que consta de uno de estos valores:'Annotate'

  • traza la señal y anota la ubicación y el valor de cada pico.'peaks'

  • traza la señal y anota la ubicación, el valor, el ancho y la prominencia de cada pico.'extents'

Este argumento se omite si se llama con argumentos de salida.findpeaks

Argumentos de salida

contraer todo

Maxima local, devuelta como vector de valores de señal. Si no hay máximos locales, entonces está vacío.pks

Ubicaciones máximas, devueltas como vector.

  • Si especifica un vector de ubicación,, a continuación, contiene los valores de los índices de picos.xlocsx

  • Si especifica una frecuencia de muestreo, entonces es un vector de instantes de tiempo.Fslocs

  • Si no especifica ni, a continuación, es un vector de índices enteros.xFslocs

Anchos de pico, devueltos como un vector de números reales. El ancho de cada pico se calcula como la distancia entre los puntos a la izquierda y a la derecha del pico donde la señal intercepta una línea de referencia cuya altura se especifica por.WidthReference Los puntos se encuentran por interpolación lineal.

  • Si especifica un vector de ubicación, los anchos se expresan en términos de.xx

  • Si especifica una frecuencia de muestreo, las anchuras se expresan en unidades de tiempo.Fs

  • Si no especifica ni, entonces las anchuras se expresan en unidades de muestras.xFs

Prominencias máximas, devueltas como un vector de números reales. La prominencia de un pico es la distancia vertical mínima que la señal debe descender a cada lado del pico antes de subir de nuevo a un nivel superior al pico o alcanzar un punto final. Consulte para obtener más información.Prominencia

Más acerca de

contraer todo

Prominencia

El pico mide cuánto sobresale el pico debido a su altura intrínseca y su ubicación en relación a otros picos.prominence Un pico aislado bajo puede ser más prominente que uno que es más alto, pero es un miembro de otro modo poco notable de un rango alto.

Para medir la prominencia de un pico:

  1. Coloque un marcador en el pico.

  2. Extienda una línea horizontal desde el pico a la izquierda y a la derecha hasta que la línea realice una de las siguientes acciones:

    • Cruza la señal porque hay un pico más alto

    • Alcanza el extremo izquierdo o derecho de la señal

  3. Encuentre el mínimo de la señal en cada uno de los dos intervalos definidos en el paso 2. Este punto es o bien un valle o uno de los puntos finales de la señal.

  4. El valor más alto de los dos intervalos mínimos especifica el nivel de referencia. La altura del pico por encima de este nivel es su prominencia.

no hace ninguna suposición sobre el comportamiento de la señal más allá de sus puntos finales, independientemente de su altura.findpeaks Esto se refleja en los pasos 2 y 4 y a menudo afecta el valor del nivel de referencia. Considere, por ejemplo, los picos de esta señal:

Número máximoIntervalo izquierdo se encuentra entre pico yIntervalo de la derecha se encuentra entre pico yPunto más bajo en el intervalo de la izquierdaPunto más bajo en el intervalo correctoNivel de referencia (mínimo más alto)
1Extremo izquierdoCruce debido al pico2Extremo izquierdoaa
2Extremo izquierdoEl extremo derechoExtremo izquierdohExtremo izquierdo
3Cruce debido al pico2Cruce debido al pico4bcc
4Cruce debido al pico2Cruce debido al pico6bdb
5Cruce debido al pico4Cruce debido al pico6dee
6Cruce debido al pico2El extremo derechodhd
7Cruce debido al pico6Cruce debido al pico8fgg
8Cruce debido al pico6El extremo derechofhf
9Cruce debido al pico8Cruce debido al punto final correctohii

Capacidades ampliadas

Generación de código C/C++
Genere código C y C++ mediante MATLAB® Coder™.

Introducido en R2007b