I collected vibration data (amplitude and time) on a component that was attached to an engine. Using MATLAB I plotted a spectrogram to see what frequencies it vibrated at.

The code:

windsize = 1000;
beta = 25;
overlap = 900;
thresh = -140;
spectrogram(a,                      ...
            kaiser(windsize, beta), ...
            overlap,                ...
            windsize,               ...
            'MinTreshold', thresh,  ...
            'yaxis', fs             ...

Spectrogram of the collected data

I am not sure how to interpret the results of the plot. Order analysis of the engine expected a maximum output of 100 Hz, where as here the strongest signals are at the higher frequencies and at high harmonics.

Have I done something incorrectly?

  • $\begingroup$ You're not really saying what kind of data you've analyzed? Were these sound levels? Accelerometer readings? Laser deflection meter readings? Ultrasonic Sonar? $\endgroup$ Oct 29, 2018 at 20:04
  • 1
    $\begingroup$ Sorry about that, it was amplitude and time vibration readings. $\endgroup$
    – Callum
    Oct 29, 2018 at 20:06
  • $\begingroup$ amplitude of what? $\endgroup$ Oct 29, 2018 at 20:07
  • $\begingroup$ vibration, measured in g. $\endgroup$
    – Callum
    Oct 29, 2018 at 20:07
  • $\begingroup$ ah, so acceleration? I'm a bit confused, since vibration would have more than one parameter (amplitude, frequency and phase). $\endgroup$ Oct 29, 2018 at 20:08

1 Answer 1


Abstracting this a bit:

This doesn't look too bad for a signal!

So, first of all, you might be driving your sensor and digitizer too hard – artifacts due to nonlinearity would be at multiples of the fundamental tone! Idea is the following: If the transfer function of my system isn't $y = \alpha x$ but (also contains) a function $y=\alpha x^2$, then a sine in $x$ would lead to two new signals: one at 0 Hz, and one at twice the original sine's frequency. That's intermodulation as understandable by the classical trigonometric addition / multiplication theorems!

So, first thing: make sure your system is nice and linear over the whole range; for systems that take vibrations, exciting the thing with a large acceleration of known amplitude might be hard, so a first start would be plotting a histogram of the amplitude of your signal. Does it look nice and somewhat smooth with few values at the extreme values and most at low amplitudes?

If that's not the case, you might simply need to use a sensor / sensing system that can work with a larger range of values. That might just mean your sensor is working fine and linearly, but your ADC needs to get the values attenuated to map them to the whole range (you'd see that as sharp clipping if you plot your signal over time!); but based on your relatively benign "ghost signals", my guess is that your acceleration sensor simply isn't that linear. Maybe it's not meant for that range of acceleration, maybe you're not supplying it with a supply current or voltage high enough to represent these values? Maybe it's not even specified to do anything linear in frequency ranges above a certain cutoff frequency?

Another thing: Your plot goes up to what I presume is half the sampling rate, and I see no cutoff of any filter that was applied to the signal.

Are you properly anti-aliasing filtering your signal prior to sampling it? If your signal contains e.g. the oscillation of a MEMS fork at 5 kHz (wild guess!), but you're sampling at 4.8 kHz, then that oscillation would appear at 0.2 kHz, and a lot of multiples of 0.2 kHz. Do not mess with Nyquist unless you want aliases! Quite possible, the accelerometer actually generates a signal that contains the intermodulation of MEMS oscillation and signal to be observed:

$$\sin(2\pi f_{machine} t+\varphi_{machine}) \cdot \sin(2\pi f_{oscillator} t)$$

Which in turn would be

$$\frac12 \left(\cos(2\pi(f_{machine}-f_{oscillator})+\varphi_{machine})-\cos(\cos(2\pi(f_{machine}-f_{oscillator})\right)\text.$$

Staying with the number from my example, $f_{oscillator}=5\,\text{kHz}$ and your signal at 100 Hz, we'd thus should see components at 4.9 kHz and 5.1 kHz – except we don't, because we're not sampling fast enough, so at our 4.8 kHz sampling rate, these would end up at 100 and 300 Hz; and then, combine that with the non-linearity intermodulation, you get the funkiest frequency content.

So, first of all, if you know you're not expecting oscillations above 100 Hz, use an analog filter to get rid of anything above. If you still get signal components above that frequency, your filter isn't sufficient or your ADC is driven into nonlinearity.

On the other hand, without any education on the mechanical side of things: doesn't seem so unlikely to me that materials aren't perfectly rigid, and that something oscillating at 100 Hz might be "fluttering" at higher frequencies, especially if things like spring elements aren't the perfect linear springs I was told to assume in school physics.

In conclusion:

You're looking at something non-linear in nature. Whether it's your measurement system or the system you're observing is something we can't tell you, but systematic elimination of error sources will probably yield results pretty quickly.

Start with reducing sensitivity of your measurement system.

Also, make double sure you're properly anti-alias-filtering your signal prior to digitization.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.