How to work out if there is a cyclic element to data

7 views (last 30 days)
I have a set of time series. I suspect that some of them tend to mean revert more than others. When I feed the time series through a digital bandpass filter I often find that I can visually deduce a dominant cycle however that doesn't usually last long.
Using my approach of digital bandpass filters I still find it hard to work out if this is mean reversion or not. For example if we consider the null hypothesis that this is just white noise then even feeding white noise through a digital bandpass filter will still produce a cyclic output from the filter.
I have used an Augmented Dickey Fuller test to assess stationary/cointegration however is there a similar test to determine if cyclic components really exist in the time series or am I just seeing noise?
Any thoughts?

Answers (2)

Wayne King
Wayne King on 19 Dec 2011
Hi Stewart, Is this data stationary? If so you can use a nonparametric spectral estimator to test the hypothesis that there are line components (oscillations) in the data.
  1 Comment
Stewart Charles
Stewart Charles on 19 Dec 2011
Unfortunately the data is not stationary. Or not with any confidence at least.

Sign in to comment.


Dr. Seis
Dr. Seis on 19 Dec 2011
As a rough start, you can try correlating the time series with sections of itself. For example:
% User defined inforation
length_rand = 180; % Repeat signal every 180 samples
length_signal = 750; % Entire signal will be 750 samples
noise_amp = 0.3; % Noise is 30% of signal
subset_size = 0.25; % Subset size will be 45% length of entire signal
% Generate synthetic cyclic signal w/ noise and its subset
temp_rand = randn(length_rand,1);
temp_signal = zeros(length_signal,1);
for i = 1 : floor(length_signal/length_rand)
temp_signal(1+(i-1)*length_rand:(i)*length_rand) = temp_rand+noise_amp*randn(length_rand,1);
end
temp_signal(1+i*length_rand:end) = temp_rand(1:length(temp_signal(1+i*length_rand:end)));
true_signal = temp_signal; % Entire signal
temp_signal(subset_size*length_signal:end) = 0; % Subset of entire signal
% Plot info
figure;
subplot(2,1,1);
plot(true_signal,'LineWidth',3); hold on;
plot(temp_signal,'r-'); hold off;
legend('true signal','temp signal');
title('Signal with subset used for correlation');
a = xcorr(temp_signal,true_signal);
xlim([0 length_signal]);
subplot(2,1,2);
plot(a);
title('Result from xcorr');
xlim([0 length_signal]);
This will produce something that looks like this:
The location of the peaks does NOT mark the end/beginning of the cyclic signal. However, the strength and distance between peaks should be similar if there is a cyclic signal.
  1 Comment
Stewart Charles
Stewart Charles on 20 Dec 2011
Many thanks. I will do some assessment on autocorrelation. Unfortunately the frequency of the cycle appears to change quite rapidly.

Sign in to comment.

Categories

Find more on Get Started with Signal Processing Toolbox in Help Center and File Exchange

Products

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!