Неопределенность измерения и шум иногда затрудняют определение колебательного поведения в сигнале, даже если такое поведение ожидается.
Автокорреляционная последовательность периодического сигнала имеет те же циклические характеристики, что и сам сигнал. Таким образом, автокорреляция может помочь проверить наличие циклов и определить их длительности.
Рассмотрим набор данных о температуре, собранных термометром внутри офисного создания. Устройство проводит чтение каждые полчаса в течение четырех месяцев. Загрузите данные и постройте график. Вычесть среднее значение, чтобы сконцентрироваться на колебаниях температуры. Преобразуйте температуру в степени Цельсия. Измерьте время в днях. Таким образом, скорость дискретизации составляет 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
искать peaks, разделенные больше короткого периода и с минимальной высотой 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])
К очень хорошему приближению автокорреляция колеблется как ежедневно, так и еженедельно. Это стоит ожидать, так как температура в создании выше, когда люди на работе и ниже ночью и в выходные.