Have you tried FFT?