How to remove engines noise on data?
1 次查看(过去 30 天)
显示 更早的评论
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
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/147218/image.png)
0 个评论
回答(1 个)
Image Analyst
2015-2-20
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 个评论
Image Analyst
2015-2-21
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.
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/182068/image.jpeg)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Multirate Signal Processing 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!