How to remove engines noise on data?

6 views (last 30 days)
Edinburgh
Edinburgh on 20 Feb 2015
Commented: Image Analyst on 21 Feb 2015
Hallo everyone, I desperately need your help.
I recorded electric fields noise in a tank full of water. The first part of the measurements (as you can see in the time domain of the attached picture) as no noise related to the engines. When, I put the engines on, I observed a jump in amplitude (which is norma
l). I have been trying to remove that noise related to the engines since two days now, without any success so far. Below is the procedure I used: 1/ I divided the data in two: one containing the engine noise and the other was noise free. 2/ Converted both data in the frequency domain using the following code:
% fft ==> engines noise free NFFT1 = 2^nextpow2(length(noise_free)); % Next power of 2 from length of noise_free Y = fftshift(fft(noise_free,NFFT1))/length(noise_free); Fs = 200 % sample frequency f = Fs/2*linspace(0,1,length(Y));
% fft ==> with engines noise on NFFT2 = 2^nextpow2(length(noise_on)); % Next power of 2 from length of y Y2 = fftshift(fft(noise_on,NFFT2)/length(noise_on));
f2 = Fs/2*linspace(0,1,length(Y2));
3/ Computed the average magnitude of the noise magnitude
noise = noise_on - noise free;
mu = mean(abs(fftshift(fft(noise))));
4/ Removed engines noise by subtracting average magnitude of noise spectrum Y4 = fftshift(abs(Y2)) - mu;
5/ Reconstructed back the data without noise by IFFT
Z = ifftshift(ifft(Y4));
Can someone explain to me why it is not working? What will you do instead? I even try to add the phase but it did not work. Z2 = real(ifftshift(ifft(abs(Y4).exp(sqrt(-1)*angle(Y2)))));
I am looking forward to hearing from you, ladies and gentlemen.
Thanks

Answers (1)

Image Analyst
Image Analyst on 20 Feb 2015
Well of course just subtracting a constant from the noise+signal spectrum won't get rid of the noise, even if that constant is the mean of the noise-only spectrum. Just think about it - it's a constant! All you're doing is reducing the power (volume) at each frequency but everything that was there before, be it noise or signal or whatever, will still be there.
What does the noise-only spectrum look like? Maybe you can try a wiener filter.
  2 Comments
Edinburgh
Edinburgh on 20 Feb 2015
Hi Image Analysis, Thanks very much for replying. Below are the amplitudes spectrum of the noise recorded with the engine on and off. The green curve is the amplitude spectrum of the engines noise only.
Cheers, Axel
Image Analyst
Image Analyst on 21 Feb 2015
I'm not really an audio analysis guy but when I see the spectrum of the noise be essentially over the very same frequencies as your signal, then I don't think any kind of dumb high pass or wiener filter will do a good job. I think you might look into "blind source separation" and "independent components analysis" - also known as the cocktail party problem where you can pick out one person's voice and understand it despite that person talking in a crowd of a bunch of other people. See these links:
I think some people here are familiar with ICA and BSS so maybe they'll speak up.

Sign in to comment.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!