Accelerometers are robust, simple to use and readily available transducers. Measuring velocity and displacement directly is not simple. In a laboratory test rig we could use one of the modern potentiometer or LVDT transducers to measure absolute displacement directly as static reference points are available. But on a moving vehicle this is not possible.
More here… OmegaArithmetic.pdf




Dear Dr Mercer:
I read your article about Omega Arithmatic and try to apply it on my experiment results, and met some problems really need your help!! I use accelerometer to collect data. Following the article, I do the Fourier transform and divided by -w^2 to get the displacement spectrum. After that when i do the inverse Fourier transform to get displacement time sequence, the result is a “complex vector”. So my question is how can I convert this “complex vector” to a displacement time sequence?? Is it correct to get the magnitude of each complex number, or just keep the real part and leave the imaginary part?? I really appreciate your kindly help!!
must do the complex calculation, use both parts. u can only use the multiplicaion and addition, basic calculation rules are:
(a+jb)*(c+jd) = a*c-b*d + j(a*d+b*c); (a+jb) + (c+jd) = (a+c) + j(b+d);
if use c, u can use two arrays to hold the real part and imaginary part separately, input spectrum vactors are acc_real[N], acc_imagine[N], N is the number of vectors.
in yr programm what u only need to calculate are: omega_disp_real[N], omega_disp_imagine[N].
Omega_disp_factor_real = -1.0/w^2; Omega_disp_factor_imagine = 0;
for each n
omega_disp_real[n] = acc_real[n]*Omega_disp_factor_real – acc_imagine[n]*Omega_disp_factor_imagine + acc_real[n]*Omega_disp_factor_imagine + acc_imagine[n]*Omega_disp_factor_real ;
omega_disp_imagine[n] = acc_real[n]*Omega_disp_factor_real – acc_imagine[n]*Omega_disp_factor_imagine;
omega_disp_real[n] = acc_real[n]*Omega_disp_factor_imagine + acc_imagine[n]*Omega_disp_factor_real ;
time squence magitude value use: magitude_disp[n] = sqrtf(omega_disp_real[n]^2 + omega_disp_imagine[n]^2); phase[n]=…
if use matlab, the vectors can be directly devided by -w^2, Omega_disp = acc_fft_vector./(-w^2).
matlab takes care of the complex calculation automatically.
time squence magitude value use magitude_disp = |Omega_disp|; phase value: …
In case of simple acceleration signal like sin(w*t), the displacement signal is displacement=IFFT(FFT(sin(w*t)/(-w^2))). It works well and good for this.
D.I (sin(w*t)) = -sin(w*t)/w^2 = IFFT(FFT(sin(w*t)/(-w^2)))
D.I. –> double integration
But however in case of composite signals with sinusoids of different frequencies and amplitudes what is the dividing factor.
D.I (sin(w*t)+sin(2*w*t)) = -(sin(w*t)/w^2)-(sin(2*w*t)/(2*w)^2)
is not equal to IFFT(FFT((sin(w*t) )+sin(2*w*t))/(-w^2)))
Sudakhar
You divide each X(f) by its own frequency f (actually divide by -[2*PI*k*df]^2)
However be careful to avoid division by zero at start – this is the dc component so set it to zero. Low frequencies are a pain as we get the so called 1/f noise – I option ignore any frequencies below 1Hz and force the to zero
Linus
The FFT and its inverse deal in complex numbers. In this sense your measured accelerations signal is the real part of a complex signal with zeroes for the imaginary part. Strictly speaking a Full FFT will give you a frequency spectrum from -half sampling rate to +half sampling rate but when we have real only data then the FFT values for the negative frequencies and the positive frequencies are related. Specifically X(-f) = conj{X(f)} that is if X(f)= a+ib then X(-f)= a-ib. In a digital representation for a real signal we have X(N-k) = conj{X(k)}.
What you get precisely when you do the FFT depends on your software package. What you need is software that has a real part only FFT which produces the usual half range result (zero to sample rate /2) and a half range Inverse FFT. This latter algorithm is often not available (it is in DATS of course!).
If you do not have the relevant inverse then
do the forward FFT of real data
divide real and imaginary parts by -(omega^2)
generate the x(N-k) complex values from conj{X(n)}
do full range inverse FFT
If done correctly you will find that the imaginary part of the inverse transform is effectively zero. You need to be very careful with the scaling. If the time between samples was dT and you have N acceleration values (N is power of two) then your frequency spacing df = 1/NdT and the value of omega for X(k) is 2*PI*k*df.