Это часто затрудняет, чтобы охарактеризовать колебательное поведение в данных путем рассмотрения измерений времени. Спектральный анализ может помочь определить, является ли сигнал периодическим, и измерьте различные циклы.
Термометр в офисном здании измеряет внутреннюю температуру каждое полчаса в течение четырех месяцев. Загрузите данные и постройте их. Преобразуйте температуру в градусы Цельсия. Измерьте время в неделях. Частота дискретизации является таким образом 2 измерениями/час × 24 часа/день × 7 дней/неделя = 336 измерений/неделя.
load officetemp tempC = (temp - 32)*5/9; fs = 2*24*7; t = (0:length(tempC) - 1)/fs; plot(t,tempC) xlabel('Time (weeks)') ylabel('Temperature ( {}^\circC )') axis tight
Температура, действительно кажется, колеблется, но длины циклов не могут быть определены легко. Посмотрите на содержимое частоты сигнала вместо этого.
Вычтите среднее значение, чтобы сконцентрироваться на температурных колебаниях. Вычислите и постройте периодограмму.
tempnorm = tempC - mean(tempC); [pxx,f] = periodogram(tempnorm,[],[],fs); plot(f,pxx) ax = gca; ax.XLim = [0 10]; xlabel('Frequency (cycles/week)') ylabel('Magnitude')
Температура ясно имеет ежедневный цикл и еженедельный цикл. Результат не удивителен: температура выше, когда люди работают и понижаются ночами и по выходным.
findpeaks
| periodogram
| xcorr