使用findpeaks
在一组数据中查找局部最大值的值和位置。
该文件spots_num.mat
包含了从1749年到2012年每年观测到的太阳黑子的平均数量。这些数据可以从NASA获得。
找出最大值和它们发生的年份。把它们和数据一起画出来。
负载(“spots_num.mat”) [pks,locs] = findpeaks(avSpots);情节(avSpots,年(loc),”或“)包含(“年”) ylabel (“数量”)轴紧
有些山峰彼此非常接近。那些不是定期复发的。每50年大约有5个这样的峰值。
为了更好地估计周期持续时间,请使用findpeaks
再次强调,但这一次将峰与峰之间的间隔限制在至少6年。计算最大值之间的平均间隔。
(pks, loc) = findpeaks (avSpots,“MinPeakDistance”6);情节(avSpots,年(loc),”或“)包含(“年”) ylabel (“数量”)标题(“太阳黑子”)轴紧传奇(“数据”,“高峰”,“位置”,“西北”)
周期= diff (loc);meanCycle =意味着(周期)
meanCycle = 10.8696
众所周知,太阳活动大约每11年周期一次。用傅里叶变换来检验。去掉信号的平均值以集中注意其波动。回想一下,抽样率是以年为单位计算的。使用奈奎斯特频率以内的频率。
Fs = 1;Nf = 512;df = Fs / Nf;f = 0: df: Fs /第二代;trSpots = fftshift (fft (avSpots-mean (avSpots)、Nf));dBspots = 20 * log10 (abs (trSpots (Nf / 2 + 1: Nf)));Yaxis = [20 85];情节(f dBspots 1。/ (meanCycle meanCycle],桠溪)包含(的频率(年^ {1})) ylabel ('| FFT | (dB)')轴([0 1/2 yaxis])文本(1/meanCycle+.02,25[“< = = 1 /”num2str (meanCycle)))
傅里叶变换确实在预期频率处达到峰值,证实了11年猜想。你也可以通过定位傅里叶变换的峰值来找到周期。
[pk,MaxFreq]=findpeaks(dBspots,“NPeaks”,1,“SortStr”,“下”);时间= 1 / f (MaxFreq)
时间= 10.8936
持有在情节(f (MaxFreq)、pk、”或“)举行从传奇(傅里叶变换的,“1 / meanCycle”,“1 /时间”)
这两个估计相当吻合。