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
Fisher. "Tests of Significance in Harmonic Analysis." 1929 Proc. R. Soc. vol. 125 no. 796 54-59 - http://bioinformatics.oxfordjournals.org/content/20/1/5.full.pdf
- watch it, there is an bug there
The program calls a function "fprintfstack" which is not provided
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.
Create scripts with code, output, and formatted text in a single executable document.