File Exchange

image thumbnail

test periodicity

version (2.17 KB) by Hanan Shteingart
Test for signal periodicity using Fisher's g-statistics (see references below)


Updated 29 Jul 2013

View License

Test for signal periodicity using Fisher's g-statistics (see references
below). Due to numerical limitations (large factorials) the p value can
be calculated only for significant value (p<0.1). For larger p values the
resultant p-value is 1.

[pval, fMax] = test_periodicity(x)
x - NxT - matrix of time series(N - time series, T - time samples).
fmin - (optional) - minimum freq in units of number of observed periods (minimum frequency x T)
pval - Nx1 - pvalue (pvalues higher than 0.1 are set to 1).
fMax - Nx1 - frequency of maximum power (even if insignificant) in
normalized units.
Fisher. "Tests of Significance in Harmonic Analysis." 1929 Proc. R. Soc. vol. 125 no. 796 54-59 -\ - watch it, there is an bug there

Comments and Ratings (3)


The program calls a function "fprintfstack" which is not provided

Dear Nora,
The bug is in taking only 3 terms from the original series in Fisher's paper. At non significant samples g is small resulting in a sum over many large terms. This results in numerical errors which in turn fails to estimate the true p-value. In my submission I bypassed it by finding first the 5% significance g value and set it as a threshold below which p value is 1.


Would you mind telling me what is the bug that you detect in:



added support for minimum number of observed periods to avoid false detection of low frequencies. For example, if first half of the sample is small and the other half is large the period of f=1/N might be detected which is not very practical.

MATLAB Release Compatibility
Created with R2013a
Compatible with any release
Platform Compatibility
Windows macOS Linux