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 maxima local

Descripción

ejemplo

pks = findpeaks(data) devuelve un vector con el maxima local (picos) 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 .pico localInf Se excluyen los puntos finales que no son 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 los anchos de los picos como el vector y las prominencias de los picos como vector.wp

ejemplo

[___] = findpeaks(data,x) especifica como vector de ubicación y devuelve cualquiera de los argumentos de salida de las 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 de se tomó en el momento cero. y se convierten en unidades de tiempo.datalocsw

ejemplo

[___] = findpeaks(___,Name,Value) especifica las opciones mediante 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 máximos.

Ejemplos

contraer todo

Defina un vector con tres picos y trazarlo.

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

Encuentra el maxima local. Los picos son de salida en orden de ocurrencia. La primera muestra no está incluida 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

Utilícelo 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);

Trazar las curvas individuales y su suma.

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

Utilícelo con la configuración predeterminada para encontrar los picos de la señal y sus ubicaciones.findpeaks

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

Trazar los picos utilizando y etiquetarlos.findpeaks

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

Ordena 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))'))

Crear una señal que consiste en una suma de curvas de campana que se montan 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;

Trazar las curvas individuales y su suma.

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

Se utiliza para localizar y trazar los picos que tienen un protagonismo 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.

Muestre las prominencias y los anchos a media 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. Se sabe que su número alcanza su punto máximo aproximadamente cada 11 años.

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

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

Mejorar 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 aceptables de pico a pico 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 de la mancha solar. Utilice la función para especificar la separación mínima de picos como un archivo .yearsduration

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

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

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

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

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 5 ms de ella.findpeaks A continuación, la función repite el procedimiento para el pico restante más alto y itera hasta que se queda sin picos a 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)

Encuentre 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 mayores que un punto de saturación determinado. Puede optar por ignorar estos picos como sin sentido o incorporarlos a su análisis.

Generar una señal que consiste en un producto de funciones trigonométricas de frecuencias 5 Hz y 3 Hz incrustadas en ruido gaussiano blanco de varianza 0.12. La señal se muestrea durante 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;

Simular una medición saturada truncando cada lectura que es mayor que un límite especificado de 0.32. Trazar la señal saturada.

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

Localice los picos de la señal. informa 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);

Trazar 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 utilizando 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 vectores. debe ser real y tener al menos tres elementos.data

Tipos de datos: double | single

Ubicaciones, especificadas como un vector o una matriz. debe aumentar monotoníamente 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 escalar positiva. La frecuencia de muestreo es el número de muestras por unidad de tiempo. Si la unidad de tiempo es segundos, la frecuencia de muestreo tiene unidades de hercios.

Tipos de datos: double | single

Argumentos de par nombre-valor

Especifique pares opcionales separados por comas de argumentos. es el nombre del argumento y es el valor correspondiente. deben aparecer entre comillas.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 devolverán, especificado como el par separado por comas que consta de un escalar entero positivo. funciona 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 y 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 hasta el más grande.'ascend'

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

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

Tipos de datos: double | single

Prominencia mínima de pico, especificada como el par separado por comas que consta de y un escalar real.'MinPeakProminence' Utilice este argumento para devolver solo 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, especificada como el par separado por comas que consta de un escalar real no negativo.'Threshold' Utilice este argumento para devolver solo los picos que superan sus valores vecinos inmediatos en 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 se especifica un valor para , el algoritmo elige el pico más alto de la señal e ignora todos los picos dentro de ella.'MinPeakDistance''MinPeakDistance' A continuación, la función repite el procedimiento para el pico restante más alto y itera hasta que se queda sin picos a tener en cuenta.

  • Si especifica un vector de ubicación, , debe expresarse en términos de .x'MinPeakDistance'x Si es una matriz, especifique como escalar o como 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 especifica ninguno ni , 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 mediciones de anchura, especificada como el par separado por comas que consta de y a o . estima la anchura 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 por debajo del pico a una distancia vertical igual a la mitad de la prominencia del pico.'halfprom' Consulte para obtener más información.Prominencia

  • posiciona la línea de referencia a la mitad de la altura máxima.'halfheight' La línea se trunca si alguno de sus puntos de interceptación se encuentra más allá de los bordes de los picos seleccionados estableciendo , , y .'MinPeakHeight''MinPeakProminence''Threshold' El borde entre 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 interceptación se calculan mediante interpolación lineal.

Ancho máximo mínimo, especificado como el par separado por comas que consta de un escalar real positivo.'MinPeakWidth' Utilice este argumento para seleccionar solo 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, especifique como escalar o como 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 especifica ninguno ni , 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 de como máximo.'MaxPeakWidth'

  • Si especifica un vector de ubicación, , debe expresarse en términos de .x'MaxPeakWidth'x Si es una matriz, especifique como escalar o como 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 especifica ninguno ni , 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 y 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, la anchura 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, devuelto como vector de valores de señal. Si no hay un maxima local, entonces está vacío.pks

Ubicaciones de picos, devueltas como vector.

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

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

  • Si especifica nor , entonces es un vector de índices enteros.xFslocs

Anchos de pico, devueltos como un vector de números reales. La anchura 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 en sí se encuentran mediante 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, , los anchos se expresan en unidades de tiempo.Fs

  • Si especifica neither nor , los anchos se expresan en unidades de muestras.xFs

Prominencias pico, regresó 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 ambos lados del pico antes de subir de nuevo a un nivel más alto que el 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 destaca el pico debido a su altura intrínseca y su ubicación en relación con otros picos.Prominencia 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 el protagonismo de un pico:

  1. Coloque un marcador en el pico.

  2. Extienda una línea horizontal desde el pico hacia la izquierda y 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 un valle o uno de los puntos finales de la señal.

  4. El 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, cualquiera que sea su altura.findpeaks Esto se refleja en los pasos 2 y 4 y a menudo afecta al valor del nivel de referencia. Considere por ejemplo los picos de esta señal:

Número de picoIntervalo izquierdo se encuentra entre pico yIntervalo derecho se encuentra entre el pico yPunto más bajo en el intervalo izquierdoPunto más bajo en el intervalo correctoNivel de referencia (mínimo más alto)
1Extremo izquierdoCruce debido al pico2Punto final izquierdoaa
2Extremo izquierdoExtremo derechoPunto final izquierdohPunto final 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 pico2Extremo derechodhd
7Cruce debido al pico6Cruce debido al pico8fgg
8Cruce debido al pico6Extremo derechofhf
9Cruce debido al pico8Cruce debido al punto final derechohii

Capacidades ampliadas

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

Introducido en R2007b