I have a sensor placed on vibration aggregate. When the aggregate is not working, my sensor produces some noise signal. So when my aggregate is working, my sensor produces "result" signal which is the sum of the vibration signal and the noise signal. I want to extract only the vibration (clean) signal from "result" signal. I'm trying to use one method for this and I want to know if it is correct:

  1. I get a sample of the noise signal, take its spectrum (using real fft, let's call it $N$)

  2. I get a sample of a "result" signal, also take its spectrum (using real fft, let's call it $Y$). Both samples have same size and sample rate and the length and resolution of the spectrums are the same.

  3. I subtract vectorially from the spectrum of the "result" signal the spectrum of the noise signal to get my "clean" signal: $X = Y-N$.

  4. To obtain a clean vibration signal, I apply the inverse real fft to $X$.


2 Answers 2


Since you don't have a way to measure the noise separately from your noisy measurement, you need a statistical method. As is, you're going to run into problems when subtracting the phase.

What you do have is a measurement of the noise taken as a separate process, at a different time, which gives you a good starting point if you assume the statistics of the noise don't change much during a measurement, and between measurements (ergodicity).

With these considerations in mind, you can use the noise reference statistics and do this sort of de-noising in the frequency domain, either through Wiener filtering approaches or Spectral Subtraction (there are others, but those are the most common approaches).

  • A naïve approach could be to use your noise-only measurement, and from that get a good estimate of the noise statistics through a Power Spectral Density, and perform Spectral Subtraction on your subsequent noisy measurements. This is a MATLAB function you can refer to (but you'll need to tailor to your specific application).

  • As for Wiener methods, here is a good reference paper and the author's MATLAB implementation


I want to know if it is correct:

It is not.

While the magnitude spectrum of the noise is probably the same between measurements the phase is very likely to be uncorrelated from run to run. In this case your proposed process will simply double the noise energy.


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.