Поиск периодичности с помощью частотного анализа

Часто трудно охарактеризовать колебательное поведение в данных, рассматривая измерения времени. Спектральный анализ может помочь определить, является ли сигнал периодическим, и измерить различные циклы.

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

Figure contains an axes. The axes contains an object of type line.

Температура, кажется, колеблются, но длины циклов не могут быть определены легко. Вместо этого посмотрите на содержимое сигнала.

Вычесть среднее значение, чтобы сконцентрироваться на колебаниях температуры. Вычислите и постройте график периодограммы.

tempnorm = tempC - mean(tempC);

[pxx,f] = periodogram(tempnorm,[],[],fs);

plot(f,pxx)
ax = gca;
ax.XLim = [0 10];
xlabel('Frequency (cycles/week)')
ylabel('Magnitude')

Figure contains an axes. The axes contains an object of type line.

Температура явно имеет дневной цикл и недельный цикл. Результат неудивителен: температура выше, когда люди на работе и ниже по ночам и выходным.

См. также

| |

Похожие темы