Sparse Fourier transform
The sparse Fourier transform (SFT) is a kind of discrete Fourier transform (DFT) for handling big data signals. Specifically, it is used in GPS synchronization, spectrum sensing and analog-to-digital converters.:[1]
The fast Fourier transform (FFT) plays an indispensable role on many scientific domains, especially on signal processing. It is one of the top-10 algorithms in the twentieth century.[2] However, with the advent of big data era, the FFT still needs to be improved in order to save more computing power. Recently, the sparse Fourier transform (SFT) has gained a considerable amount of attention, for it performs well on analyzing the long sequence of data with few signal components.
Definition
[edit | edit source]Consider a sequence xn of complex numbers. By Fourier series, xn can be written as
Similarly, Xk can be represented as
Hence, from the equations above, the mapping is .
Single frequency recovery
[edit | edit source]Assume only a single frequency exists in the sequence. In order to recover this frequency from the sequence, it is reasonable to utilize the relationship between adjacent points of the sequence.
Phase encoding
[edit | edit source]The phase k can be obtained by dividing the adjacent points of the sequence. In other words,
Notice that .
An aliasing-based search
[edit | edit source]
Seeking phase k can be done by Chinese remainder theorem (CRT).[3]
Take for an example. Now, we have three relatively prime integers 100, 101, and 103. Thus, the equation can be described as
By CRT, we have
Randomly binning frequencies
[edit | edit source]
Now, we desire to explore the case of multiple frequencies, instead of a single frequency. The adjacent frequencies can be separated by the scaling c and modulation b properties. Namely, by randomly choosing the parameters of c and b, the distribution of all frequencies can be almost a uniform distribution. The figure Spread all frequencies reveals by randomly binning frequencies, we can utilize the single frequency recovery to seek the main components.
where c is scaling property and b is modulation property.
By randomly choosing c and b, the whole spectrum can be looked like uniform distribution. Then, taking them into filter banks can separate all frequencies, including Gaussians,[4] indicator functions,[5][6] spike trains,[7][8][9][10] and Dolph-Chebyshev filters.[11] Each bank only contains a single frequency.
The prototypical SFT
[edit | edit source]Generally, all SFT follows the three stages[1]
Identifying frequencies
[edit | edit source]By randomly bining frequencies, all components can be separated. Then, taking them into filter banks, so each band only contains a single frequency. It is convenient to use the methods we mentioned to recover this signal frequency.
Estimating coefficients
[edit | edit source]After identifying frequencies, we will have many frequency components. We can use Fourier transform to estimate their coefficients.
Repeating
[edit | edit source]Finally, repeating these two stages can we extract the most important components from the original signal.
Sparse Fourier transform in the discrete setting
[edit | edit source]In 2012, Hassanieh, Indyk, Katabi, and Price [11] proposed an algorithm that takes samples and runs in the same running time.
Sparse Fourier transform in the high dimensional setting
[edit | edit source]In 2014, Indyk and Kapralov [12] proposed an algorithm that takes samples and runs in nearly linear time in . In 2016, Kapralov [13] proposed an algorithm that uses sublinear samples and sublinear decoding time . In 2019, Nakos, Song, and Wang [14] introduced a new algorithm which uses nearly optimal samples and requires nearly linear time decoding time. A dimension-incremental algorithm was proposed by Potts, Volkmer [15] based on sampling along rank-1 lattices.
Sparse Fourier transform in the continuous setting
[edit | edit source]There are several works about generalizing the discrete setting into the continuous setting.[16][17]
Implementations
[edit | edit source]There are several works based on MIT, MSU, ETH and University of Technology Chemnitz [TUC]. Also, they are free online.
Further reading
[edit | edit source]- Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
References
[edit | edit source]- ^ a b Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
- ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
- ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
- ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
- ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
- ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
- ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
- ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
- ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
- ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
- ^ a b Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
- ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
- ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
- ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
- ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
- ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
- ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).