How to remove sine shaped noises from a signal?

10 次查看(过去 30 天)
Hello,
I have 2 signals, 1 is default sensor noise and other one is the real signal with noise. I get signals in time domain and convert them to frequency domain, then I substract noise signal from measured signal to clear the default sensor noise from the signal but there are frequency shifts between default noise and measured noise so direct substraction creates kind of sine shaped noises on resulting signal. I wonder if there is a way to find and eliminate these sine shaped signals or to fit two signals somehow to eliminate frequency shifts before substracting.
Here are my default sensor noise signal and measured signal with noise for referance
Thanks in advance

回答(1 个)

Image Analyst
Image Analyst 2023-12-5
编辑:Image Analyst 2023-12-5
How monotone is your "real" signal? Can you just zero out the FFT outside the known range of your signal? Or, if not, maybe just zero out at the major noise regions like around 900, 3300, and 7000 Hz?
Can you show us in time or space domain the original signal plot, and the denoised signal plot?
And I'm not sure that subtracting the spectra and inverse FTing will denoise the signal. Do you have a reference article on that?
  4 个评论
Recep
Recep 2023-12-6
No, it didn't occured to me before, but I realized now that I can consider the noise signal as a carrier signal as you suggest with lock-in amplifier and try to seperate them that way.
There were several methods for it as I recall which I dont remember any of it. But I know that MATLAB had functions for them. Better I search and try them. Any suggestion to start with?
Image Analyst
Image Analyst 2023-12-6
What I'm worried about is that though the noise is "permanent" and stable, the spectrum will still be varying a little bit from time to time. Look at it's spectrum. It's really spiky and can you imagine if you looked at that signal in real time on a spectrum analyzer? The signal would vary slightly really fast. So a spike one second might be a valley the next second. So subtracting the actual noisy noise spectrum might introduce more noise.
A Fourier transform is a linear system so if z = a*s1 + b*s2 then FT(z) = a*FT(s1) + b*FT(s2). So if you subtracted the FT of the second signal you should end up with the spectrum of the first signal. However there is noise, and as you (probably, or hopefully) know, adding or subtracting two signals means their noise adds in quadrature.
noise in (s1-s2) = sqrt( (noise in s1)^2 + (noise in s2)^2)
which is more noise than either signal alone had.
So by subtracting the noise spectrum you are actually introducing noise! I think the overall noise will be equalized more or less over the spectrum but will still be noisier on a local scale. So I think one thing to try might be to smooth the noise spectrum with sgolayfilt or movmean and then subtract the smoothed spectrum from the total spectrum. The smoothed spectrum should have the same basic shape but not the fine element-by-element variations. See if that helps.

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Get Started with Signal Processing Toolbox 的更多信息

产品

Community Treasure Hunt

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

Start Hunting!

Translated by