Open jurihock opened 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...
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:
M=16
the oSDFT is about 2 times faster than mSDFT, but in case of M=32
only 1.65 times. I'm assuming a non-linear progression with increasing window size. The window size of 32 bins is too tiny for audio, we need something at least 1024.BTW the gSDFT seems to be patented...
TODO:
Evaluate following work:
bronsonp/SlidingDFT(prefer [6])