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