# Using fft to calculate vsdft

We are currently implementing the velocity synchronous discrete Fourier transform (vsdft) for order tracking rotating machinery in Python.

The formula is similar to dft. Simplified, it is given by

$$\text{VSDFT}(\Omega) = C\sum_{n=0}^{N-1} x[n] \omega[n] e^{j\Omega \theta[n]}$$

where $C$ is a constant and

$$\omega = \frac{d\theta}{dt}$$

Since dft is given by

$$F_k = \sum_{n=0}^{N-1} f_n\cdot e^{-i 2 \pi k n / N}$$

and we wanted to use the optimized fft implementing of numpy, and was thinking if there is a way to write the input f so that we could use fft directly. However, my math skills are failing me.

Can any of you see a way or any pointer to implement the above VSDFT without having to reimplement the Cooley-Tukey FFT algorithm?

Refrence to the original paper can be found in here.

• The sum you're trying to evaluate is a Riemann sum of an integral. Write down that integral and apply a suitable variable substitution to receive an ordinary Fourier integral. Turn it back into a Riemann sum. Feb 26 '18 at 18:51

I believe the short answer is no.

The paper is behind a paywall so I didn't look at it. In the abstract is the following blurb: " use interpolation techniques to resample the signal at constant angular increments, followed by a common discrete Fourier transform to shift from the angular domain to the order domain." In which they are describing other techniques.

Looking at your equations, that is precisely what needs to be done to $\theta[n]$ in order to convert it into a regular DFT, suitable for a FFT.

The FFT exploits symmetries in the even spacing of the exponents in order to save computations. With a varying $\theta[n]$, those symmetries aren't there so you aren't going to be able to implement a FFT algorithm.

You don't tell us what $x[n]$ is either.

How large is N?

Hope this helps at least a little.

Ced

• Thank you, Ced. It was a nice reply. I'm sorry for the poor description. This is my first question on this forum. We can assume that N is large and that $'log_2 N$ is an integer. As you say: "The FFT exploits symmetries in the even spacing of the exponents in order to save computations. With a varying $\theta[n]$, those symmetries aren't there so you aren't going to be able to implement a FFT algorithm." If this is the case, then you are right, we cannot use FFT to calculate this. Feb 28 '18 at 12:28
• To give some context. The formula I sent was a discrete version of $$X(\Omega) = \mathscr{F}\{x\}(\theta) = \int_{-\infty}^{\infty} x(t) \omega(t) e^{-j\Omega\theta} d\theta$$ $x(t)$ is a sampled signal from an accelerometer, $\theta$ is the shaft angle and $\omega$ is the angular velocity so that $$\omega = \frac{d\theta}{dt}$$ Feb 28 '18 at 12:29
• There you have the first step for what I suggested in the commend above! Now turn it into a regular Fourier integral by substitution. Feb 28 '18 at 12:48
• @Jazzmaniac, I don't think I understand how doing a substitution to convert the integral into Fourier form wouldn't be the equivalent of resampling the theta function to be equally spaced. Mar 1 '18 at 2:11
• If you want a fast algorithm, resampling it is. Mar 1 '18 at 9:45

I just implemented one VSDFT in Matlab and confirm what is said above. FFT makes uses of symmetries, but here you can't. Instead you should have a lot less number of points to compute, as if you had a quarter of the FFT to compute.