使用自相关发现周期性
测量的不确定性和噪声有时使得很难发现信号中的振荡行为,即使这种行为是预期的。
周期信号的自相关序列与信号本身具有相同的循环特性。因此,自相关可以帮助验证周期的存在并确定它们的持续时间。
考虑一组由办公大楼内的温度计收集的温度数据。该设备每半小时读数一次,持续四个月。加载数据并绘制它。减去平均值以集中于温度波动。将温度转换为摄氏度。以天为单位计算时间。因此,采样率为2次测量/小时× 24小时/天= 48次测量/天。
负载officetemptempC = (temp-32)*5/9;tempnorm = tempC-mean(tempC);Fs = 2*24;T = (0:length(tempnorm) - 1)/fs;情节(t, tempnorm)包含(的时间(天)) ylabel ('温度({}^\circC)')轴紧
温度似乎确实在振荡,但周期的长度不容易读出。
计算温度的自相关性,使其在零滞后时是统一的。将正负延迟限制在三周以内。注意信号的双重周期性。
[autocor,lag] = xcorr(tempnorm,3*7*fs,多项式系数的);情节(滞后/ fs, autocor)包含(“滞后(天)”) ylabel (自相关的)轴([-21 21 -0.4 1.1])
通过找到峰值位置并确定它们之间的平均时间差来确定短期和长期。
要找到长周期,限制findpeaks
寻找间隔超过短周期且最低高度为0.3的峰值。
[pksh,lcsh] = findpeaks(autocor);Short = mean(diff(lcsh))/fs
短= 1.0021
[pklg,lclg] = findpeaks(autocor,...“MinPeakDistance”装天花板(短)* fs,“MinPeakheight”, 0.3);Long = mean(diff(lclg))/fs
Long = 6.9896
持有在PKS = plot(lag (lcsh)/fs,pksh,”或“,...滞后(lclg) / fs, pklg + 0.05,“vk”);持有从传奇(pks [repmat (”时期,“, [2]) num2str((长、短),0)])轴(21 -0.4 - 1.1 [-21])
从一个非常好的近似来看,自相关性每天和每周都在振荡。这是意料之中的,因为当人们工作时,大楼里的温度会更高,而在晚上和周末则会更低。