주파수 분석을 사용하여 주기성 찾기
시간 측정값을 보고 데이터의 진동 동작 특징을 파악하기 어려운 경우가 종종 있습니다. 스펙트럼 분석은 신호가 주기적인지 확인하고 서로 다른 주기를 측정하는 데 도움이 됩니다.
사무실 건물에 있는 온도계로 4개월 동안 30분마다 내부 온도를 측정합니다. 데이터를 불러오고 플로팅합니다. 온도를 섭씨로 변환합니다. 시간은 주 단위로 측정합니다. 따라서 샘플 레이트는 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
온도가 진동하는 것처럼 보이기는 하지만 주기 길이를 쉽게 파악할 수는 없습니다. 대신 신호의 주파수 성분을 살펴봅니다.
평균값을 빼서 온도 변동 부분에 집중합니다. 주기도를 계산하고 플로팅합니다.
tempnorm = tempC - mean(tempC); [pxx,f] = periodogram(tempnorm,[],[],fs); plot(f,pxx) ax = gca; ax.XLim = [0 10]; xlabel('Frequency (cycles/week)') ylabel('Magnitude')
온도의 일일 주기와 주별 주기가 명확하게 나타납니다. 온도는 사람들이 근무할 때 더 높고, 야간과 주말에는 더 낮으므로 이는 놀라운 결과가 아닙니다.
참고 항목
findpeaks
| periodogram
| xcorr