jurihock / stftPitchShift

STFT based real-time pitch and timbre shifting in C++ and Python
MIT License
115 stars 14 forks source link

How about the sliding DFT? #5

Open jurihock opened 2 years ago

jurihock commented 2 years ago

Evaluate following work:

  1. Sliding is smoother than jumping
  2. The Sliding Phase Vocoder
  3. Real-time Sliding Phase Vocoder using a Commodity GPU
  4. Understanding and Implementing the Sliding DFT
  5. bronsonp/SlidingDFT (prefer [6])
  6. Accurate, Guaranteed Stable, Sliding Discrete Fourier Transform (aka mSDFT)
  7. Guaranteed stable sliding Goertzel implementation (see paper suggestions by Rick Lyons)
  8. Streaming Spectral Processing with Consumer-Level Graphics Processing Units
  9. High-Precision, Permanently Stable, Modulated Hopping Discrete Fourier Transform (aka mHDFT; inverse transform?)
  10. Recursive sliding DFT algorithms: A review (looks interesting, but have no access to this one...)
  11. Guaranteed-Stable Sliding DFT Algorithm With Minimal Computational Requirements (aka oSDFT)
jurihock commented 2 years ago

The sliding DFT will be first implemented and tested out in voyx.

jurihock commented 2 years ago

As mentioned in [3] the classic SDFT implementation suffers from accumulated frequency bin errors. These errors may become visible or audible after about 10 minutes on single precision, depending on the source signal.

The modulated SDFT implementation proposed in [6] offers reduced error level even on single precision, but at "slightly" higher computational cost (by about factor 1.5 in my measurements).

With cyclic chirp or sweep as a source signal the frequency error appears immediately at about -75 dBFS using the classic SDFT [1] and still stays below -100 dBFS using the modulated SDFT [6] after 30 min. That's the difference...

jurihock commented 2 years ago

oSDFT

Not to be confused with oSDFT, which is a completely another nice algorithm and probably most suitable for FPGAs, due to accumulation at the end of the cycle.

The author of [11] reports a lower numerical error level of gSDFT compared to mSDFT from [6], but also a higher workload on larger windows. The finally proposed oSDFT should have exactly the same numerical error level as gSDFT and the lowest workload "among the existing stable" SDFT algorithms...

Unclear:


BTW the gSDFT seems to be patented...

jurihock commented 1 year ago

TODO: