Часто трудно охарактеризовать колебательное поведение в данных, рассматривая измерения времени. Спектральный анализ может помочь определить, является ли сигнал периодическим, и измерить различные циклы.
Термометр в офисном здании измеряет внутреннюю температуру каждые полчаса в течение четырех месяцев. Загрузите данные и постройте график. Преобразуйте температуру в степени Цельсия. Измерьте время в неделях. Таким образом, скорость дискретизации составляет 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