www.gusucode.com > signal 案例源码程序 matlab代码 > signal/DetermineCyclicBehaviorInDataExample.m
%% Find Periodicity Using Frequency Analysis % It is often difficult to characterize oscillatory behavior in data by % looking at time measurements. Spectral analysis can help determine if a % signal is periodic and measure the different cycles. %% % A thermometer in an office building measures the inside temperature every % half hour for four months. Load the data and plot it. Convert the % temperature to degrees Celsius. Measure time in weeks. The sample rate is % thus 2 measurements/hour × 24 hours/day × 7 days/week = 336 % measurements/week. 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 %% % The temperature does seem to oscillate, but the lengths of the cycles % cannot be determined easily. Look at the signal's frequency content % instead. % % Subtract the mean to concentrate on temperature fluctuations. Compute and % plot the periodogram. tempnorm = tempC - mean(tempC); [pxx,f] = periodogram(tempnorm,[],[],fs); plot(f,pxx) ax = gca; ax.XLim = [0 10]; xlabel('Frequency (cycles/week)') ylabel('Magnitude') %% % The temperature clearly has a daily cycle and a weekly cycle. The result % is not surprising: the temperature is higher when people are at work and % lower at nights and on weekends.