Sparse Fourier transform

From Wikipedia, the free encyclopedia
Jump to navigation Jump to search

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

xn=(F*X)n=k=0N1Xkej2πNkn.

Similarly, Xk can be represented as

Xk=1N(Fx)k=1Nn=0N1xnej2πNkn.

Hence, from the equations above, the mapping is F:NN.

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,

xn+1xn=ej2πNk=cos(2πkN)+jsin(2πkN).

Notice that xnN.

[edit | edit source]
An aliasing-based search

Seeking phase k can be done by Chinese remainder theorem (CRT).[3]

Take k=104,134 for an example. Now, we have three relatively prime integers 100, 101, and 103. Thus, the equation can be described as

k=104,134{34mod100,3mod101,1mod103.

By CRT, we have

k=104,134mod(100101103)=104,134mod1,040,300

Randomly binning frequencies

[edit | edit source]
Spread all frequencies

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.

xn=Xkej2πN(ck+b),

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.

Xk=1Ll=1Lxnej2πNn

Repeating

[edit | edit source]

Finally, repeating these two stages can we extract the most important components from the original signal.

xnk=1kXkej2πNkn

Sparse Fourier transform in the discrete setting

[edit | edit source]

In 2012, Hassanieh, Indyk, Katabi, and Price [11] proposed an algorithm that takes O(klognlog(n/k)) 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 2O(dlogd)klogn samples and runs in nearly linear time in n. In 2016, Kapralov [13] proposed an algorithm that uses sublinear samples 2O(d2)klognloglogn and sublinear decoding time klogO(d)n. In 2019, Nakos, Song, and Wang [14] introduced a new algorithm which uses nearly optimal samples O(klognlogk) 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]
  1. ^ a b Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
  2. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
  3. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
  4. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
  5. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
  6. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
  7. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
  8. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
  9. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
  10. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
  11. ^ a b Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
  12. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
  13. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
  14. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
  15. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
  16. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
  17. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).