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

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?

Antworten (2)

Wayne King
Wayne King am 19 Dez. 2011

0 Stimmen

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 Kommentar

Unfortunately the data is not stationary. Or not with any confidence at least.

Melden Sie sich an, um zu kommentieren.

Dr. Seis
Dr. Seis am 19 Dez. 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 Kommentar

Many thanks. I will do some assessment on autocorrelation. Unfortunately the frequency of the cycle appears to change quite rapidly.

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Get Started with Signal Processing Toolbox finden Sie in Hilfe-Center und File Exchange

Produkte

Gefragt:

am 19 Dez. 2011

Community Treasure Hunt

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

Start Hunting!

Translated by