Main Content

La traducción de esta página aún no se ha actualizado a la versión más reciente. Haga clic aquí para ver la última versión en inglés.

Encontrar picos en datos

Utilice la función findpeaks para buscar valores y ubicaciones de máximos locales en un conjunto de datos.

El archivo spots_num contiene el número medio de manchas solares observadas cada año desde 1749 hasta 2012. Encuentre los máximos y los años en que se producen. Represéntelos junto con los datos.

load("spots_num")

[pks,locs] = findpeaks(avSpots);

plot(year,avSpots,year(locs),pks,"o")
xlabel("Year")
ylabel("Sunspot Number")
axis tight

Figure contains an axes object. The axes object with xlabel Year, ylabel Sunspot Number contains 2 objects of type line. One or more of the lines displays its values using only markers

Algunos picos están muy próximos entre sí. Los que no lo están se producen en intervalos regulares. Se producen aproximadamente cinco picos de este tipo en cada periodo de 50 años.

Para calcular mejor la duración del ciclo, vuelva a utilizar findpeaks, pero ahora restrinja la separación entre picos a, al menos, seis años. Calcule el intervalo medio entre máximos.

[pks,locs] = findpeaks(avSpots,MinPeakDistance=6);

plot(year,avSpots,year(locs),pks,"o")
xlabel("Year")
ylabel("Sunspot Number")
axis tight
legend(["Data" "peaks"],Location="NorthWest")

Figure contains an axes object. The axes object with xlabel Year, ylabel Sunspot Number contains 2 objects of type line. One or more of the lines displays its values using only markers These objects represent Data, peaks.

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

Se sabe que los ciclos de actividad solar son de aproximadamente 11 años. Compruébelo utilizando la transformada de Fourier. Elimine la media de la señal para concentrarse en sus fluctuaciones. Recuerde que la tasa de muestreo se mide en años. Utilice frecuencias hasta la frecuencia de Nyquist.

fs = 1;
Nf = 512;

df = fs/Nf;
f = 0:df:fs/2-df;

trSpots = fftshift(fft(avSpots-mean(avSpots),Nf));
dBspots = mag2db(abs(trSpots(Nf/2+1:Nf)));

plot(f,dBspots)
xline(1/meanCycle,Color="#77AC30")
xlabel("Frequency (year^{-1})")
ylabel("| FFT | (dB)")
ylim([20 85])
text(1/meanCycle + 0.02,25,"<== 1/"+num2str(meanCycle))

Figure contains an axes object. The axes object with xlabel Frequency (year toThePowerOf -1 baseline ), ylabel | FFT | (dB) contains 3 objects of type line, constantline, text.

La transformada de Fourier alcanza un pico en la frecuencia esperada, confirmando así la suposición de los 11 años. También puede encontrar el periodo localizando el pico más alto de la transformada de Fourier. Ambos cálculos coincidirán bastante.

[pk,MaxFreq] = findpeaks(dBspots,NPeaks=1,SortStr="descend");

Period = 1/f(MaxFreq)
Period = 10.8936
hold on
plot(f(MaxFreq),pk,"o")
hold off
legend(["Fourier transform" "1/meanCycle" "1/Period"])

Figure contains an axes object. The axes object with xlabel Frequency (year toThePowerOf -1 baseline ), ylabel | FFT | (dB) contains 4 objects of type line, constantline, text. One or more of the lines displays its values using only markers These objects represent Fourier transform, 1/meanCycle, 1/Period.

Consulte también

|

Temas relacionados