Неопределенность измерений и шум иногда затрудняют обнаружение колебательного поведения в сигнале, даже если такое поведение ожидается.
Автокорреляционная последовательность периодического сигнала имеет те же циклические характеристики, что и сам сигнал. Таким образом, автокорреляция может помочь проверить наличие циклов и определить их продолжительность.
Рассмотрим набор данных о температуре, собранных термометром внутри офисного здания. Устройство считывает каждые полчаса в течение четырех месяцев. Загрузите данные и постройте их график. Вычитайте среднее значение, чтобы сконцентрироваться на колебаниях температуры. Преобразуйте температуру в градусы Цельсия. Измерьте время в днях. Таким образом, частота выборки составляет 2 измерений/час × 24 часов/день = 48 измерений/день.
load officetemp tempC = (temp-32)*5/9; tempnorm = tempC-mean(tempC); fs = 2*24; t = (0:length(tempnorm) - 1)/fs; plot(t,tempnorm) xlabel('Time (days)') ylabel('Temperature ( {}^\circC )') axis tight

Температура, кажется, колеблется, но продолжительность циклов не может быть легко считана.
Вычислите автокорреляцию температуры так, чтобы она была единичной при нулевом запаздывании. Ограничьте положительное и отрицательное отставание тремя неделями. Обратите внимание на двойную периодичность сигнала.
[autocor,lags] = xcorr(tempnorm,3*7*fs,'coeff'); plot(lags/fs,autocor) xlabel('Lag (days)') ylabel('Autocorrelation') axis([-21 21 -0.4 1.1])

Определите короткие и длинные периоды, найдя местоположения пиков и определив средние временные разницы между ними.
Для поиска длинного периода ограничьте findpeaks искать пики, разделенные более коротким периодом и с минимальной высотой 0,3.
[pksh,lcsh] = findpeaks(autocor); short = mean(diff(lcsh))/fs
short = 1.0021
[pklg,lclg] = findpeaks(autocor, ... 'MinPeakDistance',ceil(short)*fs,'MinPeakheight',0.3); long = mean(diff(lclg))/fs
long = 6.9896
hold on pks = plot(lags(lcsh)/fs,pksh,'or', ... lags(lclg)/fs,pklg+0.05,'vk'); hold off legend(pks,[repmat('Period: ',[2 1]) num2str([short;long],0)]) axis([-21 21 -0.4 1.1])

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