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.

Buscar picos en los datos

Se utiliza para buscar valores y ubicaciones de maxima local en un conjunto de datos.findpeaks

El archivo contiene el número medio de manchas solares observadas cada año de 1749 a 2012.spots_num.mat Los datos están disponibles en la NASA.

Encuentra el maxima y sus años de ocurrencia. Trazarlos junto con los datos.

load(fullfile(matlabroot,'examples','signal','spots_num.mat'))  [pks,locs] = findpeaks(avSpots);  plot(year,avSpots,year(locs),pks,'or') xlabel('Year') ylabel('Number') axis tight

Algunos picos están muy cerca el uno del otro. Los que no se repiten a intervalos regulares. Hay aproximadamente cinco picos de este tipo por período de 50 años.

Para hacer una mejor estimación de la duración del ciclo, utilizar de nuevo, pero esta vez restringir la separación de pico a pico a por lo menos seis años.findpeaks Calcular el intervalo medio entre maxima.

[pks,locs] = findpeaks(avSpots,'MinPeakDistance',6);  plot(year,avSpots,year(locs),pks,'or') xlabel('Year') ylabel('Number') title('Sunspots') axis tight  legend('Data','peaks','Location','NorthWest')

 cycles = diff(locs); meanCycle = mean(cycles)
meanCycle = 10.8696 

Es bien sabido que la actividad solar se ciclos aproximadamente cada 11 años. Compruebe mediante la transformación de Fourier. Retire la media de la señal para concentrarse en sus fluctuaciones. Recuerde que la frecuencia de muestreo se mide en años. Utilice frecuencias hasta la frecuencia Nyquist.

Fs = 1; Nf = 512;  df = Fs/Nf; f = 0:df:Fs/2-df;  trSpots = fftshift(fft(avSpots-mean(avSpots),Nf));  dBspots = 20*log10(abs(trSpots(Nf/2+1:Nf)));  yaxis = [20 85]; plot(f,dBspots,1./[meanCycle meanCycle],yaxis) xlabel('Frequency (year^{-1})') ylabel('| FFT | (dB)') axis([0 1/2 yaxis]) text(1/meanCycle + .02,25,['<== 1/' num2str(meanCycle)])

La transformación de Fourier de hecho alcanza su punto máximo a la frecuencia esperada, confirmando la conjetura de 11 años. También puede encontrar el período localizando el pico más alto de la transformación de Fourier.

[pk,MaxFreq] = findpeaks(dBspots,'NPeaks',1,'SortStr','descend');  Period = 1/f(MaxFreq)
Period = 10.8936 
 hold on plot(f(MaxFreq),pk,'or') hold off legend('Fourier transform','1/meanCycle','1/Period')

Las dos estimaciones coinciden bastante bien.

Consulte también

|

Temas relacionados