The Fast Folding Algorithm (FFA) has its roots dating back to 1969 when it was introduced by Professor David H. Staelin from the Massachusetts Institute of Technology (MIT).4 At the time, the scientific community was deeply involved in the study of pulsars, which are rapidly rotating neutron stars emitting beams of electromagnetic radiation. Professor Staelin recognized the potential of the FFA as a powerful instrument for detecting periodic signals within these pulsar surveys. These surveys were not just about understanding pulsars but held a much broader significance. They played a pivotal role in testing and validating Einstein's theory of general relativity, a cornerstone in the field of Astronomy. As the years progressed, the FFA saw various refinements, with researchers making tweaks and optimizations to enhance its efficiency and accuracy. Despite its potential, the FFA was mostly underutilized thanks to the dominance of Fast Fourier Transform (FFT)-based techniques, which were the preferred choice for many in signal processing during that era. As a result, while the FFA showed promise, its applications in the broader scientific community remained underutilized for several decades.5
The Fast Folding Algorithm (FFA) was initially developed as a method to search for periodic signals amidst noise in the time domain, contrasting with the FFT search technique that operates in the frequency domain. The primary advantage of the FFA is its efficiency in avoiding redundant summations (unnecessary additional computations). Specifically, the FFA is much faster than standard folding at all possible trial periods, achieving this by performing summations through N×log2(N/p−1) steps rather than N×(N/p−1). This efficiency arises because the logarithmic term log2(N/p−1) grows much slower than the linear term (N/p−1), making the number of steps more manageable as N increases, N represents the number of samples in the time series, and p is the trial folding period in units of samples. The FFA method involves folding each time series at multiple periods, performing partial summations in a series of log2(p) stages, and combining those sums to fold the data with a trial period between p and p+1. This approach retains all harmonic structures, making it especially effective for identifying narrow-pulsed signals in the long-period regime. One of the FFA's unique features is its hierarchical approach to folding, breaking the data down into smaller chunks, folding these chunks, and then combining them. This method, combined with its inherent tolerance to noise and adaptability for different types of data and hardware configurations, ensures the FFA remains a powerful tool for detecting periodic signals, especially in environments with significant noise or interference which makes it especially useful for Astronomical endavours.6
In signal processing, the fast folding algorithm7 is an efficient algorithm for the detection of approximately-periodic events within time series data. It computes superpositions of the signal modulo various window sizes simultaneously.
The FFA is best known for its use in the detection of pulsars, as popularised by SETI@home and Astropulse. It was also used by the Breakthrough Listen Initiative during their 2023 Investigation for Periodic Spectral Signals campaign.8
Parent, E.; Kaspi, V. M.; Ransom, S. M.; Krasteva, M.; Patel, C.; Scholz, P.; Brazier, A.; McLaughlin, M. A.; Boyce, M.; Zhu, W. W.; Pleunis, Z.; Allen, B.; Bogdanov, S.; Caballero, K.; Camilo, F. (2018-06-29). "The Implementation of a Fast-folding Pipeline for Long-period Pulsar Searching in the PALFA Survey". The Astrophysical Journal. 861 (1): 44. arXiv:1805.08247. Bibcode:2018ApJ...861...44P. doi:10.3847/1538-4357/aac5f0. ISSN 1538-4357. https://doi.org/10.3847%2F1538-4357%2Faac5f0 ↩
Staelin, David H. (1969), "Fast Folding Algorithm for Detection of Periodic Pulse Trains", Proceedings of the IEEE, 57 (4): 724–5, Bibcode:1969IEEEP..57..724S, doi:10.1109/PROC.1969.7051 /wiki/Bibcode_(identifier) ↩
"BLIPSS". GitHub. https://github.com/UCBerkeleySETI/blipss ↩